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 在其資料中心使用 BOLT 的報告中說:"對於資料中心的應用,BOLT 在組態檔引導的函數重新排序和 LTO 的基礎上實現了高達 7.0% 的效能加速。對於 GCC 和 Clang 編譯器,我們的評估顯示 BOLT 在 FDO 和 LTO 的基礎上將其二進位制檔案的速度提高了 20.4%,如果二進位制檔案是在沒有 FDO 和 LTO 的情況下構建的,則提高了 52.1%。"
延伸閱讀: