Fast Kernel Headers,一組可將內核編譯速度提高 50-80% 的補丁

英戈·莫爾納, 著名的 Linux 內核開發人員和 CFS 任務計劃程序的作者 為 Linux 內核開發郵件列表討論提出了一些補丁,這些補丁影響了內核源代碼中一半以上的文件,並根據配置提供了 50 -80% 的整體內核重建速度提升。

實施的優化 值得注意的是,它與添加最大的變更集有關 在內核開發的歷史上:他們開始一次包含 2297 個補丁,更改了超過 25 個文件。

性能提升 是通過改變頭文件處理方式來實現的. 需要注意的是,在內核發展的三十年中,由於文件之間存在大量的交叉依賴,頭文件的狀態已經呈現出慘淡的態勢。

頭文件的重組耗時一年多, 需要對層次結構和依賴關係進行重大重新設計. 在重組期間,我們將不同內核子系統的類型定義和 API 分開。

我很高興地宣布我自 2020 年底以來一直在從事的新“Fast Kernel Headers”項目的第一個公開版本,這是對 Linux 內核頭層次結構和頭文件依賴項的全面改造,具有雙重目標:

- 加速內核構建(絕對和增量構建時間)

– 子系統類型和 API 定義相互解耦

正如大多數內核開發人員所知,Linux 內核中有大約 10,000 個主要的 .h 頭文件,位於 include / 和 arch/*/include/ 層次結構中。 在過去的 30 多年裡,它們已經演變成一組複雜而痛苦的交叉依賴,我們親切地稱之為“依賴地獄”。

所做的更改包括: 將高級頭文件相互分離, 排除鏈接頭文件的內聯函數,映射類型和 API 的頭文件,提供一組單獨的頭文件(大約 80 個文件具有乾擾彙編的間接依賴關係,通過其他文件頭文件暴露),自動添加依賴關係到“.h”和“.c”文件,逐步優化頭文件,使用“CONFIG_KALLSYMS_FAST = y”模式,選擇性地將C文件合併到彙編塊中以減少目標文件的數量。

結果, 所做的工作允許減少已處理的頭文件的大小在後預處理階段提高了 1-2 個數量級。

  • 比如優化前,使用頭文件“linux/gfp.h”導致增加了13543行代碼,包含了303個依賴頭文件,優化後大小減少到181行,依賴文件26個。
  • 再比如:預處理未打補丁的“kernel/pid.c”文件,連接了94行代碼,其中大部分沒有在pid.c中使用。 拆分頭文件使我們可以將處理的代碼量減少三倍,將處理的行數減少到 36。

當在測試系統上使用“make -j96 vmlinux”命令完全重建內核時,補丁顯示 v5.16-rc7 分支的編譯時間從 231,34 減少到 129,97,15,5 秒(從 27,7 到 XNUMX 次構建)小時)並且還提高了構建過程中 CPU 核心的使用效率。

使用增量構建,優化效果更加明顯:更改頭文件後重新構建內核的時間顯著減少(從 112% 減少到 173%,具體取決於更改的頭文件)。

優化目前僅適用於 ARM64、MIPS、Sparc 和 x86(32 位和 64 位)架構。

很好 如果您有興趣了解更多信息,您可以在中查看詳細信息 以下鏈接。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。