第一部分:现代 CPU 上的性能分析
性能测量
了解应用程序性能的第一步是对其进行测量。任何关注过性能评估的人都知道,有时要进行公正的性能测量并从中得出准确的结论有多么困难。性能测量结果可能出乎意料且违反直觉。修改源代码中看似无关的部分,可能会让我们对程序性能的显著影响感到惊讶。出于各种原因,测量结果可能会持续高估或低估真实性能,从而导致失真的结果,无法准确反映现实。这种现象被称为测量偏差(measurement bias)。
性能问题往往比大多数功能性问题更难复现和定位根因。程序的每次运行通常在功能上是相同的,但从性能角度来看却略有不同。例如,解压一个 zip 文件时,我们每次都会得到相同的结果,这意味着该操作是可复现的。然而,无法复现该操作逐 CPU 周期相同的性能剖析结果。
进行公正的性能实验是获得准确且有意义结果的关键步骤。你需要确保自己在分析正确的问题,而不是调试某个无关的问题。性能测试的设计和环境配置,都是评估性能过程中的重要组成部分。
由于测量偏差的存在,性能评估通常涉及统计方法,这本身就值得单独写一本书。这个领域存在许多边界情况,研究成果也相当丰富。本书不深入探讨评估性能测量的统计方法,而只讨论高层次的思路并给出基本方向。我们鼓励你自行深入研究。
本章内容:
- 简要介绍为什么现代系统会产生嘈杂的性能测量结果,以及应对措施。
- 解释为什么在生产环境部署中测量性能非常重要。
- 提供如何正确收集和分析性能测量数据的一般指导。
- 探讨如何在代码变更过程中自动检测性能回归(performance regressions)。
- 描述开发者可以在基于时间的测量中使用的软件和硬件计时器。
- 讨论如何编写好的微基准测试(microbenchmark)以及常见的陷阱。