【发布时间】:2017-11-06 20:37:34
【问题描述】:
我有一个使用 perf 分析的应用程序,我发现使用 perf report 时的结果不一致,我无法辨别模式。
我启动应用程序并通过 pid 对其进行分析 60 秒:
perf record -p <pid> -o <file> sleep 60
当我使用perf report -i <file> 提取结果时,有时我会在最左侧的列中看到一个“+”,当我按下 ENTER 时,它允许我深入了解函数调用树,有时那个“+”是不在那里。它似乎取决于录制文件的某些属性,因为我有一组录制文件,其中一些允许向下钻取,而另一些则不允许。
任何关于如何在此处获得一致行为的建议将不胜感激。
【问题讨论】:
-
不一致怎么办?
-
用于向下钻取调用树的最左侧列中的“+”并不总是存在。我希望它是。
-
尝试运行超过 60 秒,例如五分钟。
-
我尝试了从 10s 到 400s 的不同样本长度,结果不一致。有时存在,有时不存在。
-
一个可行的假设是:(1) 这是一个 sampling 分析器,它将在统计上“命中”不同的函数,如果某些函数没有被“命中”,则会导致不同的调用树在特定运行 (2) 每次运行的采样都不会从完全相同的点开始。如果有更改采样频率的设置,请尝试(理想情况下选择与时间片频率相对素数的采样频率,以最大程度地减少“stamped herd”效应)。