1、编译perf工具,perf工具存放在内核的tools/perf目录下
1.1、选择交叉编译工具链和架构
make CROSS_COMPILE=arm-linux- ARCH=arm tools/perf clean
make CROSS_COMPILE=arm-linux- ARCH=arm tools/perf
1.2、pef文件比较大,尝试strip一下
arm-linux-strip perf --strip-unneeded --strip-debug
1.3、file perf 命令确定下生成的perf工具是基于ARM架构的
2.内核需要打开的配置项
2.1、打开符号表
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
2.2、打开pef功能
CONFIG_PERF_EVENTS=y
CONFIG_HW_PERF_EVENTS=y
3、perf使用
3.1、perf top 或者perf top -p 1234可以比较清晰看出具体函数CPU使用率
perf top
perf top -p 1234
3.2、获取某段时间CPU的使用情况
perf record -a #先抓取数据记录一段时间
perf report #输出结果
3.3、当只出现地址,没有显示函数名时,通过addr2line获取函数名
arm-linux-addr2line -C -f -e perf 0009a9e8
3.4、获取火焰兔
3.4.1 获取recode数据
perf record -g -F 100 -a -p 1234
-g表示记录调用栈,-F 100表示每秒100次,-a表示所有CPU,-p 1234是进程号(对哪个进程进行分析,可以不加)
3.4.2 解析recode的数据
perf script -i perf.data &> perf.unfold
3.4.3 将perf.unfold中的符号进行折叠
./stackcollapse-perf.pl perf.unfold &> perf.folded
3.4.4 最后生成svg图
./flamegraph.pl perf.folded > perf.svg
第三,四步的pl文件下载路径见下,这PC上运行。生成perf.svg用浏览器打开就可以看到了。
https://github.com/brendangregg/FlameGraph
4、perf的详细使用
perf详细使用