现代CPU性能分析与优化
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 性能测量

理解应用程序性能的第一步是学会对它进行测量。有些人认为性能本身就是应用程序的特性之一[1],但是与其他特性不同,性能不是非此即彼的特性:应用程序总是有性能表现的,这也是无法用“是”或“否”回答应用程序是否有性能的原因。

与绝大部分功能问题相比,性能问题通常很难跟踪和复现[2]。基准测试每次运行的结果都不尽相同。例如,解压一个zip文件时,每次运行返回的结果总是一样的,这意味着该操作是可复现的[3]。然而,我们不可能复现与该操作完全一样的性能剖析结果。

任何关注过性能评估的人可能都知道公允地进行性能测量并从中得出准确结论是多么困难。性能测量有时会出人意料,改变一段看上去并不相关的代码可能对性能带来让人惊讶的重大影响,这就是所谓的测量偏差。因为在测量中存在误差,性能分析通常需要通过统计方法进行处理。该主题值得用一整本书来讨论,该领域已有很多极端案例和大量的研究,我们不再就此深入讨论。相反,我们只关注大体的想法和需要遵循的规则。

开展公允的性能实验是获得精确及有意义结果的基本步骤。设计性能测试和配置测试环境都是性能评估工作的重要组成部分。本章将简要介绍现代系统在性能测量过程中为何会出现噪声以及如何应对,讨论在真实生产环境下测量性能的重要性。

每个长生命周期的产品都会有性能退化的情况,这点在涉及大量代码贡献者和经常发生改变的大型项目上尤为严重。本章专门用几页篇幅讨论在持续集成和持续交付(Continuous Integration/Continuous Delivery,CI/CD)过程中自动化跟踪性能变化的流程。本章还提供在开发者修改代码后如何正确收集并分析性能测量指标的通用指南。

本章最后介绍了开发者测量时间时会使用的软硬件计时器,以及设计和开发微基准测试时经常会遇到的陷阱。