[英]How to use linux perf tool for code comprehension
我对“性能”记录调用图的能力着迷,并试图了解如何使用它来理解新的代码库。
我在调试模式下编译了代码,并使用以下命令运行了单元测试:
性能记录-调用图矮人测试
这将创建一个230兆的perf.data。 然后我写出调用图
性能报告--call-graph --stdio> callgraph.txt
这将创建一个50兆的文件。
理想情况下,我只希望看到属于该项目的代码,而不是内核代码,系统调用,c ++标准库,甚至是boost和任何其他第三方软件。 目前,我看到诸如__GI ___ dl_iterate_phdr,_Unwind_Find_FDE等项目。
我喜欢flamegraph项目。 但是,这种可视化效果不利于代码理解。 还有其他项目,文章,想法可能会有所帮助吗?
对于大型应用程序, perf report -g
不应过于冗长地转储到外部文件中。 收集的perf.data
(带有-g
)可以在没有交互式Perf报告TUI界面的文件重定向的情况下工作。 您可以禁用调用图报告,以查找在没有-g
或perf report --no-children
情况下,花费最多时间进行perf record
函数。
有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文件。 还可以使用默认事件“ cycles”的后缀:u
禁用内核模式样本: perf record -F 99 -g -e cycles:u -- ../command
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.