BOLT 合并到 LLVM,優(yōu)化二進(jìn)制文件以提高性能
Facebook 開(kāi)發(fā)的工具 BOLT 現(xiàn)已被合并到 LLVM 的 mono 倉(cāng)庫(kù),共包含 89.5 萬(wàn)行新代碼;作為 LLVM 的上游,以促進(jìn)其未來(lái)發(fā)展。
作為積極貢獻(xiàn) Linux 內(nèi)核的廠商,F(xiàn)acebook 的工程師近年來(lái)一直在研究 BOLT(可以追溯到 2018 年),致力于通過(guò)優(yōu)化 GCC 和 Clang 生成的二進(jìn)制文件的代碼布局來(lái)加快 Linux 二進(jìn)制文件的速度,以提高 CPU 緩存使用率和其他考慮因素。BOLT 使用了幾個(gè) LLVM 庫(kù),但在過(guò)去的幾年里一直在樹(shù)外開(kāi)發(fā)。
BOLT 即"Binary Optimization and Layout Tool"(二進(jìn)制優(yōu)化和布局工具)的縮寫,能夠在配置文件后重新排列可執(zhí)行文件,產(chǎn)生比編譯器的 LTO 和 PGO 優(yōu)化所能達(dá)到的更快性能。
而據(jù)了解,自 2020 年以來(lái),F(xiàn)acebook 方面就開(kāi)始致力于將 BOLT 作為一個(gè)新的子項(xiàng)目納入 LLVM 的上游。與此同時(shí),其甚至圍繞 BOLT 優(yōu)化 Linux 內(nèi)核等領(lǐng)域,取得了一些不錯(cuò)的進(jìn)展。在此前的 Linux Plumbers Conference 大會(huì)上,有來(lái)自 Facebook 的工程師討論了對(duì)內(nèi)核的 BOLT 處理,帶來(lái)的性能提升如下圖所示:
從數(shù)據(jù)可以看出,這是一項(xiàng)值得持續(xù)投入研究的工作,因?yàn)?Facebook 在 PGO+LTO 編譯器優(yōu)化之上通過(guò) BOLT 優(yōu)化獲得了"兩位數(shù)的速度提升"。此處的速度提升是通過(guò)優(yōu)化可執(zhí)行文件的代碼布局來(lái)實(shí)現(xiàn)的,可更有效地使用硬件頁(yè)面和指令緩存。在進(jìn)入 LLVM 的上游之后,BOLT 的前景也變得更令人期待。
關(guān)于其設(shè)計(jì)的更多背景信息和技術(shù)細(xì)節(jié),可參見(jiàn) Facebook 的這份研究論文。Facebook 在其數(shù)據(jù)中心使用 BOLT 的報(bào)告中說(shuō):"對(duì)于數(shù)據(jù)中心的應(yīng)用,BOLT 在配置文件引導(dǎo)的函數(shù)重新排序和 LTO 的基礎(chǔ)上實(shí)現(xiàn)了高達(dá) 7.0% 的性能加速。對(duì)于 GCC 和 Clang 編譯器,我們的評(píng)估顯示 BOLT 在 FDO 和 LTO 的基礎(chǔ)上將其二進(jìn)制文件的速度提高了 20.4%,如果二進(jìn)制文件是在沒(méi)有 FDO 和 LTO 的情況下構(gòu)建的,則提高了 52.1%。"
本文轉(zhuǎn)自O(shè)SCHINA
本文標(biāo)題:BOLT 合并到 LLVM,優(yōu)化二進(jìn)制文件以提高性能
本文地址:https://www.oschina.net/news/178443/bolt-llvm