perf如何工作?

时间:2015-07-16 17:38:13

标签: performance perf

我正在使用perf来了解我的程序的每个函数对总执行时间的开销。为此,我使用cpu-cycles事件:

perf record -e cpu-cycles -c 10000 <binary-with-arguments>

当我查看输出时,我看到与每个功能相关的一些百分比。但对我来说没有意义的是这样的情况:函数A在函数B中被调用而在其他地方没有。但是我获得的函数A的开销百分比高于B.如果B调用A,则意味着B应该包含A的开销。或者我在这里遗漏了什么?

2 个答案:

答案 0 :(得分:5)

您使用的perf命令仅对您的程序进行采样,而不记录调用堆栈的任何信息。使用perf report,您可以获得与您的调用关系无关的样本数量。

使用--call-graph时,您可以使用perf report选项获取树:

perf record -e cpu-cycles --call-graph dwarf -c 10000 <binary-with-arguments>

答案 1 :(得分:1)

Perf适用于CPU的模型特定寄存器,用于测量周期或分支未命中等。 一个名为PMU(绩效测量单位)的特殊部分正在计算各种事件。

因此,如果仅测量程序的一些功能,实际上没有开销,因为CPU的PMU独立于实际计算而工作。

如果超过PMU的Registercount,测量将循环显示要测量的功能。 Perf用[XX%]注释这个。