【发布时间】:2010-09-02 20:10:40
【问题描述】:
我希望perf 输出原始样本计数而不是百分比。这对于确定我是否加快了我正在尝试优化的功能很有用。
明确地说,我想做类似的事情
perf record ./a.out
perf report
看看 perf 对 a.out 中的每个函数采样了多少次。
Shark 可以在 Mac 上执行此操作,(我相信)Xperf 也可以。这在具有 perf 的 Linux 上可行吗?
【问题讨论】:
我希望perf 输出原始样本计数而不是百分比。这对于确定我是否加快了我正在尝试优化的功能很有用。
明确地说,我想做类似的事情
perf record ./a.out
perf report
看看 perf 对 a.out 中的每个函数采样了多少次。
Shark 可以在 Mac 上执行此操作,(我相信)Xperf 也可以。这在具有 perf 的 Linux 上可行吗?
【问题讨论】:
性能报告(2.6.35.7 版)现在支持 -n 标志,它可以满足我的需求。
【讨论】:
您想看看您对函数的更改是否有所作为。 我想你也想得到任何帮助来找出你需要改变的功能。 这两个目标不一样。
许多工具可以为您提供尽可能广泛的统计数据或计数器,就好像拥有更多统计数据将有助于实现任一目标一样。
你能找到RotateRight/Zoom,或者任何可以让你在挂钟时间堆叠样本的工具,最好是在用户控制下吗?这样的工具将为您提供在任何例程或代码行上花费的时间和百分比,尤其是包含时间。
包容性时间如此重要的原因在于,每行执行的代码都需要花费一定的时间,如果该行不存在,则不会花费这部分时间,而总时间将减少该分数。在那段时间里,无论是花费在一个大块还是数千个小块中,该代码行都在调用堆栈上,堆栈样本将在其中以等于其分数的速率发现它。这就是为什么堆栈采样在寻找值得优化的代码方面如此有效的原因,无论它是由叶指令还是调用树中的调用组成。
就个人而言,this link 给出了我使用该方法的方式和原因,这并不花哨,但与我见过的任何方法或工具一样或更有效。 Here's a discussion.
【讨论】: