简单但又复杂的问题:
使用什么计数器来获取性能工具来测量挂钟时间?
作为基线,我认为我需要测量的代码时的第一件事就是挂钟时间,以便初步了解代码花费大部分时间的地方。 我不在乎它是 IO 还是带宽限制或其他我只想知道它在哪里慢。
听起来很简单的要求,但是现代CPU为高效工作(如频率缩放等(所做的所有技巧以及perf中可用的大量不同(没有很好的文档(性能计数器,因此很难确定测量正确的东西。
目前我做:
perf record -g -e ref-cycles -F 999 -- <cmd>
我认为这是未缩放的 CPU 频率,因此与部分代码运行的挂钟时间成正比。但谁知道呢?
您可以使用task-clock
.
这是进程运行时的明确挂钟时间,并且作为奖励是可移植的,因为它不依赖于任何 PMU 事件。