Oracle® Solaris Studio 12.4:性能分析器

退出打印视图

更新时间: 2015 年 1 月
 
 

硬件计数器溢出分析

硬件计数器溢出分析数据包括计数器 ID 和溢出值。 该值可能大于计数器的溢出设置值,因为处理器在事件的溢出和记录之间会执行某些指令。尤其对循环和指令计数器来说,该值可能会更大,这些计数器的递增频率比诸如浮点运算或高速缓存未命中次数的计数器更快。记录事件中的延迟还意味着,通过调用堆栈记录的程序计数器地址并不精确对应于溢出事件。有关更多信息,请参见硬件计数器溢出的归属。另请参见陷阱的讨论。陷阱和陷阱处理程序可以导致报告的用户 CPU 时间和循环计数器报告的时间有很大差别。

在动态更改其操作时钟频率的计算机上所记录的实验在基于周期的时间计数转换时可能显示不准确之处。

收集的数据量取决于溢出值。选择过小的值可能会产生以下结果:

  • 收集数据所用的时间可能是程序执行时间的很大一部分。收集运行可能要用大部分时间来处理溢出和写入数据而不是运行程序。

  • 计数的很大一部分可能来自收集过程。这些计数归属到收集器函数 collector_record_counters。如果看到此函数的计数很大,则表明溢出值过小。

  • 数据的收集可以更改程序的行为。例如,如果要收集有关高速缓存未命中次数的数据,则大多数未命中可能是由刷新收集器指令以及分析高速缓存中的数据并将其替换为程序指令和数据所导致的。程序的高速缓存未命中次数看上去似乎很大,但是如果没有数据收集,则实际上高速缓存未命中次数可能非常小。