简单但复杂的问题:
使用什么计数器来获得性能工具来测量挂钟时间?
作为基线,我认为需要分析代码时,第一件事就是挂钟时间,以使人们初步了解代码在大部分时间中所占的比例。我不在乎它的IO或带宽是否有限,或者我只是想知道它在哪里慢。
听起来很简单,但是现代CPU可以有效地工作(如频率缩放等),并且在perf中有很多不同的(没有充分记录的)性能计数器,要确保进行测量并不容易正确的事情。
当前我正在:
perf record -g -e ref-cycles -F 999 -- <cmd>
我认为这是未缩放的CPU频率,因此与部分代码正在运行的挂钟时间成比例。但是谁知道呢?
您可以使用task-clock
。
这明确是进程运行时的挂钟时间,而且可以移植,因为它不依赖于任何PMU事件。