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