如何使用linux perf工具进行代码理解

时间:2015-08-07 16:50:17

标签: linux perf flamegraph

我对'perf'记录调用图的能力非常着迷,并试图了解如何使用它来理解新的代码库。

我在调试模式下编译了代码,并使用以下命令运行单元测试:

  

perf record --call-graph dwarf make test

这将创建一个230 meg perf.data。然后我写出调用图

  

perf报告--call-graph --stdio> callgraph.txt

这会创建一个50兆字节的文件。

理想情况下,我只希望看到属于项目的代码,而不是内核代码,系统调用,c ++标准库,甚至是boost和其他任何第三方软件。目前我看到像__GI___dl_iterate_phdr,_Unwind_Find_FDE等项目。

我喜欢火焰图项目。但是,这种可视化对于代码理解并不好。是否还有其他可能有用的项目,写作,想法?

1 个答案:

答案 0 :(得分:0)

对于大型应用程序,

perf report -g不应该被转储到外部文件中,因为它太冗长了。收集的perf.data(带-g)将在没有文件重定向的情况下使用交互式perf报告TUI界面。您可以停用调用图报告,以便在没有perf record-g perf report --no-children的情况下查找功能花费大部分时间。

gprof2dot脚本(https://github.com/jrfonseca/gprof2dot)将lagre perf报告调用图可视化为紧凑图片(图形)。

在svg / js中还有Brendan D. Gregg的互动FlameGraphs;他经常在演示中注意到perf report -g输出显示了许多A4页面的许多兆字节原始转储报告。 perf的使用说明:http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html#perf

# git clone https://github.com/brendangregg/FlameGraph  # or download it from github
# cd FlameGraph
# perf record -F 99 -g -- ../command
# perf script | ./stackcollapse-perf.pl > out.perf-folded
# ./flamegraph.pl out.perf-folded > perf-kernel.svg

PS:为什么要分析制作过程?尝试选择一些测试并仅配置它们。使用较低的配置文件频率来获取较小的perf.data文件。同时禁用内核模式样本,其:u后缀为默认事件"周期":perf record -F 99 -g -e cycles:u -- ../command