每周性能技巧 #39:警惕带着礼物来的微基准测试
本节阅读量:本文翻译自 Abseil 官网的 Performance Tip of the Week #39: Beware microbenchmarks bearing gifts。
原文发布于 2021 年 1 月 15 日,作者 Gerardo García,更新于 2025 年 5 月 7 日。
微基准很有用,但也很容易因为环境过于理想而误导我们。本篇提醒:微基准中的胜利不一定会在真实程序中出现。
微基准为何危险
微基准通常让代码在紧密循环中反复执行。这会带来与真实世界不同的条件:
- 数据和指令更可能常驻缓存。
- 分支预测器更容易学习模式。
- setup 成本可能被摊销或完全排除。
- 编译器可能看到更多优化机会。
- 真实调用方中的竞争、锁、I/O 和内存压力不存在。
因此,微基准可以证明某件事在理想条件下更快,但不能单独证明它会让应用更快。
常见礼物
微基准会带来一些诱人礼物:
- 非常小的误差条。
- 非常大的局部改善。
- 简洁可重复的实验。
- 容易放进评审描述里的数字。
这些都很好,但如果它们让我们忽略真实工作负载,就会危险。
如何正确使用
微基准应该作为优化漏斗的一步:
- 用它快速筛掉明显不行的实现。
- 用它理解指令、分配和缓存行为。
- 用负载测试或生产 profile 验证真实收益。
- 若结果不一致,回到假设而不是强迫生产结果服从微基准。
结语
微基准能带来礼物,但不要无条件接受。把它当作学习工具,而不是最终裁判。
本节目录