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

     2023-02-22     154

关键词:

【中文标题】如何使用 linux perf 工具进行代码理解【英文标题】:How to use linux perf tool for code comprehension 【发布时间】:2015-08-07 16:50:17 【问题描述】:

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

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

性能记录--call-graph dwarf make test

这会创建一个 230 兆的 perf.data。然后我写出调用图

性能报告 --call-graph --stdio > callgraph.txt

这将创建一个 50 兆的文件。

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

我喜欢火焰图项目。但是,这种可视化不利于代码理解。是否还有其他项目、文章、想法可能会有所帮助?

【问题讨论】:

尝试通过应用程序的“dso”过滤您的报告。并且任何外部参照工具对于理解新的代码库(cscope、lxr、osxr.org、code.metager.de/source、GUI IDE)都会更有用 perf report -g 对于大型应用程序不应转储到外部文件;它无需重定向即可使用交互式性能报告 TUI 界面工作。还可以尝试github.com/jrfonseca/gprof2dot 脚本将性能报告调用图输出可视化为图片(图);还有 Brendan D. Gregg 的交互式 svg/js FlameGraphs(他经常将许多兆字节的原始报告转储显示为很多 A4 页面)- 性能说明:brendangregg.com/FlameGraphs/cpuflamegraphs.html#perf 【参考方案1】:

perf report -g 对于大型应用程序不应因为过于冗长而转储到外部文件。收集的perf.data(与-g)将在没有文件重定向的情况下使用交互式性能报告TUI界面工作。您可以禁用调用图报告,以查找在 perf record 没有 -gperf 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

【讨论】:

speedscope.app 也是查看性能配置文件的一个不错的变体。

perf--linux下的系统性能调优工具

...仅作为PMU的抽象,而是能够处理所有的性能相关的事件。使用perf,您可以分析程序运行期间发生的硬件事件,比如instructionsretired,processorclockcycles等;您也可以分析软件事件,比如PageFault和进程切换。这使得Perf拥有了众多的性... 查看详情

perf性能分析工具(代码片段)

...ools-common输入perf,按提示安装缺少的组件 3. perf的使用3.1 perf--help 查看提示 查看详情

perf--linux下的系统性能调优工具,第1部分

...仅作为PMU的抽象,而是能够处理所有的性能相关的事件。使用perf,您可以分析程序运行期间发生的硬件事件,比如instructionsretired,processorclockcycles等;您也可以分析软件事件,比如PageFault和进程切换。这使得Perf拥有了众多的性... 查看详情

perf--linux下的系统性能调优工具

Perf简介Perf是用来进行软件性能分析的工具。通过它,应用程序可以利用PMU,tracepoint和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题(perthread),也可以用来分析内核的性能问题,当然也可以同时... 查看详情

如何用perf工具(代码片段)

...仅作为PMU的抽象,而是能够处理所有的性能相关的事件。使用perf,您可以分析程序运行期间发生的硬件事件,比如instructionsretired,processorclockcycles等;您也可以分析软件事件,比如PageFault和进程切换。这使得Perf拥有了众多的性... 查看详情

linux系统性能监控分析工具perf(代码片段)

...载文件1.连接服务器2.上传文件3.下载四、perf原理1.perf的使用2.perf简单介绍3.常用命令格式1.perflist2.perftop3.perfstat4.perfprobe5.perflock6.perfmem 查看详情

Linux perf 工具运行问题

...issues【发布时间】:2017-07-2523:20:42【问题描述】:我正在使用perf工具对我的一个项目进行基准测试。我面临的问题是我在我的机器上运行perf工具会自动运行,一切正常。但是,我正在尝试在自动化服务器中运行perf以使其成为我... 查看详情

我如何使用 perf 来分析我的代码?

】我如何使用perf来分析我的代码?【英文标题】:howcaniuseperftoprofilemycode?【发布时间】:2014-08-0500:56:01【问题描述】:我正在尝试使用“perf”来查看我在Linux上的C++程序中所有CPU的使用情况。我想附加到正在运行的进程并获取... 查看详情

linux系统性能监控分析工具perf(代码片段)

...载文件1.连接服务器2.上传文件3.下载四、perf原理1.perf的使用2.perf简单介绍3.常用命令格式1.perflist2.perftop3.perfstat4.perfprobe5.perflock6.perfmem7.perfsched8.perfannotate一、perf工具下载系统级性能优化通常包括两个阶段:性能剖析(perf... 查看详情

linux中cpu性能分析工具perf简单使用(亲测可用)(代码片段)

...秒99次,perf的数据采集有额外性能开销,所以不宜长时间使用。perf命令说明:sudoperfrecord-F99-p13204-g--sleep30#record表示记录cpu的执行数据#-F:采样频率(次/秒)#-p:进程号#-g:输出调用栈数据#--sleep:本次采样总时长(秒)数据处... 查看详情

perf命令

...内核,从而全面理解应用程序中的性能瓶颈。 perflist使用perflist命令可以列出所有能够触发perf采样点的事件。 perfstat<prog 查看详情

从源代码/从头开始编译 linux perf 工具及其依赖的内核模块

...cratch【发布时间】:2020-04-2414:59:05【问题描述】:我正在使用linuxperf工具来分析共享库。虽然它在Ubuntu上运行良好,但现在我想在嵌入式linux上运行它,我不能使用apt-get在嵌入式linux上安 查看详情

使用linuxkernel代码编译perf工具(代码片段)

环境:Qemu+ARMv8perf是一款综合性分析工具,大到系统全局性性能,再小到进程线程级别,甚至到函数及汇编级别。 在内核源码目录下执行编译脚本:#!/bin/bashcross_compile=aarch64-linux-gnu-makeCROSS_COMPILE=$cross_compileARCH=arm64defconfigmakeCR... 查看详情

如何在 Linux 中通过 perf 工具捕获 L3 缓存命中和未命中

】如何在Linux中通过perf工具捕获L3缓存命中和未命中【英文标题】:HowtocatchtheL3-cachehitsandmissesbyperftoolinLinux【发布时间】:2013-08-1113:20:58【问题描述】:有什么方法可以通过Linux中的perf工具捕获L3缓存命中和未命中。根据perflistcac... 查看详情

如何使用kernel/perf_event*。[hc]分析框架?(代码片段)

...ent_v7.cperf_event_xscale.c我无法理解这些文件的层次结构以及如何使用它们?我可以假设它们总是存在并在内核模块中使用它们吗?我的内核模块在Cortex-A7或Cortex-A15内核上运行。在/arch/arm/kernel/目录下似乎有很多非常有用的东西,但... 查看详情

Perf 工具 Linux - 无调用图

...【发布时间】:2016-07-0412:37:37【问题描述】:我正在尝试使用perfversion3.0.8来分析我的嵌入式系统Linuxkernelversion3.0.8。我使用zlib和elfutils交叉编译工具/性能。为了熟悉这个工具,我使用了一个使用-g选项编译的简单快速排序示例。... 查看详情

使用 linux perf 工具测量应用程序的 FLOP

】使用linuxperf工具测量应用程序的FLOP【英文标题】:MeasuringFLOPsofanapplicationwiththelinuxperftool【发布时间】:2010-12-0212:34:08【问题描述】:我想测量一些应用程序使用“perf”执行的浮点数和算术运算的数量,这是linux性能计数器子... 查看详情

perf工具_嵌入式设备_性能分析(代码片段)

...,CPUidle非常低,领导交给你解决,我们应该如何分析CPU的占用是否合理,并且从什么方面开始优化呢?Linux下有一个非常好用的工具,叫做perf。        perf工具介绍的文档有很多,但是都只局限于... 查看详情