profiling
现代 cpu 都有内嵌性能监控单元 PMU
可以分析 cache miss,tlb miss,branch miss 等
- retired instruction:有效执行的指令
- executed instruction:实际执行的指令,包括分支预测失败、中断等被清除的指令
- cycles:周期数
- reference cycles:
- slots:指令需要的资源
- uops:基本的指令
1. 性能采样
perf stat 统计一定时间内事件个数
用法:perf stat ./main,可以统计
- task-clock:cpu 利用率
- context-switches:进程切换次数
- cpu-migrations:cpu 迁移次数
- page-fault:缺页中断数
- cycles:周期数
- instructions:指令数
- branches:分支数
- branch-misses:分支预测失败
- cache-references:缓存命中
- cache-misses:缓存不命中
可通过 perf list 查看所有事件
2. TopDown
3. Roofline
FLOPs:一次加法或乘法
算力峰值π(FLOPs/s):计算性能上限
带宽β(B/s):每秒的最大内存交换量
计算强度I:单位内存交换进行了多少次计算
计算强度上限Imax:π/β
4. 火焰图
下载 FlameGraph
sh
git clone https://github.com/brendangregg/FlameGraph生成数据
perf record -F 99 -p $pid -g -- sleep 5指定进程 id,检测 5 秒-C 0指定 CPU
生成文本调用栈(可读性较差)
sh
perf report -n --stdio > output.txt生成火焰图,可用游览器打开
sh
perf script -i perf.data &> perf.unfold
./FlameGraph/stackcollapse-perf.pl perf.unfold > perf.folded
./FlameGraph/flamegraph.pl perf.folded > out.svg