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