我正在使用 perf 来了解我的程序的每个函数对总执行时间施加的开销。为此,我使用 cpu-cycles 事件:
perf record -e cpu-cycles -c 10000 <binary-with-arguments>
当我查看输出时,我会看到与每个函数相关的一些百分比。但对我来说没有意义的是这样的情况:函数 A 在函数 B 内被调用,在其他地方没有。但是我得到的函数 A 的开销百分比高于 B。如果 B 调用 A,那意味着 B 应该包括 A 的开销。还是我在这里遗漏了什么?
最佳答案
您正在使用的 perf 命令只是对您的程序进行采样,而没有记录调用堆栈的任何信息。使用 perf report
您可以独立于调用关系获得落入函数中的样本数量。
您可以使用 --call-graph
使用时获取树的选项 perf report
:
perf record -e cpu-cycles --call-graph dwarf -c 10000 <binary-with-arguments>
关于performance - 性能如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460986/