首页 > 编程知识 正文

PMU性能分析系列1 相关概念,分析方法的相关概念

时间:2023-05-05 18:32:18 阅读:261271 作者:2739

类似文章:

http://blog.sina.com.cn/s/blog_6cfddec10100mck9.html

http://bbs.lmtw.com/dispbbs.asp?boardid=20&id=113723

http://topic.csdn.net/u/20080527/17/44d9ebf9-959d-4495-8456-62e4b2d40f05.html

http://www.cnblogs.com/konlil/archive/2011/05/17/2048976.html

http://software.intel.com/zh-cn/blogs/2009/03/18/intelr-coretm-i7-intelr-vtunetm-performance-analyzer/

http://software.intel.com/zh-cn/blogs/2010/07/01/intelr-coretm-2-duo/

http://www.sokerspace.com/modules/planet/view.article.php/30561


1. 什么是PMU

Performance Monitor Unit,性能监视单元,其实CPU提供的一个单元,属于硬件的范畴。通过访问相关的寄存器能读取到CPU的一些性能数据,目前大部分CPU都会提供相应的PMU,下面主要学习Intel系列CPU的PMU。


2. 主要参考资料:

要了解PMU,对于系统编程人员,参考《Intel® 64 and IA-32 Architectures Software Developer Manuals》里面有相关的介绍(Volumn3, chapter18 && chapter19)。

对于使用VTune等性能工具,只需要了解相关的PMU事件就参考其工具文档了。


3. PMU事件分类

architectural performance events: compatible among processor families,即在不同的处理器之间是兼容的。
non-architectural performance eventsmodel-specific,即型号相关的,不同型号的处理器有不同的一些事件。

很古老的一些处理器没有architectural事件。

当然,architectural类别的事件又提供了版本的概念,不同的处理器能支持的版本也会不一样,所以并不是说所有的支持architectural事件的处理器都支持同样数量的architectural事件。

说明:architectural事件是在Intel Core Solo and Intel Core Duo processors中开始引入的。


4. PMU事件计数的获取

对于系统编程人员,可能需要获取CPU的PMU事件计数,这就需要利用CPUID、CR(control register)、MSR(model specific registers)等寄存器来读取即可。一般的性能分析工具,其实就是通过分析CPU事件来提供性能数据的。


5. 关于fix counter和programmable counter

固定计数器和可编程计数器。在相关文档中经常看到这两个词,有些事件是通过固定计数器获取的,有些(大部分)是通过可编程计数器获取。参考18.4.1 Fixed-function Performance Counters了解固定功能计数器,其硬件上的区别不太清楚,也没有找到什么文档介绍。)一般来说:

上面提到过,事件分类为architectural events和non-architectural events,其中architectural事件数量相对较少,因为是各个处理器都会支持的事件,architectural事件可以通过general-purpose performance counters(普通功能性能计数器)或fixed-function performance counters(固定功能性能计数器)来收集;non-architectural事件数量相对较多,不同的处理器不一样,non-architectural事件一般是通过普通功能性能计数器收集。可见,fixed counter的数量整体比例更少了。

PS:fixed counter对应的事件基本上目前就三个:Unhalted core cycles, unhalted core reference cycles, instructions retired。即时钟周期数、参考时钟周期数和有效执行的指令计数。


6. Hyper-threading对性能事件计数的影响

在性能计数中,最好不要开启HT,这是由于某些事件是基于核的,有些事件是基于thread的,开启了HT就会使得技术结果更加复杂。这也是为什么某些处理器有CPU_CLK_UNHALTED.CORE事件,而有些处理器为CPU_CLK_UNHALTED.THREAD。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。