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