基于PMU的并行程序性能监测分析方法与流程

文档序号:11233988阅读:1292来源:国知局
基于PMU的并行程序性能监测分析方法与流程

本发明涉及计算机软件技术领域,具体涉及一种基于pmu的并行程序性能监测分析方法。



背景技术:

随着大规模集成电路设计技术的发展,提高单核处理器性能一直是传统微处理器结构设计的目标,多年来人们一直通过提高芯片晶体管的数量达到提高性能的目的。然而,晶体管增加在提高性能的同时使得处理器的功耗变大且频率也达到限制,半导体技术几乎达到物理的极限,很难再通过提高处理器的主频来提高处理器的性能。然而,随着手机通讯、嵌入式系统、航空航天事业的发展,对处理器体系结构提出了新的要求,且日益复杂的多媒体、科学计算等多个应用领域呼吁一个更加强大的计算性能的计算机。与此同时,并行程序的设计也变得越来越重要。然而由于硬件结构、软件平台的差异,并行程序在不同的平台上运行时的调试技术、性能效率等存在较大的差异。在并行程序编程实践中,如何获得实际的高性能已经超出了传统的基于算法复杂度的分析,通过实际运行程序进行在线监测的性能剖析的方法变得尤为重要。

当前,对程序运行状况的在线监测普遍采用的是instrumentation。该技术通过在程序中静态或动态地插入额外的代码区观察程序的实际运行情况,可以帮助程序开发者理解程序的执行轨迹和与系统的交互行为。

现有的并行程序调试及性能分析工具主要分为基于pvm并行平台、基于mpi并行平台和跨平台三种。其中,国外比较著名的并行调试及性能分析工具有xpvm、paradyn、xmpi、scalea和totalview等;国内比较著名的并行程序为可视化工具有运行于曙光系列上的paravision和dcdb等。

虽然instrumentation技术可以观察并行程序的实际运行情况,对其进行监测,但是,该方法由于向原程序中插入了额外的代码,会对程序本身的执行造成较大的干扰,造成监测结果的不稳定性。此外,现有国内外并行程序调试及性能分析工具对并行环境的依赖性比较强,在系统平台的可移植性、功能扩展性和健壮性放面有一定的局限。例如,totalview在符号调试中增加了多线程的窗门,并可以实现数组的可视化,但是数组查看只能针对单个进程。同样,guide-view用于辅助用户理解openmp程序的性能,但缺乏自动性能的瓶颈分析的能力。



技术实现要素:

(一)要解决的技术问题

本发明要解决的技术问题是:如何设计一种对程序运行本身不造成干扰,实现简单的并行程序性能监测分析方法。

(二)技术方案

为了解决上述技术问题,本发明提供了一种基于pmu的并行程序性能监测分析方法,包括以下步骤:

第一步:设计性能驱动器和性能分析器,所述性能驱动器用于实现基于性能计数器pmu的指定进程的采样,所述性能分析器用于解析用户输入的命令和参数,根据该命令和参数确定pmu参数,将pmu参数封装成数据结构,以系统调用的方式将pmu参数传递给性能驱动器,再调用性能驱动器开启pmu;还用于在系统调用返回时,读取性能驱动器保存的采样结果数据;

第二步:运行性能分析器,解析用户输入的命令和参数,根据该命令和参数确定pmu参数,将pmu参数封装成数据结构,以系统调用的方式将pmu参数传递给性能驱动器,再调用性能驱动器开启pmu;

第三步:运行性能驱动器,实现基于性能计数器pmu的指定进程的采样;

第四步:性能驱动器向性能分析器传递采样结果数据。

优选地,第三步中,性能驱动器实现基于性能计数器pmu的指定进程的采样的步骤具体为:

s31、注册pmu中断处理程序,所述中断处理程序用于在计数器溢出时处理采样结果数据;

s32、控制寄存器根据所述pmu参数配置所要监测的性能事件作为指定进程,并对计数器的采样周期进行初始化,设置pmcter的区间范围为0~sav-1,其中sav为采样周期;

s33、打开计数器,运行并行程序,计数器开始计数,监测事件每发生一次,计数器值+1;

s34、当计数器达到采样周期,触发中断处理程序,保存计数器的计数器值,作为采样结果数据;

s35、中断处理完成之后,重置计数器的值,重置为~0-sav-1,跳转到步骤s33使计数器重新开始计数。

优选地,步骤s33中,计数器采用准确的基于事件的采样模式pebs统计监测事件,实现计数。

优选地,第四步中,性能驱动器采样如下方式向性能分析器传递采样结果数据:参数传递或内存映射方式。

(三)有益效果

本发明基于性能事件,为程序开发者提供目标程序运行引起的微体系性能事件特征。同时,能够结合抽样方法和编译技术,将提取的数据特征与其在应用程序代码中的位置相对应,帮助程序开发者反思程序设计本身的问题。本发明不涉及任何关于算法本身的直接信息,因而对程序本身的执行几乎不会造成任何明显的干扰。该方法为并行程序的性能监测提供技术保障和应用支撑。

附图说明

图1为本发明的pmu工作流程图;

图2为本发明的基于事件的采样方式工作流程图。

具体实施方式

为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。

本发明针对现有代码调试和性能分析方法工具的不足和缺点,以并行程序为研究对象,设计了一种基于pmu的并行程序性能监测分析方法。

本发明提供的基于pmu的并行程序性能监测分析方法,以龙芯3a处理器为例,对运行在龙芯3a多核平台上的基于pmu性能监测过程进行分析,包括以下步骤:

第一步:设计性能驱动器和性能分析器,所述性能驱动器用于实现基于性能计数器pmu的指定进程的采样,所述性能分析器用于解析用户输入的命令和参数,根据该命令和参数确定pmu参数,将pmu参数封装成数据结构,以系统调用的方式将pmu参数传递给性能驱动器,再调用性能驱动器开启pmu;还用于在系统调用返回时,读取、分析性能驱动器保存的采样结果数据,以用户可读的形式呈现,方便用户定位性能热点;

性能驱动器运行于系统内核中。性能驱动器可分为体系相关代码和体系无关代码。其中,体系相关代码是操纵pmu的代码,比如:打开和关闭性能计数器、初始化性能计数器、读/写性能计数器等;体系无关代码不直接操纵硬件,负责传递用户层参数给体系相关代码设置性能计数器,通过体系相关代码获得采样信息,再将之传递到用户空间。性能驱动器支持指定进程的采样模式。相比于全系统范围的采样,指定进程的采样只对指定进程进行采样,其采样结果更加准确。

pmu由成对的pmcter(performancemonitoringcounter)和pmctrl(performancemonitoringcontrol)寄存器组成。其中,pmctrl是控制寄存器,用来配置所要监测的性能事件,即监测事件(如执行周期、指令数、cachemiss率和分析误预测率等),pmcter则是计数器,用于记录监测事件的发生次数,每次监测事件发生时,自增1,当计数器的最高位变成1时,表示计数器溢出,计数器将触发一个中断。

第二步:运行性能分析器,解析用户输入的命令和参数,根据该命令和参数确定pmu参数,将pmu参数封装成数据结构,以系统调用的方式将pmu参数传递给性能驱动器,再调用性能驱动器开启pmu;

第三步:运行性能驱动器,实现基于性能计数器pmu的指定进程的采样;

如图1所示,第三步中,性能驱动器实现基于性能计数器pmu的指定进程的采样的步骤具体为:

s31、注册pmu中断处理程序,注册中断号,所述中断处理程序用于在计数器溢出时处理采样结果数据;

s32、控制寄存器根据所述pmu参数配置所要监测的性能事件作为指定进程,并对计数器的采样周期进行初始化(以便在性能计数器可监测的事件发生时,计数器pmcter按照一定的采样周期开始计数),设置pmcter的区间范围为(0~sav-1),其中sav(samplingaftervalue)为采样周期;

s33、打开计数器,运行并行程序,计数器开始计数,监测事件每发生一次,即指定进程(即监测事件)上下文切入或切出时,计数器值+1;

本发明中采用基于事件的采样方式直接统计监测事件,通过配置pmu中所监测的特定事件,在并行程序运行时通过收集计数器的值来获得监测事件信息。当计数器达到采样周期,就触发中断处理程序,中断处理程序用于收集当时的系统状态信息。基于事件的采样方式工作流程如图2所示。

步骤s33中,计数器采用准确的基于事件的采样模式pebs统计监测事件,实现计数。

采样结果的准确性是后期代码分析的关键。因此,为了提高性能监测结果的准确性,设置所有可监测事件的模式为“准确的基于事件的采样模式(pebs)”。pebs硬件的功能定义:

在计数寄存器的首位转变为1时,重新设置计数器值;

保存系统状态至内存中的pebsbuffer。

注册pebsbuffer满中断,对应中断处理函数将pebsbuffer内容保存至指定文件。

pebs模式不同于常规采样模式,具有以下优点:一,系统状态保存及时,pc值偏差至多为1;二,由于不再像常规采样模式那样每次计数器溢出都进入中断处理,pebs模式下的开销也会降低;三,计数寄存器溢出后,值会重新被设置成初值,继续计数,只有当pebsbuffer满时才触发中断,减少了中断次数,也进一步降低了pmu的开启对程序运行时行为的干扰,保证了采样信息的有效性。

s34、当计数器达到采样周期,即计数器一旦发生溢出,系统调用中断处理函数,触发中断处理程序,保存计数器的计数器值,作为采样结果数据,中断处理函数保存系统状态;

s35、中断处理完成之后,重置计数器的值,重置为~0-sav-1,跳转到步骤s33使计数器重新开始计数。

第四步:性能驱动器向性能分析器传递采样结果数据。

第四步中,性能驱动器采样如下方式向性能分析器传递采样结果数据:参数传递或内存映射方式。如果需要向性能分析器返回调用图等复杂信息时,使用内存映射的方式,通过内存映射函数将文件内容映射到某块内存上,通过对这块内存的读取和修改可以实现对被映射文件的读取和修改。内存映射的方式适用于较复杂的采样结果的传递,而简单规则的采样结果封装到数据结构中采用参数传递的方式即可。

可以看出,采用本发明基于pmu性能监测分析方法,通过pmu采样的方式获得程序运行时行为特征信息,对采样结果加以综合分析后,对影响程序性能的热点代码进行定位,从而进行程序优化。该方法能够帮助代码程序员依据性能分析结果,对热点代码进行修改和优化,使程序运行时性能得到提升,从而提高整个系统的运行性能。本发明实现简单有效,达到了应用的要求。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1