微軟探索LTO+PGO 以優化Linux 內核
當越來越多的軟件廠商採用鏈接時優化(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編譯器。