利用PAPI接口监测Java程序的硬件执行特征 - 编程入门网
利用PAPI接口监测Java程序的硬件执行特征(3)时间:2011-10-02 ibm 王峰如清单 1 所示,PAPI 接口库要在经过 初始化后才能被使用,不过这在使用 PAPI 高层接口时并不用被给予更多的关注,因为高层接口会自动地 隐式执行接口库的初始化过程。但是用户在使用 PAPI 底层接口时,就必须首先显式地调用一次 PAPI_library_init 函数或者在此之前通过调用高层接口来完成 PAPI 接口库的初始化。 在初始 化 PAPI 接口库之后,用户需要调用 PAPI_create_eventset 函数创建一个内容为空的事件组(注意:用 于指示事件组地址的变量必须首先被初始化为 PAPI_NULL),然后根据自己的需要向其中添加事件以被硬 件性能计数器监测和计数。PAPI 底层接口中用于向事件组中添加事件的函数是 PAPI_add_event 或者 PAPI_add_events,它们的区别在于前者每次只是添加单个事件,而后者则能够通过一个事件数组一次性 完成事件添加。PAPI 底层接口可以使用的事件既包括 PAPI 预制事件也包括处理器原生事件,不过在添 加原生事件时用户需要对相关处理器的设计具有全面深入的了解以保证计数器的使用正确,例如在某些处 理器中一些原生事件只能由特定的计数器监测。在添加事件的过程中,用户可以使用 PAPI_remove_event 或者 PAPI_remove_events 等函数删除之前已经被添加的事件。类似的,这两个事件删除函数的区别也在 于前者是删除单个事件而后者是删除一个事件数组。 完成了事件添加,用户就可以调用 PAPI_start 函数启动硬件性能计数器对事件组中的各个事件的计数。与此相对应的是 PAPI_stop 函数, 该函数在停止计数器计数的同时还会读取计数停止时刻的计数器数值。在硬件性能计数器对事件进行监测 和计数的过程中,用户可以随时调用 PAPI_read 函数读取计数器当前记录的事件发生次数。如清单 1 所 示,为了获得被监测程序的运行时硬件执行特征,用户需要在被监测程序执行前调用一次 PAPI_read 函 数,然后再在其执行完毕后调用一次 PAPI_read 函数(清单 1 中通过调用 PAPI_stop 函数完成被监测 程序执行完毕后的计数器读取操作)。最终,两次采得的计数器数值之间的差值就是被监测程序运行过程 中产生的相关的处理器事件数。 在利用 PAPI 接口完成对被监测程序的硬件执行特征的监测后, 用户需要进行一些收尾和整理工作,例如清单 1 先后调用了 PAPI_cleanup_eventset 和 PAPI_destroy_eventset 等函数,清除了事件组中的事件并释放了相关事件组占用的内存资源,最后再调 用 PAPI_shutdown 函数终止对 PAPI 的使用。 PAPI 的安装与使用 PAPI 接口功能的实现 依赖于底层的处理器和操作系统支持,因此它的安装过程在不同的系统中存在着较大差异:在有的系统中 可以直接按照最普通的步骤,在 PAPI 源文件目录下先后执行 configure 和 make 命令即可完成安装; 而在有的系统中就需要略微复杂的步骤。PAPI 项目开发者特别在 PAPI 源文件的根目录下提供了描述 PAPI 安装过程的说明文件 INSTALL.txt,其中针对不同的系统配置都给出了相应的安装提示。以在处理 器为 IBM POWER5+、操作系统为 Linux 的系统上安装 PAPI 为例,用户就必须首先为操作系统打上相关 的补丁(例如 perfctr 或者 perfmon2),以支持 PAPI 接口对处理器硬件性能计数器的访问。 在使用 PAPI 接口时,用户需要首先将 libpapi 共享库所在的路径加入到系统的环境变量 LD_LIBRARY_PATH 中,同时还需要将 PAPI 源文件所在的路径加入到系统的环境变量 PAPI_EVENTFILE_PATH 中。完成环境变量设置后,用户在使用 gcc 编译调用了 PAPI 接口函数的应用程 序时,需要加入编译选项 -lpapi,使得程序可以动态链接到相应的函数实现。 利用 PAPI 接口监 测 Java 程序 Java 程序的执行实体 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |