PMU性能分析系列1 - 相关概念
类似文章:
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/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 events: model-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。