工具准备
ubuntu:sudo apt-get install perf
嵌入式平台:下载源码编译
注意:编译过程中会有Auto-detectiing system feature的依赖库打印,注意其中off的,代表此库没有符号表;
测试程序增加-fno-omit-fram-pointer, 避免调用栈浅的问题;
调优
查找系统热点
- sudo perf top:得到热点函数
- 查找热点函数的调用栈
查找进程热点
- 确保进程中每个线程都有自己的名字:否则同个函数名字的统计会被叠加到一起;
- sudo perf record -p pid sleep n : 采集n秒的数据;
- sudo perf report:查看热点函数;
- 若需要知道热点函数的调用栈,在录制数据时加 -g 参数;
进程火焰图
- sudo perf record -g -p pid sleep n
- sudo chown xxx:xxx perf.data
- 用perf script解析perf.data: perf script -i perf.data > perf.unfold
- 用FlameGraph折叠符号:./FlameGraph/stackcollapse-perf.pl perf.unfold > perf.folded
- 生成向量图(svg图): ./FlameGraph/flamegraph.pl perf.folded > perf.svg
- 用Firefox或chome浏览器打开图片即可
查找代码性能缺陷
sudo perf stat
- branch miss
- 缺页
- cache抖动