- 交叉编译:
基于builroot的文件系统,交叉编译perf,需要kernel的支持,在buildroot的menuconfig中,添加kernel的本地仓库路径和defconfig配置文件;然后就可以基于该krnel版本编译出对应的perf分析工具;
- 性能分析:
- 运行一个daemon,如fio对磁盘的压力测试:
fio -filename=/dev/sda1 -direct=1 -iodepth 16 -thread -rw=randrw -ioengine=psync -bs=16k -size=100G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
perf record -e cpu-clock -g -p 2859 2859为上面进程PID。
2、ctrl+c结束执行后,在当前目录下回生成采样数据perf.data;
- 结果分析:
1、本地分析:
perf report -i perf.data
会看的比较乱。
2、火焰图分析:
使用开源工具FlameGraph来分析:
perf script -i perf.data > perf.unfold
将perf.unfold上传至FlameGraph的workspace目录,
./stackcollapse-perf.pl perf.unfold > perf.folded
./flamegraph.pl perf.folded > perf.svg
最终会生成浏览器能够打开的perf.svg,打开后如下所示:
其中横轴代表CPU百分百,纵轴代表栈深度。