vlambda博客
学习文章列表

Rust 编译器探索使用 PGO

Rust 编译器团队介绍了将 PGO 应用于 Rust 编译器 (rustc) 的实践。他们表示此举动主要是受 Mozilla 启发,Mozilla 作为 Rust 的深度使用者,在过去的几个月里一直在使用配置文件引导优化 (Profile-Guided Optimization, PGO) 来构建其自用的优化版本 Clang,并将使用此构建基础设施的 Firefox 编译时间减少了 9%。

因此,Rust 编译团队猜想是否可以将 PGO 应用到 rustc 本身以提升速度?

结论是 PGO 可以显著缩短编译时间,但要把这些改进提供给使用者不像在 dist builds 中添加编译器标志 (compiler flag) 那样简单。PGO 与大多数其他优化的不同之处在于:

  • 更多的检测和数据收集阶段,因此需要不同的扩展构建工作流

  • 产生持续的构建时间成本,这是自动化优化(如 LTO)共有的一个特征

上述两个问题给在编译器上应用 PGO 形成不小的阻碍,Rust 的 CI 构建时间比较长,团队也因此放弃了一些优化(例如由于 Mac 平台上的构建机器速度特别慢,macOS 至今仍无法通过使用 ThinLTOed LLVM 获得 10% 的性能提升)。

对于上述两个阻碍,Rust 编译器团队提出了权衡的建议,一是让计算机多花几个小时用于构建,这就可以在接下来的几个月减少 15% 的编译时间;另外就是为复杂的构建设置投入大量工程成本,例如引入带外检测 (out-of-band instrumentation) 和提供配置文件数据缓存。

Rust 编译器探索使用 PGO


延伸阅读


软件简介

Rust 是 Mozilla 的一个新的编程语言,由web语言的领军人物Brendan Eich(js之父),Dave Herman以及Mozilla公司的Graydon Hoare 合力开发。

创建这个新语言的目的是为了解决一个很顽疾的问题:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升。Rust是针对多核体系提出的语言,并且吸收一些其他动态语言的重要特性,比如不需要管理内存,比如不会出现Null指针等等。


▼ 往期精彩回顾 ▼





觉得不错,请点个在看