近年來,Linus Torvalds 沒有時間親自為 Linux 內核編寫太多原始新代碼,這些天主要是管理開發人員、提供有見地的郵件列表帖子、審查代碼以合併到內核樹中以及相關任務。對於 Linux 6.4,儘管他確實設法編寫了一些新代碼。

上週 Linus Torvalds 將他自己的“x86-rep-insns”分支合併到 Linux 6.4 合併窗口的內核中。 Torvalds 的 Linux 6.4 代碼的重點是清理 x86 內存複製代碼。他在 Git 合併中解釋道:

“這清理了很多我們的 x86 內存複製代碼,特別是對於用戶訪問。我一直在推動微架構支持良好的內存複製和清除很長一段時間,並且一直可見內核如何盡可能積極地使用“rep movs”和“rep stos”。

微架構支持多年來一直在改進,以至於現代 CPU 成為內存複製的最佳選擇這將成為一個函數調用(而不是可以變成單獨的“mov”指令的東西)現在改為內聯字符串指令序列。

但是,只有當我們有現代標記:x86 FSRM 和 FSRS 功能(“Fast Short REP MOVS/STOS”)。

所以這清理了我們的很多歷史代碼,擺脫了 memcpy/memset 案例中的遺留標記使用(“REP_GOOD”和“ERMS”),並替換了它與現代現實。請注意,REP_GOOD 和 ERMS 最終仍被已知的大型案例(即頁面複製和清除)使用。

其中大部分最終與用戶內存訪問有關的原因是正常的內核內情況是由編譯器完成的(__builtin_memcpy() 和 __builtin_memset())並達到我們可以使用的地步我們的指令重寫以將那些內聯爲字符串指令將需要一些編譯器支持。

相比之下,用戶訪問器函數完全由內核代碼控制,因此我們可以任意更改它們。”

Linux 6.4 合併窗口保持打開狀態,直到下週末繼續發布更多功能代碼。

Categories: IT Info