利用PAPI接口监测Java程序的硬件执行特征 - 编程入门网
IBM POWER5+ 处理器中,共有六个硬件性能计数器,因 此一共可以有六个处理器事件被同时监测。不过,六个计数器中的 0 号到 3 号计数器是可编程的,可以 监测多种不同的事件;而 4 号和 5 号计数器则是专用计数器,只能够对应地监测 PM_RUN_INST_CMPL 和 PM_RUN_CYC 事件。通过在程序运行过程中对这个事件簇中的事件发生次数进行监测,用户能够获得程序 的 CPI(Cycles per Instruction)、流水线正常运行的周期比例、流水线为空的周期比例等性能指标。
以本文附带的样例代码为例,利用 PAPI 接口监测 Java 程序的硬件执行特征,用户首先要按照 常规方法编译被监测的 Java 应用程序。
然后, 将 C 语言编写的代理程序编译为动态链接库。
注意,因为本文在代理 程序中使用了 pthread 库函数,所以要在编译选项中增加 -lpthread 参数。另外,还需要保证在编译时 已经包含了定义有 JVMTI 接口函数的头文件。 最后,在执行被监测 Java 程序的时候,通过下面 的指令加载代理程序并对 Java 程序进行运行时的监测。
在 Java 程序的运行过程中,JVMTI 代理程序将对表 3 所列的虚拟机事件进 行监控并调用与之相对应的回调函数。回调函数通过 PAPI 接口访问处理器的硬件性能计数器,并在被监 测程序运行完成时获得程序中各个线程的硬件执行特征,其输出如下。
通过分析上面的输出信息,用户可以发现在被监测的 Java 程序运 行过程中有三个线程先后被启动,其中名为 Thread-1 的线程是用于进行 Fibonacci 数列计算的应用线 程。根据表 4 的处理器事件描述,用户可以算得该应用线程的 CPI 为 2.58,在程序运行过程中在 14% 的时间里流水线工作正常,而在另外 15% 的时间里流水线为空载。如果对其它更多的处理器事件进行监 测,用户就可以获得更全面的程序运行时的硬件执行特征进而开展更深入的分析,以发现程序性能问题的 根源所在。关于如何利用程序的硬件执行特征分析程序性能,请参阅参考资源中所列的相关网页链接。 总结 PAPI 是一组用于访问处理器硬件性能计数器的本地接口,用户可以利用它获得程序 运行过程中产生的各种处理器事件的发生次数,进而将这些数据作为评估和分析程序性能的可靠依据,有 助于更准确地发现程序性能问题的根源。本文在深入分析 PAPI 接口功能的基础上,结合 Java 程序的执 行特征,提出了一种基于 JVMTI 的方法,该方法能够有效地利用 PAPI 接口对 Java 线程的运行时硬件 特征进行监测。 随文源码 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |