x86-TSO 内存模型:ARM 模拟的噩梦

The Scourge of x86 Emulation

在 x86 模拟领域,最大的性能杀手莫过于 x86-TSO 内存模型。由于 ARM 架构采用弱一致性模型,而 x86 强制要求严格的总存储排序,这种架构差异导致模拟时性能急剧下降。FEX 团队深入剖析了从 ARMv8.0-a 到最新扩展的演进历程,揭示了为何简单的内存访问在模拟中变得异常昂贵。虽然 Apple Silicon 通过硬件级支持巧妙解决了这一问题,但大多数 ARM 平台仍需依赖复杂的指令转换。文章详细探讨了 split-locks、对齐问题以及 FEAT_LRCPC 扩展如何逐步缓解这些痛点,为高性能 x86 模拟指明了方向。

使用 acquire-release 语义来处理每一个 x86 加载操作,实际上对 ARM CPU 施加了极其严格的限制,导致加载指令完全无法相互重排。
  1. pdw

    这篇文章的引言重复了一个常见的论断:

    > ARM 是最宽松的,允许大量的硬件优化;而 x86 是最严格的,强制执行一个非常强的内存一致性模型,几乎没有太多优化空间。

    但我看到过一些令人信服的论点,认为宽松的模型未必能带来多少实际收益,https://fgiesen.wordpress.com/2026/08/25/memory-ordering-in-...

  2. dagmx

    供参考,Fex 是一个将 x86 翻译到 ARM 的框架,类似于 Apple 的 Rosetta2 和 Microsoft 的 Prism。

    Valve 资助其开发,因为这也是新款 Steam Frame 支持 x86 游戏的方式。它目前也被(以分支形式)用于 Crossover Beta,以替代 Rosetta2 的使用。

  3. modeless

    正如文章所指出的,Apple 早在六年前就通过在其芯片中直接添加 x86 兼容的内存排序模式解决了这个问题,当时 x86 模拟变得至关重要。这又是 Apple 芯片引领行业的一个例子。

  4. sureglymop

    稍微相关一点,但这个项目(FEX)真的很棒。我已经在多台 ARM 掌上设备上运行了 Armada OS,它们现在已经是相当不错的 Linux 小机器了,而且电池续航惊人。

    我遇到的大多数问题都与反作弊系统(如 EAC 等)有关,但目前可以绕过。x86 模拟发展到这个程度,感觉简直不可思议。

  5. asksomeoneelse

    太棒的文章了!这正是我总希望能在 HN 首页看到的内容。

    我真的很好奇 Apple 内部是如何组织的,才能让垂直整合运作得如此顺畅。光是这个功能,想必就涉及了来自众多不同团队的许多人。

同日更多故事

2026-09-18