linux perf报告不一致的行为

时间:2017-11-06 20:37:34

标签: linux perf

我有一个使用perf进行分析的应用程序,我发现使用perf report时的结果不一致,我无法辨别该模式。

我启动应用程序并通过pid对其进行分析60秒:

perf record -p <pid> -o <file> sleep 60

当我用perf report -i <file>拉出结果时,有时候我会在最左边的列中看到一个“+”,当我按下ENTER时,我可以深入到函数调用树中,有时候“+” “ 不在这里。它似乎依赖于录制文件的某些属性,因为我有一组录制的文件,其中一些允许向下钻取而另一些则不允许。

有关如何在此处获得一致行为的任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

由perf记录测量的默认事件是cpu-cycles。 (或者取决于机器,有时是cpu-cycles:p或cpu-cycles:pp)

你确定你的应用程序没有大量睡眠吗?是否会消耗大量的cpu周期?

通过执行大量计算,尝试对强调CPU的内容进行性能测量:

$ apt-get install stress
$ perf record -e cpu-cycles --call-graph fp stress --cpu 1 --timeout 5
$ perf report

随后的运行应显示出或多或少相似的结果。

如果您的程序是CPU密集型的,并且调用堆栈在运行之间确实存在很大差异,那么您可能需要查看--call-graph选项,因为perf可以使用不同的方法记录调用图:

  • fp(函数指针)
  • lbr(最后一个分支记录)
  • 侏儒

也许不同的方法可以提供更好的结果。