我使用perf来了解我的程序的每个函数对总执行时间造成的开销。为此,我使用cpu循环事件:
perf record -e cpu-cycles -c 10000 <binary-with-arguments>当我查看输出时,我看到了与每个函数相关的一些百分比。但是对我来说没有意义的是这样的情况:函数A在函数B中被调用,而在其他地方被调用。但是函数A的开销百分比高于B,如果B调用A,这意味着B应该包括A的开销。还是我在这里漏掉了什么?
发布于 2015-07-17 07:38:44
您使用的perf命令仅示例您的程序,而不记录调用堆栈的任何信息。使用perf report,您可以获得与调用关系无关的落入函数中的样本数量。
在使用--call-graph时,可以使用perf report选项获取树
perf record -e cpu-cycles --call-graph dwarf -c 10000 <binary-with-arguments>发布于 2015-07-29 22:33:47
Perf在CPU的模型特定寄存器上工作,用于诸如周期或分支错误之类的度量。有一个特殊的部分叫做PMU(),就是对各种事件进行计数。
因此,如果您只测量程序的几个特性,实际上就没有开销,因为CPU的PMU独立于实际的计算。
如果您超过了PMU的寄存器数,则通过要测量的特性的度量周期。Perf用XX %对此进行注释。
https://stackoverflow.com/questions/31460986
复制相似问题