simpleperf 使用记录

13 篇文章 1 订阅
12 篇文章 0 订阅

simpleperf 使用记录

近期处理CPU loading过高问题,使用simpleperf生成火焰图的方式进行分析,相较于以前查看record的方式直观了不少,方法记录如下:

1. simpleperf 命令查看

通用开源工具一般都可以通过 -h的方式查看其命令支持情况:

console:/ # simpleperf -h
Usage: simpleperf [common options] subcommand [args_for_subcommand]
common options:
-h/–help Print this help information.
–log Set the minimum severity of logging. Possible severities
include verbose, debug, warning, info, error, fatal.
Default is info.
–version Print version of simpleperf.
subcommands:
debug-unwind Debug/test offline unwinding.
dump dump perf record file
help print help information for simpleperf
kmem collect kernel memory allocation information
list list available event types
record record sampling info in perf.data
report report sampling information in perf.data
report-sample report raw sample information in perf.data
stat gather performance counter information

对于平时分析问题,经常使用的几个命令是:

  1. simpleperf stat:获取一段时间内CPU 的执行状态统计 image-20210701192836962
    上图即统计10s内系统的状态统计,可以看到这段时间内CPU跑了多少个cycle,多少条指令,分支指令以及分支fail的概率等等

  2. simpleperf list:罗列出来系统支持event(与系统强相关,在kernel中打开了哪些配置)

image-20210701193121537

这里可以查看系统支持event的情况,根据系统的不同而不同,根据场景我们可以具体统计某些具体的event情况,比如cache:

image-20210701193229354

在record指令后跟-e参数即可;

  1. simpleperf record:录制命令,可以将上述配置的event保存下来,默认生成在/data/perf.data

    image-20210701193312617

    常用参数:

    image-20210701193333104

    image-20210701193400830

    image-20210701193432097

    simpleperf record -g -p 1234 --duration 10 -o /data/perf.data

  2. simpleperf report:将上述record的数据生成report报告,以供查看,缺点是不够直观

    simpleperf report -g -i /data/perf.data > /data/perf_report.txt

    image-20210701193646543

    缺点就是不是很直观,但是该有的信息都在里边;

2. 生成火山图

上述所说,获取到的信息不是很直观,这里使用simpleperf源码中支持的script将其构造为易于观看的方式:火山图

  1. 录制数据:

    simpleperf record -g -p 2729 --duration 10 -o /sdcard/perf.data

  2. report_sample.py 脚本解析,解析为report格式数据

    此脚本在源码中(simpleperf目录下),如果常用可以将其中scripts工具拷贝出来使用:

    python report_sample.py > 1.perf

    此操作默认解析perf.data 文件,可以添加lib库信息:

    image-20210701193841368

    此步骤解析后可以看到抓取的地址信息和函数名信息:

    image-20210701194243108

  3. stackcollapse-perf.pl 脚本处理,将stack信息按照需要格式排列

    ./stackcollapse-perf.pl 1.perf > 1.fold

    image-20210701194157592

    这个格式看不出来什么,这边理解是flamegraph脚本所需要的格式

  4. flamegraph.pl脚本处理,将栈帧构造为图形

    ./flamegraph.pl 1.fold > 1.svg

  5. 使用chrome查看

    以典型的分析CPU时间花费到哪个函数的on-cpu火焰图为例来展开。CPU火焰图中的每一个方框是一个函数,方框的长度,代表了它的执行时间,所以越宽的函数,执行越久。火焰图的楼层每高一层,就是更深一级的函数被调用,最顶层的函数,是叶子函数。

    image-20210701194339761

    具体查看某个进程的情况:

    image-20210701194414899

3. 相关工具获取方法

  1. simpleperf 执行文件以及相应script

    image-20210701194558039

    1. 解析为图形工具的脚本从github获取:

      https://github.com/brendangregg/FlameGraph

      image-20210701194707570

以上,近期使用这个火焰图分析系统性能问题,感觉效率提升了不少 0^0

4. 解析方式更新

update 于 2021.09.07

有发现源码中有提供另一个解析工具,可以直接将perf.data解析为网页形式,其中包含饼状图、火焰图、表格统计,表达更加直观

4.1 表现形式

  1. 主界面

    image-20210907230007342

  2. 饼图可以点击详细显示

    image-20210907230215493

  3. 可以查看调用堆栈和占比(火焰图)

    image-20210907230404805

  4. 以表格形式查看func占用比例

    image-20210907230503434

这样来看的话,这个脚本信息要详细很多,也要直观的多;

4.2 使用方法

图示已经很吸引人了,接下来来看如何使用,其实非常简单,上述2中有提到从源码中获取到相应工具,在script中有个Python脚本,值得一用:

python report_html.py -i perf.data -o 2.html

image-20210907231033877

操作如此简单只需要一步就可以生成上述的直观的文件了。。。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值