Linux 一行修正替 Athlon XP 平反:錯誤 SSE2 判定拖累效能多年

Linux 核心開發團隊近日在檢視低階 x86 程式碼時,發現一項長期存在的指令集條件判斷錯誤,可能讓 AMD Athlon XP 等舊型處理器的效能被低估多年。問題源自核心處理記憶體寫入順序的 wmb() 定義,而修正只需要修改一行程式碼。

SFENCE 的硬體門檻被錯誤設為 SSE2

據《Phoronix》報導,開發者 Yao Zi 在檢視 Linux 核心低階 x86 架構程式碼時發現,wmb() 使用的 SFENCE(Store Fence)指令,過去在 alternative() 機制中被設定為必須具備 X86_FEATURE_XMM2,也就是 SSE2 指令集。

然而,SFENCE 並非 SSE2 的專屬功能。這項指令早在 Intel 初代 SSE 指令集推出時便已提供,核心識別碼應為 X86_FEATURE_XMM。因此,僅支援初代 SSE、但不支援 SSE2 的處理器,原本也應能使用 SFENCE。

一行程式碼修正歷史錯誤

這項問題據稱源自過往開發者為 wmb() 定義加入 cc clobber 編譯器標記時,在 alternative() 機制中不慎把原先的 X86_FEATURE_XMM 判定條件改成 X86_FEATURE_XMM2。

錯誤的硬體門檻使僅具備初代 SSE 的處理器無法使用 SFENCE 最佳化路徑,影響範圍包括 AMD Athlon XP 系列、部分早期 Sempron 型號,以及部分 Intel Celeron 與 Pentium III 處理器。

修正方式是將條件判定還原為 X86_FEATURE_XMM,讓支援初代 SSE 的舊型 x86 處理器重新使用正確的寫入記憶體屏障機制。Linux 團隊計劃把這項修正回溯納入 Linux 7.3 核心,為仍在使用舊硬體的系統帶來效能最佳化。

Related Articles

Stay Connected

0FansLike
0FollowersFollow
22,800SubscribersSubscribe
- Advertisement -spot_img

Latest Articles