每周性能技巧 #39:警惕带着礼物来的微基准测试

本节阅读量:

本文翻译自 Abseil 官网的 Performance Tip of the Week #39: Beware microbenchmarks bearing gifts

原文发布于 2021 年 1 月 15 日,作者 Gerardo García,更新于 2025 年 5 月 7 日。

微基准很有用,但也很容易因为环境过于理想而误导我们。本篇提醒:微基准中的胜利不一定会在真实程序中出现。

微基准为何危险

微基准通常让代码在紧密循环中反复执行。这会带来与真实世界不同的条件:

  • 数据和指令更可能常驻缓存。
  • 分支预测器更容易学习模式。
  • setup 成本可能被摊销或完全排除。
  • 编译器可能看到更多优化机会。
  • 真实调用方中的竞争、锁、I/O 和内存压力不存在。

因此,微基准可以证明某件事在理想条件下更快,但不能单独证明它会让应用更快。

常见礼物

微基准会带来一些诱人礼物:

  • 非常小的误差条。
  • 非常大的局部改善。
  • 简洁可重复的实验。
  • 容易放进评审描述里的数字。

这些都很好,但如果它们让我们忽略真实工作负载,就会危险。

如何正确使用

微基准应该作为优化漏斗的一步:

  1. 用它快速筛掉明显不行的实现。
  2. 用它理解指令、分配和缓存行为。
  3. 用负载测试或生产 profile 验证真实收益。
  4. 若结果不一致,回到假设而不是强迫生产结果服从微基准。

结语

微基准能带来礼物,但不要无条件接受。把它当作学习工具,而不是最终裁判。

上一篇:每周性能技巧 #21:提升正则表达式的效率

上一节

下一篇:每周性能技巧 #53:使用硬件性能计数器精确测量 C++ 基准

下一节