一行程式碼 導致 CPU 性能嚴重低落
【平反 😡】外媒報導,近日 Linux 團隊在檢查底層核心時,無意中發現 Linux 核心在寫入記憶體屏障(Write Memory Barrier,簡稱 WMB)程式碼中,存在一項長久未被察覺的指令集條件判斷錯誤,導致僅支援初代 SSE 指令集的 Athlon XP 處理器無法正確調用硬體加速。經由僅僅一行程式碼修正(One-line patch)後,將會為如 AMD Athlon XP 等 CPU 帶來重大提升。
據《Phoronix》報導,該問題是由開發者 Yao Zi 在檢視 Linux 核心低階 x86 架構程式碼時發現。在 Linux 核心的 wmb() 定義中,用於確保記憶體寫入順序的 SFENCE(Store Fence)指令,過去被錯誤地設定了 X86_FEATURE_XMM2(即 SSE2 指令集)的硬體門檻限制。
然而,SFENCE 指令實際上是 Intel 初代 SSE(核心識別碼為 X86_FEATURE_XMM)推出時便已引進,並非 SSE2 的獨佔功能。翻查歷史原因,該問題源自過往開發者在為 wmb() 定義新增 cc clobber 編譯器標記時,於 alternative() 機制中不慎將判定條件從原先的 X86_FEATURE_XMM 誤調升為 X86_FEATURE_XMM2,導致僅具備初代 SSE 支援的處理器無法正常使用 SFENCE 指令的最佳化路徑。
這導致包括 AMD Athlon XP 系列、部分早期 Sempron 型號,以及部分 Intel Celeron 和 Pentium III 在內的舊型處理器效能一直被嚴重低估。因此,Linux 團隊計劃在 7.3 版本核心中回溯修補,為舊系統帶來性能最佳化。
這項修正僅需要修改一行程式碼,重新還原 X86_FEATURE_XMM 的特徵判斷,讓不支援 SSE2 但具備初代 SSE 的老舊 x86 處理器重新獲得正確的寫入記憶體屏障機制,進而帶來關鍵的系統執行效能提升。
資料來源: