Rust 編譯器探索使用 PGO

www88jmpcomI7176934555 發表於 2021-03-29

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) 和提供配置檔案資料快取。

本作品採用《CC 協議》,轉載必須註明作者和本文連結