什么是性能调优?

定位性能瓶颈(performance bottleneck)只是工程师工作的一半。另一半是正确地修复它。有时,修改程序源代码中的一行就能带来显著的性能提升,错过这样的机会代价不菲。性能分析与调优(performance analysis and tuning)就是要找到并修复这样的关键代码行。

要充分利用现代 CPU 的全部计算能力,你需要了解它们的工作原理。或者像性能工程师常说的,你需要有"机械共情(mechanical sympathy)"。这个术语借自赛车世界,意思是充分理解赛车工作原理的赛车手相比不了解的对手,具有竞争优势。同样的道理适用于性能工程:虽然不可能知道现代 CPU 运作的所有细节,但你需要对其有一个良好的心智模型(mental model),才能榨取最后一丝性能。

这就是我所说的底层优化(low-level optimizations)的含义。这是一种考虑底层硬件能力细节的优化类型,区别于高层优化(high-level optimizations),后者更多关注应用程序层面的逻辑、算法和数据结构。正如你在书中所见,大多数底层优化可以应用于各种现代处理器。要成功实施底层优化,你需要对底层硬件有深入的理解。

"在后摩尔时代(post-Moore era),让代码快速运行——尤其是针对其运行的硬件进行定制——将变得越来越重要。" [Leisersoneaam9744]

在过去,软件开发者拥有更强的机械共情,因为他们常常不得不处理硬件实现的细节。在 PC 时代,开发者通常直接在操作系统之上编程,中间只有少数几个库。随着世界进入云时代,软件栈(software stack)变得越来越深、越来越宽、越来越复杂。栈的顶层(大多数开发者在此工作)与硬件之间的距离越来越远。这种演变的负面影响是,现代应用程序的开发者对其软件实际运行的硬件越来越陌生。本书将帮助你与现代处理器建立紧密的联系。

Donald Knuth 有一句著名的话:"过早的优化是万恶之源。"[Knuth1974StructuredPW] 但反面情况同样常常为真:推迟性能工程可能为时已晚,造成与过早优化同样大的危害。对于从事性能敏感项目的开发者来说,了解底层硬件的工作原理至关重要。在这样的角色中,不关注硬件的程序开发从一开始就注定失败。1 软件的性能特征必须从第一天起就与正确性(correctness)和安全性(security)并列作为首要目标。糟糕的性能可以轻易地扼杀一款产品,就像安全漏洞一样致命。

性能工程是重要且有价值的工作,但可能非常耗时。事实上,性能优化是一场没有终点的游戏,总有可以优化的地方。不可避免地,开发者会到达收益递减的临界点,在这一点上,进一步改进带来的预期工程成本已无法得到合理回报。知道何时停止优化是性能工作的一个关键方面。

1. ClickHouse DB 是一个成功软件产品的例子,它围绕一个小而高效的核心构建。

results matching ""

    No results matching ""