首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perf是如何工作的?

perf是如何工作的?
EN

Stack Overflow用户
提问于 2015-07-16 17:38:13
回答 2查看 2.4K关注 0票数 5

我使用perf来了解我的程序的每个函数对总执行时间造成的开销。为此,我使用cpu循环事件:

代码语言:javascript
复制
perf record -e cpu-cycles -c 10000 <binary-with-arguments>

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-17 07:38:44

您使用的perf命令仅示例您的程序,而不记录调用堆栈的任何信息。使用perf report,您可以获得与调用关系无关的落入函数中的样本数量。

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

代码语言:javascript
复制
perf record -e cpu-cycles --call-graph dwarf -c 10000 <binary-with-arguments>
票数 5
EN

Stack Overflow用户

发布于 2015-07-29 22:33:47

Perf在CPU的模型特定寄存器上工作,用于诸如周期或分支错误之类的度量。有一个特殊的部分叫做PMU(),就是对各种事件进行计数。

因此,如果您只测量程序的几个特性,实际上就没有开销,因为CPU的PMU独立于实际的计算。

如果您超过了PMU的寄存器数,则通过要测量的特性的度量周期。Perf用XX %对此进行注释。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31460986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档