peRF简介
Perf是是内置于Linux内核源码树中的性能剖析(profiling)工具。
- 不仅可以用于应用程序的性能统计分析,还可以用于内核的性能统计和分析。
- 它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。
- 常用于性能瓶颈的查找与热点代码的定位。
tina上开启perf功能
删除out目录,开启如下Tina与内核的相关选项,重新编译。客户的程序不能strip。
如果客户应用程序没有嵌入到Tina一起编译,建议客户检查相关编译选项,主要是浮点、neon、优化等选项,如”-Os -march=ARMv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard“等。
使用perf工具分析CPU使用率- 设备端先采集:
① perf record -e cpu-clock -g -p --> 采集指定PID进程的cpu使用情况,采集的数据存放到当前目录下的perf.data文件中
perf record -e cpu-clock -g -a --> 采集指定整个系统的cpu使用情况,采集的数据存放到当前目录下的perf.data文件中
② perf script -i perf.data > /tmp/perf.data.txt --> 解析perf.data转换为文本文档
③ perf report --> 设备端解析当前路径下perf.data文件生成报告 - PC端借助flamegraph生成火焰图(也可以直接在设备端执行perf report来分析):
① adb pull /tmp/perf.data.txt .
② ./stackcollapse-perf.pl perf.data.txt > perf.data.fold --> 将文本文档中的符号进行折叠
③ ./flamegraph.pl perf.data.fold > perf.svg --> 生成svg图
PC端(ubuntu)工具如附件FlameGraph.tar.xz所示。
火焰图说明生成的火焰图类似下图。其中x轴表示抽样数,如有一个函数在x轴上的长度越长,表明抽样的次数越多,则执行时间越长,占用cpu越多。y轴表示调用栈,每个函数占据一层,层数(火焰)越高,表明调用栈越深。
|