本章小结(Chapter Summary)

  • 延迟(latency)和吞吐量(throughput)通常是程序性能的最终指标。在寻求改善它们的方法时,我们需要获得更多关于应用程序如何执行的详细信息。硬件和软件都提供了可用于性能监控的数据。

  • 代码插桩(Code instrumentation)使我们能够在程序中跟踪许多内容,但在开发和运行时方面都会产生相对较大的开销。虽然大多数开发者没有手动插桩代码的习惯,但这种方法对于自动化流程仍然有价值,例如配置文件引导优化(Profile-Guided Optimizations,PGO)。

  • 跟踪(Tracing)在概念上与插桩类似,对于探索系统中的异常非常有用。跟踪使我们能够捕获完整的事件序列,并为每个事件附加时间戳。

  • 性能监控计数器(Performance monitoring counters)是底层性能分析的一个非常重要的工具。它们通常以两种模式使用:"计数"(Counting)或"采样"(Sampling)。计数模式主要用于计算各种性能指标。

  • 采样跳过程序执行的大部分内容,只取一个应该代表整个间隔的样本。尽管如此,采样通常能产生足够精确的分布。采样最广为人知的用例是在程序中查找热点。采样是最流行的分析方法,因为它不需要重新编译程序且运行时开销非常小。

  • 通常,计数和采样产生的运行时开销非常低(通常低于 2%)。一旦开始在不同事件之间多路复用,计数的开销会增加(5-15% 的开销),而采样的开销会随着采样频率的增加而增加 [Nowak2014TheOO]。

  • 屋顶线性能模型(Roofline Performance Model)是一种以吞吐量为导向的性能模型,在高性能计算(High Performance Computing,HPC)领域被广泛使用。它可以将应用程序的性能与硬件限制进行可视化比较。屋顶线模型有助于识别性能瓶颈、指导软件优化,并跟踪优化进度。

  • 有些工具尝试对代码的性能进行静态分析。此类工具模拟一段代码而不是执行它。这种方法有许多限制和约束,但作为回报,你会得到一份非常详细且底层的报告。

  • 编译器优化报告(Compiler Optimization reports)有助于找到遗漏的编译器优化。

results matching ""

    No results matching ""