首页/系统/Linux 内核与性能调优速查/perf diff 比较两次采样

perf diff 比较两次采样

对比两次 perf.data 的差异, 用于验证优化效果或定位版本间热点漂移。

两次采样对比

用同一负载在改动前后各采集一次,然后比对两份数据的差异:某个符号的占比明显下降,说明优化确实减少了那里的开销;上升则可能是回退。它把「感觉快了」变成可核对的证据,也能发现版本之间热点位置的漂移。

基本信息

适用平台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

差异解读

差异形态可能含义下一步
少数符号占比明显下降优化命中目标结合业务指标确认整体收益
个别符号占比上升开销转移或回退检查该符号的调用路径变化
分布基本不变改动未影响热点重新确认瓶颈定位是否准确
大量符号小幅波动样本量不足或负载不可比延长窗口、固定采集条件
对比的前提是负载可比:并发数、数据规模、预热状态与采样频率都要保持一致,否则差异里混着环境噪声,解读出的结论经不起复核。
差异百分比接近时不要急着下结论:样本量不够时小幅差异随时会反转,先扩大采集窗口或重复多轮再判断。

易错点

  • 在负载不可比的时段做对比,差异来自环境而非改动,结论无效。
  • 忽略采样频率与窗口差异,把参数差异当成性能差异。
  • 只看单个符号的涨跌,不结合业务指标,误把开销转移当成优化成功。
  • 样本量不足就采信小幅差异,结论在复测时被推翻。
  • 对比文件命名混乱,事后分不清哪份是改动前。

数据来源与参考

  • man perf-diff
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌