去年被英特爾收購的 Linutronix 的 Thomas Gleixner 和他的團隊正在致力於清理 Linux x86/x86_64 啟動過程。一組涉及早期 Linux 內核初始化代碼和其他樹範圍更改的 17 個補丁現已發布以供討論。

Linux 內核開發人員正在努力清理 x86 啟動過程並清理代碼。 Thomas Gleixner 解釋了當前的 Linux x86 引導代碼和這個最新補丁系列的重點:

“我的團隊和我自己正在努力清理 x86 引導過程,尤其是 CPUID 的完整恐怖表演評估,它是用乾草線電路、膠帶和強力膠構建的。

一個相關的目標是將早期啟動期間不需要的基礎設施初始化移到啟動過程的後期階段。早期啟動是脆弱的並且已經足夠複雜了,所以任何可以進入後期階段的東西都是勝利。

X86 FPU 初始化是顯而易見的部分之一,它有零理由提前完成。唯一的要求是它發生在替代修補之前。儘早進行還需要自定義命令行解析,這在稍後進行初始化時顯然可以避免。

替代補丁從 check_bugs() 開始,它在 start_kernel() 後期被調用。將 FPU 初始化移入其中為時已晚,因為在 fork_init() 之後調用了 check_bugs(),但是 fork_init() 要求 FPU 在 X86 上初始化,因為在 X86 上,task_struct 的大小取決於 FPU 寄存器緩衝區大小。

為了避免另一個魔法函數,我們開始提前移動 check_bugs() 並檢查所有化身是否有任何理由這麼晚才這樣做。事實證明沒有(著名的遺言),但它也表明 check_bugs() 是一個嚴重的用詞不當。

check_bugs() 已成為在運行其餘初始化代碼之前完成 CPU 初始化的垃圾場。”

這個補丁系列最初有 17 個補丁,旨在清理 Linux x86 引導代碼。這是一項不錯的工作,並且遵循 Gleixner 最近在並行 CPU 方面的工作作為另一項引導改進,為 Linux 6.5 提供啟動支持。

Categories: IT Info