當越來越多的軟件廠商采用鏈接時優化(LTO, link-time optimizations)和配置文件引導優化(PGO, profile-guided optimizations)來利用編譯器榨取性能的時候,微軟工程師正在為自用的Linux 內核探索LTO+PGO,以實現更好的 Linux 性能。
在 Linux 內核上使用鏈接時優化并不是新概念,過去已有多家廠商發布了針對 Linux 內核的 LTO 補丁,但通常不會帶來很大的變化。此前Linus Torvalds 和其他人一直對支持 LTO 的 Linux 內核不看好,部分原因是過去 GCC 的 LTO 狀況不佳。但如今隨著現代 GCC 編譯器(和 Clang)的發展,LTO 也逐漸變得更好,像 Fedora 在打包他們的發行版安裝包時都會默認使用 LTO,也有像 Clear Linux 這樣的公司通過使用AutoFDO(基于程序性能分析工具的反饋式編譯優化)來進一步提升其發行版的性能。
相對而言,在 Linux 內核上使用配置文件引導優化的案例則比較鮮見。由于配置文件引導優化完全依賴于配置文件,反饋給編譯器以幫助其進行優化啟發式處理。因此,對于實際使用情況而言,配置文件的準確性至關重要。考慮到在 Linux 上看到的工作負載非常多樣化,以及各種不同的硬件和驅動程序,要生成對 PGO 有用的、能被廣泛使用的、能幫助絕大多數用戶的配置文件是一項艱巨的任務。因此,對于 Linux 內核中的 PGO,更多的是針對個人用戶/組織,他們可以采用 PGO,并根據自身的實際情況進行調整。
微軟軟件工程經理 Ian Bearman 在本周舉辦的 Linux Plumbers 大會上介紹了他們對 Linux 內核的配置文件引導優化的探索。
他們對 PGO 的興趣源于對 Linux 性能的“內部客戶要求”。不過話又說回來,微軟致力于優化 Linux 性能現在看來并不是什么奇怪的事情,另一位微軟工程師曾是推動FSGSbase補丁開發的貢獻者,最后還被合并進 Linux Kernel 5.9。
Redis 是他們一直展示的在內核探索使用 PGO 并獲益的公開案例之一。
微軟會繼續探索用于 Linux 內核的 PGO,有趣的是,人們發現Windows確實廣泛使用了 LTO + PGO。據說在 Windows 實例中,他們看到這些編譯器優化的性能提升了 5~20%,想必是使用了他們自己的 MSVC 編譯器。
點此查看微軟工程師在 LPC2020 大會上的演講幻燈片。
來源:開源中國