动态库性能分析方法和动态库性能分析系统

Download PDF

Info

Publication number
CN103838662A
Authority
CN
Grant status
Application
Patent type
Prior art keywords
library
count
dynamic
process
pmu
Prior art date
Application number
CN 201310581221
Other languages
English (en)
Inventor
李敏周
伯恩哈德·艾格
李在镇
金永洛
金鸿圭
金洪准
Original Assignee
三星电子株式会社
首尔大学校产学协力团
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Abstract

提供一种动态库性能分析方法和动态库性能分析系统,包括:将第一断点指令写入动态库函数的开始地址;记录第一事件计数值,所述第一事件计数值是当目标进程执行第一断点指令时的进程性能测量单元PMU计数;将第二断点指令写入动态库函数的返回地址;通过将记录的第一事件计数值与第二事件计数值进行比较来计算在执行动态库函数时在处理器核心中产生的PMU计数值,所述第二事件计数值是当目标进程执行第二断点指令时的进程PMU计数,其中,进程PMU计数是在执行目标进程时在处理器核心中产生的PMU计数值的累加值。

Description

动态库性能分析方法和动态库性能分析系统

[0001] 本申请要求于2012年11月23日提交到韩国知识产权局的第10_2012_0133854号韩国专利申请的优先权,其中,所述专利申请的公开内容通过引用全部合并于此。

技术领域

[0002] 与示例性实施例一致的方法和设备涉及一种动态库性能分析方法和动态库性能分析系统。

背景技术

[0003] 性能分析指的是当前执行的程序的执行状态的分析或与操作系统(OS)内核的通信状态的分析。通过性能分析,可以测量程序的性能信息,并可检测出潜在影响性能的因素。

发明内容

[0004] 示例性实施例提供一种动态库性能分析方法、存储所述方法的计算机可读记录介质和动态库性能分析系统,所述系统可测量在动态库函数单元中性能测量单元(PMU)事件计数。

[0005] 示例性实施例也提供一种动态库性能分析方法、使用所述方法的计算机可读记录介质和动态库性能分析系统,所述系统可测量在分时系统中由于发生上下文切换在动态库函数单元中性能测量单元(PMU)事件计数。

[0006] 根据示例性实施例的一方面,提供一种动态库性能分析方法,包括:将第一断点指令写入动态库函数的开始地址;记录第一事件计数值,所述第一事件计数值是当目标进程执行第一断点指令时的进程性能测量单元PMU计数;将第二断点指令写入动态库函数的返回地址;通过将记录的第一事件计数值与第二事件计数值进行比较来计算在执行动态库函数时在处理器核心中产生的PMU计数值,所述第二事件计数值是当目标进程执行第二断点指令时的进程PMU计数,其中,进程PMU计数是在执行目标进程时在处理器核心中产生的PMU计数值的累加值。

[0007] 根据示例性实施例的一方面,提供一种动态库性能分析方法,包括:对目标进程分配任务结构,将在执行目标进程时产生的性能测量单元(PMU)计数值记录在任务结构中作为进程PMU计数,其中,记录步骤包括:当使用上下文切换来开始执行目标进程时,初始化处理器核心的PMU计数器的PMU计数值,并且在目标进程切换到另一进程之前,将处理器核心的PMU计数器的当前PMU计数值累加地记录在任务结构中作为进程PMU计数。

[0008] 根据示例性实施例的一方面,提供一种动态库性能分析方法,包括:在动态库函数的起始地址处写入第一断点指令;当目标进程执行第一断点指令时产生函数进入事件;在动态库函数的返回地址处写入第二断点指令;当目标进程执行第二断点指令时产生函数结束事件。

[0009] 根据示例性实施例的又一方面,提供一种动态库性能分析系统,包括:PMU计数器,被配置为记录作为在处理器核心中发生的事件的累加值的PMU计数值;任务结构,在任务结构中针对每一个目标进程记录了进程PMU计数,所述进程PMU计数是在执行目标进程时记录的累加的PMU计数;监视进程,被配置为在动态库函数的起始地址处写入第一断点指令和在动态库函数的返回地址处写入第二断点指令,其中,监视进程记录作为当目标进程执行第一断点指令时的进程PMU计数的第一事件计数值,记录作为当目标进程执行第二断点指令时的进程PMU计数的第二事件计数值,并通过将第一事件计数值与第二事件计数值进行比较来计算在执行动态库函数时在处理器核心中产生的PMU计数。

附图说明

[0010] 通过参照附图详细地描述示例性实施例,以上和其它方面将变得更清楚,其中:

[0011] 图1是示出根据示例性实施例的动态库性能分析方法的示意流程图;

[0012] 图2到图8示意性地示出监视进程和目标进程的操作;

[0013] 图9示出在目标进程中的事件发生和在监视进程中事件处理过程的示意图;

[0014] 图10是示出进程调度器的进程PMU计数计算过程的示意流程图;

[0015] 图11和图12示出使用与用于测量进程PMU计数的进程相应的任务结构的性能分析系统;

[0016] 图13示出当从目标进程的库函数中调用另一库函数时的进程PMU计数测量过程。具体实施方式

[0017] 现在将参照附图,在下文中更全面地描述示例性实施例。然而,示例性实施例可以以各种形式被实现并不应被理解为限于在此阐述的示例性实施例。相反地,提供这些示例性实施例使得本公开将是彻底且完整的,并将全面地向本领域技术人员传达本公开的范围。贯穿整个说明,相同的标号指示相同的组件。

[0018] 使用的单数术语和类似指称应被理解为包含单数和复数两者,除非这里另有指示或清楚地与上下文相矛盾。术语“包含”、“具有”、“包括”和“含有”被理解为开放式术语(即,表示“包括但不限于”),除非另有提及。

[0019] 除非另有定义,本文使用的所有的技术术语和科学术语与本领域普通技术人员所通常理解的具有相同的意义。应注意,使用的任意和全部示例,或在本文中提供的示例性术语仅意图更好地示意本公开而并非限制本公开的范围,除非另有所指。此外,除非另有定义,可能不会过分解释在通用字典中定义的全部术语。

[0020] 在下文中,将参照附图描述示例性实施例。

[0021 ] 在以下描述中,作为处理器核心的内部组件的性能测量单元(PMU),指示用于测量在处理器核心中发生的事件的组件。这里,本领域技术人员可理解在处理器核心中发生的事件表示时钟周期、存储器操作(例如,读取或写入)、缓存事件(例如,命中、未命中或写回)、执行指令等。

[0022] PMU计数器是在PMU内提供的寄存器。PMU计数器对在处理器核心中的发生的事件进行计数并记录PMU事件计数的累加值。可在软件中编程PMU,并且PMU计数器可使用特定汇编指令来执行读取和写入操作。

[0023] 在以下的描述中,从PMU计数器读取的PMU计数被用作硬件PMU计数。[0024] 进程调度器是支持分时系统的操作系统(OS)内核的内部组件。进程调度器通过根据优先级的顺序划分中央处理单元(CPU)可用性来执行多个进程。在示例性实施例中,将通过针对Linux内核的示例来描述OS内核。

[0025] 图1是示出根据本发明的实施例的动态库性能分析方法的示意流程图,而图2到图8示意性地示出监视进程和目标进程的操作。

[0026] 参照图1,首先,监视进程在库函数的起始地址处设置第一断点(S110)。

[0027] 在用户进程被执行时,监视进程跟踪用户进程并监视在处理器核心中发生的事件。监视进程可包括例如,分析器。这里,分析器是用于测量程序的性能和在开发程序的过程中发现瓶颈的开发工具。

[0028] 例如,库函数可以是例如,动态库函数但是不限于此。

[0029] 参照图2,执行监视进程10和目标进程20。目标进程20是作为监视进程10的监视目标的用户进程并包括用户程序21和链接到用户程序21的动态库22。

[0030] 如上所述,监视进程10跟踪用户进程,并且可以访问(读取、写入)目标进程20的地址空间。在OS (诸如Linux)中,OS通常不能直接访问其它用户进程的地址空间和寄存器。然而,监视进程10例外地被允许访问其它用户进程的空间地址和寄存器。

[0031] 监视进程10在库函数的起始地址(例如,在地址0x20)处设置第一断点BP_ST。其后,监视进程10可进入等待模式。例如,可通过插入软件断点指令设置第一断点BP_ST,但不限于此。

[0032] 在设置第一断点BP_ST中,断点指令可取代库函数的起始地址的原始指令。

[0033] 同时,虽然没有清晰地示出,但是监视进程10在库函数的起始地址处设置第一断点BP_ST之前,动态库22可被载入存储器并与用户程序21链接。

[0034] 在用户程序21中,为了调用预定动态库函数,用于调用用户程序21的动态库函数的代码可调用与动态库函数相应的程序链接表(PLT),并且具有动态库函数被加载到的地址的全局偏移表(GOT)可被PLT引用。这里,记录在GOT中的动态库函数被加载到的地址可被动态链接器记录。也就是说,GOT的缺省值可被设置为动态链接器的地址。因此,动态库函数的第一调用执行动态链接器并将动态库加载到存储器,并且动态库函数的地址可被记录在GOT中。其后,用于调用用户程序21的动态库函数的指令可在不执行动态链接器的情况下,通过引用记录在GOT中的动态库函数的地址来使用PLT调用动态库函数。

[0035] 这里,PLT是第一次被调用的代码区域,其用于使用户程序21调用预定的动态库函数。PLT包括对于每一个动态库函数间接调用各种动态库函数的代码。GOT是由PLT引用用于调用预定动态库函数的数据区域。动态库函数的地址被存储在GOT的存储空间中。

[0036] 接下来,再次参照图1,目标进程执行第一断点(S120)。如果目标进程在库函数的起始地址处执行第一断点,则可产生事件(例如,函数进入事件)。通过函数进入事件,停止目标进程的执行并从等待模式中释放监视进程。当目标进程执行断点时,可发生事件并且监视进程可处理所述事件,这将参照图9更加详细地描述。

[0037] 参照图3,在用户程序21中执行用于调用库函数的代码(DL_CL)(例如,地址0x10的代码)。因此,可以通过与库函数相应的PLT,通过引用记录在GOT中的库函数的地址来调用库函数的起始地址0x20。

[0038] 可选地,在运行时加载库函数的情况下,可通过使用函数指针直接调用动态链接器来直接调用库函数的起始地址0x20。最终,从目标进程20调用库函数,并执行在库函数的起始地址0x20设置的第一断点BP_ST。

[0039] 接下来,再次参照图1,监视进程获得目标进程的资源使用统计(S130)。可通过函数进入事件将监控进程从等待模式中释放,并且监控进程可获得目标进程的资源使用统计。

[0040] 在OS内核中,资源使用统计可包括关于进程的资源使用统计的数据(例如,Linux的等待因素中的结构体使用)但不限于此。

[0041] 在示例性实施例中,进程PMU计数信息可被添加到资源使用统计。由目标进程的任务结构来管理进程PMU计数信息,而且进程PMU计数信息是在执行目标进程时产生的针对每一个目标进程的PMU计数的累加值。

[0042] 这里,进程PMU计数是在执行目标进程时(也就是说,从开始执行由进程调度器调度到处理器核心的预定用户进程时到另一用户进程被调度到处理器核心停止执行用户进程时)产生的PMU计数的累加值。通常,相应于各个处理器核心,记录硬件PMU计数。然而,在示例性实施例中,进程PMU计数是与每一个进程相应的记录的PMU计数。

[0043] 参照图4,监视进程10获得目标进程20的第一资源使用统计。这里,第一资源使用统计指示当随着执行目标进程20的第一断点BP_ST产生函数进入事件时的目标进程20的资源使用统计。第一资源使用统计包括进程PMU计数,进程PMU计数是直到目标进程20执行第一断点BP_ST为止在处理器核心中产生的累加的PMU计数。

[0044] 通常,监视进程10不能直接访问OS内核。在示例性实施例中,为了将在OS内核中收集的进程PMU计数传送到监视进程10,如上所述,可以使用附加地包括进程PMU计数信息的资源使用统计,但不限于此。

[0045] 接下来,再次参照图1,监视进程在库函数进入模式中记录进程PMU计数(S140)。监视进程从目标进程的第一资源使用统计中提取进程PMU计数,并可将提取的进程PMU计数记录为第一 PMU计数。

[0046] 接下来,监视进程在库函数的返回地址处设置第二断点(S150)。在下文中,监视进程进入等待模式,并可以重新开始目标进程的执行。可以通过将第二断点的指令(例如,软件断点指令)插入到库函数的返回地址来设置第二断点,但不限于此。

[0047] 参照图5,在库函数的返回地址(例如,地址0x11)处设置第二断点BP_RT。库函数的返回地址可以是在库函数的执行被完成之后记录在其中的目标进程20的用户程序21的下一执行代码的地址。

[0048] 接下来,再次参照图1,目标进程执行第二断点(S160)。如果目标进程执行在库函数的返回地址处设置的第二断点,则可发生事件(例如,函数结束事件)。目标进程的执行被中断,并且由函数结束事件将监视进程从等待模式中释放。

[0049] 参照图6,在用户程序21中,执行库函数的返回地址的执行代码,例如,地址Oxll的代码。当完成库函数的执行并且从目标进程20中返回库函数时,执行设置在库函数的返回地址处的第二断点BP_RT。

[0050] 接下来,再次参照图1,监视进程获得目标进程的资源使用统计(S170)。在获得目标进程的资源使用统计时,由函数结束事件将监视进程从等待模式中释放。

[0051] 参照图7,监视进程获得目标进程20的第二资源使用统计。这里,在根据第二断点BP_RT的执行在发生函数结束事件时获得目标进程20的第二资源使用统计。第二资源使用统计包括到目标进程20已经执行第二断点BP_RT为止在处理器核心中产生的PMU计数的累加的进程PMU计数。

[0052] 接下来,再次参照图1,监视进程在库函数结束模式中计算累加的进程PMU计数(SlSO)0监视进程可从目标进程的第二资源使用统计中提取进程PMU计数并可将提取的进程PMU计数记录为第二 PMU计数。

[0053] 监视进程计算通过将第一 PMU计数与第二 PMU计数进行比较来计算在执行动态库函数时产生的累加的PMU计数。

[0054] 同时,监视进程可累加地存储每一个动态库函数计算的进程PMU计数。为此,可提供存储空间以用于累加地存储每一个动态库函数的PMU计数。例如,可以在监视进程的用户存储器空间中提供存储空间,但不限于此。

[0055] 接下来,从库函数的返回地址移除第二断点(S190)。其后,监视进程进入等待模式,并且可重新开始目标进程的执行。

[0056] 参照图8,监视进程10从库函数的返回地址Oxll中移除第二断点BP_RT。

[0057] 常规的库函数性能分析方法可包括例如,在编译或运行时插入的监视代码的使用或基于性能分析的采样。

[0058] 然而,在常规的库函数性能分析方法中会出现多种问题。也就是说,在编译时使用插入的监视代码的方法中,为了执行性能分析会需要重新编译。此外,当在分时系统中执行上下文切换时,另一进程的运行时间会与性能分析相关联,从而导致不准确结果。特别地,基于性能分析的采样具有局限在于基于性能分析的采样会基于统计数据导致不准确、近似的结果。

[0059] 例如,在Linux环境中使用并基于在执行时插入监视代码的方法的ltrace,可被用作在执行性能分析时用于跟踪库函数的执行的工具。在Itrace中,库函数的起始点和结束点插入软件断点,库函数的执行时间被计算为给定事件与断点一起发生的时间。此外,在Itrace中,假设库函数起始于与库函数相应的PLT的起始地址,计算库函数目标的执行时间。

[0060] 特别地,使用ltrace,不能对在目标进程的运行时动态地加载的库函数进行性能分析。由于通过动态链接器使用函数指针来获得在运行时显式加载的库函数的地址,并且在没有通过PLT的情况下直接调用该地址,所以使用在PLT设置的断点不能获得任何事件。此外,性能分析只能在第一次调用库函数时启动,而当从库函数中调用另一库函数时,不能完成性能分析。此外,当在分时系统中发生上下文切换时,另一进程的运行时间可被无意地包含在计算的目标进程的运行时间中。

[0061] 但是,在根据示例性实施例的动态库分析方法中,在运行时加载动态库函数之后,在没有将断点插入PLT的起始地址的情况下,断点被设置在动态库函数的起始地址处,从而更加广泛地支持动态库函数的性能分析。

[0062] 因此,也可对甚至不调用PLT的库函数进行性能分析。此外,如稍后将要描述地,甚至从相关的库函数调用另一库函数时,能够对各个库函数进行性能分析,因而独立地测量并计算调用程序的进程PMU计数和被调用程序的进程PMU计数。

[0063] 在下文中,将参照图9描述在目标进程中的事件发生和在监视进程中的事件处理过程。图9示意性示出在目标进程中的事件发生和在监视进程中的事件处理过程。

[0064] 参照图9,首先,监视进程10开始监视目标进程20 (S210)。如上所述,监视进程10可在跟踪目标进程20时,在目标进程20的库函数的起始地址处设置第一断点。

[0065] 接下来,监视进程10进入事件等待模式以等待事件的发生(S220)。

[0066] 接下来,执行目标进程20 (S310)。目标进程20可执行由监视进程10设置的断点。例如,目标进程20可执行在库函数的起始地址处设置的第一断点。可选地,目标进程20可执行在库函数的返回地址处设置的第二断点。

[0067] 接下来,检测在目标进程20中的事件的发生(S320)。当目标进程20执行断点时,在目标进程20中发生事件。例如,当目标进程20执行在库函数的起始地址设置的第一断点时,可发生函数进入事件。可选地,目标进程20可执行在库函数的返回地址处设置的第二断点,可发生函数结束事件。

[0068] 停止目标进程20的执行(S330)。如果发生事件,则结束目标进程20的执行,并且事件的发生被通知到监视进程10以允许从事件等待模式中释放监视进程。

[0069] 接下来,监视进程10可处理事件(S230)。当目标进程20执行断点时,监视进程10可处理事件。例如,在发生函数进入事件的情况下,当目标进程20执行在库函数的起始地址处设置的第一断点时,监视进程10可获得目标进程20的资源使用统计然后从中提取进程PMU计数,由此在库函数的返回地址处设置第二断点。可选地,在当目标进程20执行在库函数的返回地址处设置的第二断点时发生函数结束事件的情况下,监视进程10可获得目标进程20的资源使用统计,以随后从中提取进程PMU计数,接着是移除在库函数的返回地址处设置的第二断点。

[0070] 接下来,监视进程10重新开始目标进程的执行(S240)。监视进程10以上述方式处理事件并再次进入等待模式以从S220重复处理步骤。然后,监视进程10重新开始目标进程20的执行以允许目标进程20重复地从S310执行处理步骤。

[0071] 在下文中,将参照图10描述进程调度器的进程PMU计数计算过程。图10是进程调度器的进程PMU计数计算过程的示意流程图。

[0072] 参照图10,在OS内核中执行进程调度器(S410)。如上所述,进程调度器通过根据优先级的顺序划分CPU可用性来执行多个进程。

[0073] 接下来,当通过上下文切换开始执行目标进程时,进程调度器初始化PMU计数器的硬件PMU计数(S420)。更具体地,在上下文切换之前,例如,当监视进程进入等待模式并且在目标进程被执行之前,可将硬件PMU计数初始化为O。

[0074] 接下来,OS内核执行目标进程(S430)。

[0075] 接下来,为了实现将上下文切换到另一进程,目标进程进入进程调度器(S440)。

[0076] 接下来,进程调度器累加地将硬件PMU计数记录在与目标进程相应的任务结构中(S450)。更具体地,进程调度器读取累加地记录在PMU计数器中的硬件PMU计数直到完成目标进程的执行并调度另一用户进程为止,例如,直到停止目标进程的执行并执行监控进程为止。然后,读取的硬件PMU计数被累加地记录进程PMU计数中,而进程PMU计数被记录在与目标进程相应的任务结构中。

[0077] 每当发生上下文切换时,可重复执行图10中所示的进程PMU计数计算过程。因此,即使发生上下文切换,执行另一用户进程时产生的硬件PMU计数不被包括在进程PMU计数中。

[0078] 图11和图12示出使用与用于测量进程PMU计数的进程相应的任务结构的性能分析系统。

[0079] 参照图11,性能分析系统包括监视进程10、第一目标进程20a、第二目标进程20b、OS内核30和处理器核心40。

[0080] 当产生函数进入事件和函数结束事件时,监视进程10可从资源使用统计中提取目标进程的进程PMU计数,并基于提取的进程PMU计数,监视进程10可计算在目标库函数的执行期间产生的进程PMU计数。

[0081] 第一目标进程20a和第二目标进程20b是将由监视进程10跟踪的用户进程。在图11中给出了两个目标进程的示例,即,第一目标进程20a和第二目标进程20b,但是示例性实施例的方面不限于此。

[0082] OS内核30包括任务结构31和进程调度器32。任务结构31是从OS内核分配给每一个进程的数据结构。在图11中给出了包括第一任务结构31a和第二任务结构31b的任务结构31的示例,但示例性实施例的方面不限于此。

[0083] 可在任务结构31a和任务结构31b中的每一个中额外地提供累加地记录进程PMU计数的空间。在调度第一目标进程20a时产生的进程PMU计数可被记录在第一任务结构31a中,而在调度第二目标进程20b时产生的进程PMU计数可被记录在第二任务结构31b中。处理器核心40可包括PMU 41和CPU 42。PMU 41测量在处理器核心40中发生的事件并将PMU计数值记录在PMU计数器中。可根据由PMU 41支持的PMU计数器的数量来测量在库函数的执行期间发生的各种事件。在进程调度中,CPU 42根据进程调度器32执行用户进程。

[0084] 参照图12,性能分析系统包括可作为多处理器核心的处理器核心50。在图12中给出了处理器核心50包括第一 CPU和第二 CPU的示例,但不限于此。

[0085] 多处理器核心50可包括与CPU 52和CPU 54的PMU 51和PMU 53。

[0086] 根据图10中示出的进程PMU计数计算过程以及图11和图12中示出的使用与进程相应的任务结构的性能分析系统,在每一个进程的执行期间产生的进程PMU计数可被保留在OS内核的内部数据结构中。因此,即使在分时系统中执行上下文切换时,使用由OS内核为每一个进程独立地分配的任务结构,因此阻止了另一用户进程的硬件PMU计数被无意的包括在目标进程的进程PMU计数中。

[0087] 在下文中,将参照图13描述当从目标进程的库函数中调用另一库函数时的进程PMU计数测量过程。图13示出当从目标进程的库函数中调用另一库函数时的进程PMU计数测量过程。

[0088] 参照图13,用户程序21包括执行代码21a和PLT 21b。稍后将会描述的PLT 21b是用于调用动态库函数的代码区域,并可包括例如qux_plt、baz_plt、bar_plt、foo_plt等。

[0089] 链接到用户程序21的动态库22可包括,例如动态库函数(诸如,qux()、baz()、bar O或foo())。通过监视进程,分别在动态库函数的起始地址处设置断点BP_ST1、BP_ST2、BP_ST3 和 BP_ST 4。

[0090] 如果在执行代码21a中调用动态库函数,例如,foo (),则从PLT 21b中调用用于调用foo()的代码区域,例如foo_plt。接下来,代码区域foo_plt通过参照记录在GOT(未示出)中的foo ()的地址来调用加载到存储器的动态库22的函数foo ()。

[0091] 由于在f00 ()的起始地址处设置第一断点BP_ST4,所以产生函数进入事件,并且监视进程记录在fooO函数输入模式中的进程PMU计数作为第一 PMU计数值。其后,监视进程在foo ()的返回地址处设置第二断点BP_RT4。

[0092] 接下来,如果执行foo ()时调用另一动态库函数,例如,bar (),则产生函数进入事件,这是因为在bar()的起始地址处设置了第三断点BP_ST3,并且监视进程将bar ()函数进入模式中的进程PMU计数记录作为第二 PMU计数值。其后,监视进程在bar ()的返回地址处设置第四断点BP_RT3。

[0093] 接下来,如果完成bar()的执行并返回bar (),则产生函数结束事件,这是因为在bar ()的返回地址处设置了第四断点BP_RT3,并且监视进程将bar()函数结束模式中的进程PMU计数记录作为第三PMU计数值。

[0094] 接下来,如果完成foo O的剩余代码的执行并返回foo (),则产生函数进入事件,这是因为在f00 ()的返回地址处设置了第二断点BP_RT4,并且监视进程将foo ()函数结束模式中的进程PMU计数记录作为第四PMU计数值。

[0095] 为了计算执行foo ()函数时产生的实际进程PMU计数,监视进程获得通过从第四PMU计数值减去第一 PMU计数值得到的PMU计数与通过从第三PMU计数值减去第二 PMU计数值得到的PMU计数之间的差。如上所述,根据示例性实施例,由于调用程序与被调用程序可被单独地测量并计算,所以可以实现对各个库函数的性能分析。

[0096] 关于公开于此的方面中描述的方法或算法的步骤可直接在硬件实现中实现,在由处理器执行的软件模块中实现或在两者的结合中实现。软件模块可置于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可拆卸磁盘、⑶-ROM或本领域公知的存储介质的任何其它形式。示例性存储介质可被耦合到处理器,从而使处理器可从存储介质中读取信息并将信息写入存储介质。在可选方案中,存储介质可被集成到处理器。而且,在一些方面,处理器和存储介质可置于特定用途集成电路(ASIC)。此外,ASIC可置于用户终端中。可选地,处理器和存储介质可作为独立组件放置在用户终端中。

[0097] 在详细描述的结尾,本领域技术人员将理解,在实质上不脱离本发明的原理的情况下,可对优选的实施例做出多个变化和修改。因此,在描述性意义上使用的示例性实施例而不是为了限制的目的。

Claims (20)

1.一种动态库性能分析方法,包括: 将第一断点指令写入动态库函数的开始地址; 记录第一事件计数值,所述第一事件计数值是当目标进程执行第一断点指令时的进程性能测量单元PMU计数; 将第二断点指令写入动态库函数的返回地址; 通过将记录的第一事件计数值与第二事件计数值进行比较来计算在执行动态库函数时在处理器核心中产生的PMU计数值,所述第二事件计数值是当目标进程执行第二断点指令时的进程PMU计数; 其中,进程PMU计数是在执行目标进程时在处理器核心中产生的PMU计数值的累加值。
2.如权利要求1所述的动态库性能分析方法,其中,第一事件计数值的记录步骤包括:当目标进程执行第一断点指令时,获得目标进程的第一资源使用统计。
3.如权利要求2所述的动态库性能分析方法,其中,第一事件计数值的记录步骤包括:通过从目标进程的第一资源使用统计中提取目标进程的进程PMU计数来记录第一事件计数值。
4.如权利要求2所述的动态库性能分析方法,其中,第一资源使用统计包括到目标进程执行第一断点指令为止在目标进程的执行期间在处理器核心中产生的累加的PMU计数值的进程PMU计数。
5.如权利要求1所述的动态库性能分析方法,其中,在处理器核心中产生的PMU计数值的计算步骤包括:在目标进程执行第二断点指令时,获得目标进程的第二资源使用统计。
6.如权利要求5所述的动态库性能分析方法,其中,在处理器核心中产生的PMU计数值的计算步骤还包括:从目标进程的第二资源使用统计中提取目标进程的进程PMU计数。
7.如权利要求5所述的动态库性能分析方法,其中,第二资源使用统计包括在目标进程执行第一断点指令之后到目标进程执行第二断点指令进程PMU计数为止,在目标进程的操作期间在处理器核心中产生的累加的PMU计数值的进程PMU计数。
8.如权利要求6所述的动态库性能分析方法,其中,在处理器核心中产生的PMU计数值的计算步骤包括:通过将提取的第二事件计数值与记录的第一事件计数值进行比较来计算在执行动态库函数时在处理器核心中产生的PMU计数值。
9.如权利要求1所述的动态库性能分析方法,还包括: 在第一断点指令的写入之后,进入在等待模式中监视目标进程的监视进程, 其中,第一事件计数值的记录步骤包括:当目标进程执行第一断点指令时,从等待模式中释放监视进程。
10.如权利要求1所述的动态库性能分析方法,还包括: 在第二断点的写入步骤后,进入在等待模式中监视目标进程的监视进程, 其中,第二事件计数值的记录步骤包括:当目标进程执行第二断点指令时,从等待模式中释放监视进程。
11.一种动态库性能分析方法,包括: 对目标进程分配任务结构; 将在执行目标 进程时产生的性能测量单元PMU计数值记录在任务结构中作为进程PMU计数,其中,记录步骤包括:当使用上下文切换来开始执行目标进程时,初始化处理器核心的PMU计数器的PMU计数,并且在目标进程切换到另一进程之前,将处理器核心的PMU计数器的当前PMU计数值累加地记录在任务结构中作为进程PMU计数。
12.如权利要求11所述的动态库性能分析方法,还包括:将记录在任务结构中的进程PMU计数存储在目标进程的资源使用统计中。
13.如权利要求12所述的动态库性能分析方法,还包括:允许监视进程在发生动态库函数的进入事件时从目标进程的资源使用统计中提取第一事件计数值,并允许监视进程在发生动态库函数的结束事件时从目标进程的资源使用统计中提取第二事件计数值。
14.如权利要求13所述的动态库性能分析方法,还包括:允许监视进程通过将第一事件计数值与第二事件计数值进行比较来计算在执行动态库函数时产生的PMU计数值。
15.—种动态库性能分析方法,包括: 将第一断点指令写入动态库函数的起始地址; 当目标进程执行第一断点指令时产生函数进入事件; 在动态库函数的返回地址处写入第二断点指令; 当目标进程执行第二断点指令时产生函数结束事件。
16.如权利要求15所述的动态库性能分析方法,还包括:记录第一事件计数值,所述第一事件计数值是当发生函数进入事件时的进程PMU计数, 其中,进程PMU计数是在执行目标进程时在处理器核心中产生的PMU计数的累加值。
17.如权利要求16所述的动态库性能分析方法,还包括:记录第二事件计数值,所述第二事件计数值是当发生函数结束事件时的进程PMU计数。
18.如权利要求17所述的动态库性能分析方法,还包括:通过将第一事件计数值与第二事件计数值进行比较来计算在执行动态库函数时在处理器核心中产生的PMU计数。
19.如权利要求15所述的动态库性能分析方法,还包括:当发生函数进入事件和发生函数结束事件时,记录进程PMU计数的当前PMU计数, 其中,进程PMU计数是在执行目标进程时在处理器核心中产生的PMU计数的PMU累加值。
20.如权利要求19所述的动态库性能分析方法,其中,从目标进程的资源使用统计中提取进程PMU计数的当前PMU计数。

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5768500A (en) * 1994-06-20 1998-06-16 Lucent Technologies Inc. Interrupt-based hardware support for profiling memory system performance
US6079032A (en) * 1998-05-19 2000-06-20 Lucent Technologies, Inc. Performance analysis of computer systems
US7032213B1 (en) * 1999-09-01 2006-04-18 Microsoft Corporation Fixing incompatible applications using a light debugger
US6658654B1 (en) * 2000-07-06 2003-12-02 International Business Machines Corporation Method and system for low-overhead measurement of per-thread performance information in a multithreaded environment
CN1506810A (zh) * 2002-12-09 2004-06-23 国际商业机器公司 用于在服务器端程序中处理外部事件的系统和方法
US20050010908A1 (en) * 2003-07-10 2005-01-13 International Business Machines Corporation Method, apparatus and computer program product for implementing breakpoint based performance measurement
CN101443738A (zh) * 2006-05-19 2009-05-27 国际商业机器公司 提取cpu时间工具
CN101383690A (zh) * 2008-10-27 2009-03-11 西安交通大学 一种基于socket的容错计算机系统的网络同步方法
US20110145838A1 (en) * 2009-12-11 2011-06-16 De Melo Arnaldo Carvalho Profiling the system providing performance statistics in real time

Also Published As

Publication number Publication date Type
EP2735970A3 (en) 2015-04-29 application
EP2735970A2 (en) 2014-05-28 application
US20140149968A1 (en) 2014-05-29 application
KR20140066913A (ko) 2014-06-03 application
JP2014106972A (ja) 2014-06-09 application

Similar Documents

Publication Publication Date Title
Chen et al. Path-based failure and evolution management
Pathak et al. Where is the energy spent inside my app?: fine grained energy accounting on smartphones with eprof
Bond et al. PACER: proportional detection of data races
Zamfir et al. Execution synthesis: a technique for automated software debugging
US6374369B1 (en) Stochastic performance analysis method and apparatus therefor
Olszewski et al. Kendo: efficient deterministic multithreading in software
Bach et al. Analyzing parallel programs with pin
Bhansali et al. Framework for instruction-level tracing and analysis of program executions
US20110078666A1 (en) System and Method for Reproducing Device Program Execution
US7958497B1 (en) State synchronization in recording and replaying computer programs
US7673181B1 (en) Detecting race conditions in computer programs
Azimi et al. Online performance analysis by statistical sampling of microprocessor performance counters
US7103877B1 (en) System and method for characterizing program behavior by sampling at selected program points
US20090241095A1 (en) Call Stack Sampling for Threads Having Latencies Exceeding a Threshold
US20120304172A1 (en) Method and System for Transaction Controlled Sampling of Distributed Hetereogeneous Transactions without Source Code Modifications
Jula et al. Deadlock Immunity: Enabling Systems to Defend Against Deadlocks.
US20090287729A1 (en) Source code coverage testing
Huang et al. LEAP: lightweight deterministic multi-processor replay of concurrent java programs
US6047390A (en) Multiple context software analysis
US20080127109A1 (en) Method and system for generating and displaying function call tracker charts
Arnold et al. QVM: an efficient runtime for detecting defects in deployed systems
US5799143A (en) Multiple context software analysis
Pathak et al. Fine-grained power modeling for smartphones using system call tracing
US20110138368A1 (en) Verifying function performance based on predefined count ranges
US20050251794A1 (en) Method of debugging code and software debugging tool

Legal Events

Date Code Title Description
C06 Publication
C10 Entry into substantive examination