FEX-Emu 是一套開源的 Linux 使用者模式 x86/x86-64 模擬器,目的是讓 x86 應用程式能在 ARM 架構的處理器上有效率地執行,由 FEX 開發團隊在 GitHub 上維護。這篇文章解釋了模擬過程中最棘手的問題之一:x86 使用嚴格的記憶體讀寫順序(TSO),而 ARM 採用比較寬鬆的弱序模型,兩者不相容會拖慢效能,甚至造成程式行為出錯。
文章詳細說明了團隊如何解決這個落差,包括把 x86 的讀取、寫入指令轉換成 ARM 的 acquire、release 指令,後來改用 LRCPC 指令集讓效能更好;針對記憶體位址沒有對齊的情況,設計了「patchpoint」機制即時偵測並降級處理;另外也把 18 個 x86 的原子操作對應到 ARMv8.1 指令集,並指出橫跨快取線的分割鎖目前仍有資料撕裂的風險。
文章附上具體效能數據引發討論,例如在 Apple M1 上因為硬體直接支援 x86 記憶體順序模型,效能表現最好;而在未快取記憶體的寫入情境下,ARM 平台比 x86 慢了多達 816 倍。社群也提到 Valve 為了 Steam Deck 曾實作核心層級的補丁來加速這類操作,顯示這是遊戲與硬體廠商都在意的實際問題。
對正在學程式的孩子來說,這則新聞偏向底層硬體與作業系統工程,門檻較高,但很適合用來說明「同一支程式在不同硬體上為什麼跑起來速度不一樣」,讓孩子理解電腦硬體架構的差異,其實會一路影響到軟體效能。
開源系統軟體硬體