perf record -e cpu-clock -g -p $(pgrep test_lvgl)
程序运行完之后,perf record会生成一个名为perf.data的文件,如果之前已有,那么之前的perf.data文件会被覆盖。 可以执行perf report -i perf.data,(-i 指定要查看的文件),来查看报告,但非常不直观,所以需要火焰图。
perf script -i perf.data &> perf.unfold
将perf.unfold 拷贝到本地机器,再本地生成火焰图。
要先将以下仓库clone到本地: https://github.com/brendangregg/FlameGraph
./stackcollapse-perf.pl perf.unfold &> perf.folded
./flamegraph.pl perf.folded > perf.svg
执行 stackcollapse-perf.pl 将 perf.unfold 中的符号进行折叠。 执行 flamegraph.pl 生成 火焰图。
示例:
perf.svg
火焰图🔥查看说明:
火焰图就是看函数占据的宽度,宽度越大可能存在性能问题。 颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。 鼠标放到一个函数上后,会展示完整的函数名,被抽样中的次数,占总抽样次数的百分比。
以test_lvgl这个例子,我们发现两个函数占比较大:
read_image_data
render_frame_rect
perf record -e cpu-clock --call-graph dwarf-p pid
dwarf 是一种调试信息格式,它可以提供非常详细的函数调用信息。
增加—call-graph dwarf 参数后record生成的perf.data会变大,这里要注意设备空间。
参考: