每周性能技巧 #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、用代码大小换速度、用复杂度换吞吐量,都可能合理,但需要显式表达。
如果某个权衡没有被主指标覆盖,就应该作为约束或辅助指标写出来。否则,我们可能把成本扫到别处,并把成本转移误判为收益。
结语
定义成功让优化工作更像工程,而不是寻宝。清楚的主指标、辅助指标和成功标准,可以让团队更快判断某个想法是否值得继续。
本节目录