我有一个使用perf
进行分析的应用程序,我发现使用perf report
时的结果不一致,我无法辨别该模式。
我启动应用程序并通过pid对其进行分析60秒:
perf record -p <pid> -o <file> sleep 60
当我用perf report -i <file>
拉出结果时,有时候我会在最左边的列中看到一个“+”,当我按下ENTER时,我可以深入到函数调用树中,有时候“+” “ 不在这里。它似乎依赖于录制文件的某些属性,因为我有一组录制的文件,其中一些允许向下钻取而另一些则不允许。
有关如何在此处获得一致行为的任何建议将不胜感激。
答案 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可以使用不同的方法记录调用图:
也许不同的方法可以提供更好的结果。