关于Intel(R) VTune(TM) Performance Analyzer的性能计数器
有过VTune(TM) Performance Analyzer使用经验的人知道,这个工具与其他性能检测软件不同的是-不仅可以检测程序所耗用的时间,而且可以检测程序执行中处理器的内部事件(Performance Monitor Unit:PMU)发生次数(及样本),称之为Event based sampling。
本篇以连续的方式通过对常用的处理器的事件(Intel(R) Core 2 为例)的介绍,帮助大家了解这些事件与程序性能的关联.
Sample After Value (SAV) 的用途 - 不是每一次事件发生都是需要记录的, 当事件达到一定的累积,去获得一个样本. SAV就是一个事件的设定值.如,CPU得主频是2G Hz, 每秒得到1000个样本,SAV=2,000,000,000/1000 = 2,000,000
使用第一层次的性能计数器:
1)INST_RETIRED.ANY - 表示指令的有效执行的计数
2)CPU_CLK_UNHALTED.CORE - 表示非停机状态花费的机器周期
一般来说,CPI = CPU_CLK_UNHALTED.CORE / INST_RETIRE.ANY, 表示一段代码(函数,模块)平均每条指令花费的机器周期.自然是愈小愈好.
这样你就可以找到那些CPU_CLK_UNHALTED.CORE大的函数,且CPI也大的函数,去关注(通常称之为热点函数).
第二个层次,你需要用其他的事件计数器去了解-CPU.UNHALTED.CORE的值是怎么来的?下面给出一个公式,下次具体展开。
CPU_CLK_UNHALTED.CORE = Resource_Stalls + RS_UOPS_DISPATCHED + UOPS_RETIRED
(待续)