利用PAPI接口监测Java程序的硬件执行特征 - 编程入门网
利用PAPI接口监测Java程序的硬件执行特征时间:2011-10-02 ibm 王峰简介:PAPI 是一组用于访问处理器硬件性能计数器的本地接口,利用这一接口对 Java 程序的硬件执 行特征进行监测将有助于在计算机系统的硬件层上发现程序性能问题的根源所在。本文介绍了 PAPI 的重 要概念及其常用接口,分析了将其应用于 Java 程序性能测评的要点和难点,提出一种基于 JVMTI 接口 的方法实现了利用 PAPI 接口监测 Java 程序的运行时硬件执行特征。 PAPI 接口概览 在计算机系统的硬件层对 Java 程序的性能进行测评与分析,有助于发现程序 性能问题的根源所在。当前的主流处理器大多设定了一类用于记录程序运行过程中的处理器行为细节的事 件(Event),同时还专门设计了硬件性能计数器(Hardware Performance Counter)对这类事件进行计 数。硬件性能计数器监测到的处理器事件的发生次数能够直观地体现程序运行时的硬件执行特征,例如处 理器执行完成的指令数、L1 Cache 的失效次数等等,是测评和分析程序性能的可靠依据。 PAPI( Performance Application Programming Interface)是一组可以在多个处理器平台上对硬件性能计数器 进行访问的标准接口,它的目标是方便用户在程序运行时监测和采集由硬件性能计数器记录的处理器事件 信息。 不同的处理器会根据自身的体系结构特征定义出不同的处理器事件集合,在 PAPI 中这些 事件被称为原生事件(Native Event)。同时,不同的处理器也会具有不同数量的硬件性能计数器,而在 任意时刻一个计数器只能对一个指定的原生事件进行监测。考虑到事件监测和性能分析的需求,不同处理 器的原生事件集合往往在功能上会有交集(例如那些和存储层次访问、Cache 一致性协议、周期和指令计 数、功能单元和流水线状态等方面相关的事件),但是其对应的原生事件名称却未必相同。为了便于事件 甄别,PAPI 将这些在不同处理器中存在功能共性的原生事件抽象成了 PAPI 接口专用的预制事件 (Preset Event)并统一命名。PAPI 预制事件不仅仅是对单一原生事件的简单映射,根据不同体系结构 中原生事件设定的差异,它也可能是由多个原生事件构成,例如记录 L1 Cache 失效次数的 PAPI 预制事 件,在某些处理器上实现时就需要依赖 L1 D-Cache 失效次数和 L1 I-Cache 失效次数等两个原生事件的 支持。通过定义预制事件,PAPI 接口具有了一定的可移植性,但是对于某些处理器中定义的原生事件集 合,PAPI 预制事件可能无法将其完全覆盖。 PAPI 提供了两类接口访问硬件性能计数器:一类是 比较简单的高层接口用于完成基本的计数测量,另一类是可编程的底层接口能够满足用户的复杂的监测需 求。 PAPI 高层接口提供了一些访问硬件性能计数器所需的基本功能,例如配置计数器、启动计数、停止计 数、读取计数器的数值等。高层接口只能利用 PAPI 预制事件,而不能够通过配置计数器去监测超出预制 事件覆盖范围以外的处理器原生事件。不过,PAPI 高层接口能够直接返回在程序测评中最经常使用的一 些性能指标,例如每个周期执行完成的指令数、每秒执行完成的浮点指令 / 浮点操作数、程序的运行时 间等;另外,高层接口还能获取一些系统信息,例如处理器能够支持的硬件性能计数器的个数等。 不同于高层接口只能使用 PAPI 预制事件,PAPI 底层接口能够直接使用原生事件对程序运行时的 处理器硬件行为进行监测。用户可以将一个或多个原生事件组成一个事件组(Event Set),然后通过设 置硬件性能计数器对事件组中所有的原生事件同时进行监测,进而根据监测结果分析程序的性能问题,例 如通过同时采集每秒执行完成的浮点指令数和 L1 Cache 失效次数就有助于分析是否是因为 L1 Cache 的 命中率不高导致了程序浮点性能的下降。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |