已發布一組補丁,可將 Linux 核心的建置速度提高 50-80%

Ingo Molnar 是一位著名的 Linux 核心開發人員,也是 CFS(Completely Fair Scheduler)任務調度程序的作者,他提議在 Linux 核心開發人員郵件列表上討論一系列影響核心原始碼中一半以上檔案的補丁,以及根據設置,將完整核心重建的速度提高50-80%。所實施的優化值得注意,因為它與內核開發歷史上最大的一組更改相關 - 提議一次性包含 2297 個補丁,更改了超過 25 個文件(“include”中的 10 個頭文件) /”和“arch /*/include/」目錄「以及15 個帶有原始文字的檔案)。

效能增益是透過改變處理頭檔的方法來實現的。值得注意的是,經過三十多年的核心開發,由於檔案之間存在大量的交叉依賴關係,頭檔的狀態呈現出令人沮喪的樣子。頭檔重組花費了一年多的時間,並且需要對層次結構和依賴項進行大量重新設計。在重組過程中,我們將不同核心子系統的類型定義和 API 分開。

所做的變更包括:將高階頭檔相互分離、消除連結頭檔的內聯函數、將類型和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 秒)每小時) ,並且還提高了組裝期間使用CPU 核心的效率。透過增量構建,優化的效果更加明顯 - 更改頭檔後重新構建內核的時間顯著減少(從 112% 減少到 173%,取決於所更改的頭檔)。目前最佳化僅適用於 ARM64、MIPS、Sparc 和 x86(32 位元和 64 位元)架構。

來源: opennet.ru

添加評論