两次采样对比
用同一负载在改动前后各采集一次,然后比对两份数据的差异:某个符号的占比明显下降,说明优化确实减少了那里的开销;上升则可能是回退。它把「感觉快了」变成可核对的证据,也能发现版本之间热点位置的漂移。
基本信息
| 适用平台 | Linux(内核自带性能工具) |
|---|---|
| 前提条件 | 两次采集的负载规模、模式与采样参数一致 |
| 输出形式 | 按符号的差异百分比 |
| 判读依据 | 差异是否集中在少数符号上 |
| 样本量 | 差异接近时需扩大采集样本再比较 |
典型使用场景
- 优化上线后验证收益是否体现在采样数据上。
- 发布后性能回退定位:找出新增或上升的热点。
- 编译器选项或系统参数调整的效果核对。
- 两个版本之间的热点漂移分析,判断架构改动影响。
- 压测阶段对照两组配置的差异。
用法
用法
perf record -o a.data -F 99 -a -- sleep 20 # 改动前
perf record -o b.data -F 99 -a -- sleep 20 # 改动后,参数保持一致
perf diff a.data b.data | head -30 # 对比两份采样
perf diff --sort comm,dso a.data b.data | head -20 # 按进程与库维度对比
perf report -i a.data --stdio --sort symbol | head -20 # 分别复核两份数据的原始排名
perf report -i b.data --stdio --sort symbol | head -20差异解读
| 差异形态 | 可能含义 | 下一步 |
|---|---|---|
| 少数符号占比明显下降 | 优化命中目标 | 结合业务指标确认整体收益 |
| 个别符号占比上升 | 开销转移或回退 | 检查该符号的调用路径变化 |
| 分布基本不变 | 改动未影响热点 | 重新确认瓶颈定位是否准确 |
| 大量符号小幅波动 | 样本量不足或负载不可比 | 延长窗口、固定采集条件 |
对比的前提是负载可比:并发数、数据规模、预热状态与采样频率都要保持一致,否则差异里混着环境噪声,解读出的结论经不起复核。
差异百分比接近时不要急着下结论:样本量不够时小幅差异随时会反转,先扩大采集窗口或重复多轮再判断。