每周性能技巧 #70:定义并衡量优化是否成功

本节阅读量:

本文翻译自 Abseil 官网的 Performance Tip of the Week #70: Define and measure optimization success

原文发布于 2023 年 8 月 7 日,作者 Chris Kennelly,更新于 2025 年 8 月 23 日。

性能优化需要明确目标。没有目标,任何局部数字变好都可能被误认为成功。本篇讨论如何定义优化成功,以及如何选择主指标和辅助指标。

主指标

主指标应该反映最终想改善的结果,例如:

  • 每 CPU 完成更多请求。
  • 每 RAM 服务更多数据。
  • 更低延迟。
  • 更低尾延迟。
  • 更少机器或更低成本完成相同工作。

主指标帮助我们避免只优化看起来容易的局部数字。如果一个改动降低某函数 CPU,但整体吞吐量没有改善,就需要理解差异。

辅助指标

辅助指标解释为什么主指标变化,或为什么没有变化。它们包括:

  • 函数级 CPU 时间。
  • 分配次数和分配字节数。
  • cache miss、TLB miss、分支预测失败。
  • 代码大小。
  • 锁竞争和排队时间。

辅助指标可以帮助调试和归因,但不应替代主指标。我们真正关心的是系统完成有用工作的效率。

成功标准

在开始前写下成功标准,可以避免事后挑选结果。例如:

  • 生产 A/B 中 CPU 改善至少 1%。
  • RAM 增幅低于 0.5%。
  • P99 延迟没有显著回退。
  • 代码复杂度或维护成本可接受。

成功标准不需要完美,但要足够清楚,让团队知道什么时候继续、什么时候停止。

权衡

优化很少只改善一个维度。用 RAM 换 CPU、用代码大小换速度、用复杂度换吞吐量,都可能合理,但需要显式表达。

如果某个权衡没有被主指标覆盖,就应该作为约束或辅助指标写出来。否则,我们可能把成本扫到别处,并把成本转移误判为收益。

结语

定义成功让优化工作更像工程,而不是寻宝。清楚的主指标、辅助指标和成功标准,可以让团队更快判断某个想法是否值得继续。

上一篇:每周性能技巧 #75:如何做微基准测试

上一节

下一篇:每周性能技巧 #60:进程内性能分析:经验教训

下一节