跳到主要内容

5.5.4 性能火焰图

功能介绍

火焰图是用图形化的方式来展现 perf 等工具采集的性能数据,对数据进行统计和分析,方便找出性能热点。

火焰图原理示意:用图形化方式展示性能采样热点

火焰图中的每一个方框是一个函数,方框的长度,代表了它的执行时间,所以越宽的函数,执行越久。

火焰图的楼层每高一层,就是更深一级的函数被调用,最顶层的函数,是叶子函数。

代码仓库: (https://github.com/brendangregg/FlameGraph.git)

支持平台

平台运行方式
RDK X3, RDK X3 Module, RDK X5, RDK X5 ModuleUbuntu 20.04 (Foxy), Ubuntu 22.04 (Humble)

准备工作

RDK 平台

  1. flamegraph 工具分为两个部分,第一部分是可执行程序 perf。perf 是一款进行软件性能分析的工具,用于统计并输出系统或某一进程内的函数调用情况。perf 工具 RDK 的操作系统已经自带了,所以直接使用即可。

  2. flamegraph 工具的第二部分是解析 perf 文本的脚本,脚本用于解析 perf 统计的文本数据,生成 SVG 格式的函数调用火焰图,方便观察和分析。

使用介绍

  1. 使用 perf record 工具采样 RDK 系统内的函数调用情况,生成 perf.data 文件

    root@ubuntu:~# perf record -F 99 -a -g -- sleep 60
  2. 使用 perf script 解析 perf.data 文件生成 out.perf

    root@ubuntu:~# perf script > out.perf
  3. 在 PC 或者 RDK 上 git clone https://github.com/brendangregg/FlameGraph.git ,进入 flamegraph 目录,把第 2 步生成的 out.perf 拷贝到 flamegraph 目录内。使用 flamegraph 工具包内的 stackcollapse-perf.pl 对 out.perf 反折叠生成 out.folded

    ./stackcollapse-perf.pl out.perf > out.folded
  4. 使用 flamegraph.pl 生成 svg 火焰图

    ./flamegraph.pl out.folded > flame.svg

其中 1,2 步骤在 RDK 上完成,3,4 步骤在 PC 或者 RDK 上完成。

结果分析

经过前一节的使用流程,记录下来 RDK 的系统内的函数调用如下图所示

在 RDK 上采集并生成的系统函数调用火焰图结果