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 施加了极其严格的限制,导致加载指令完全无法相互重排。
HN 评论区
67- pdw
这篇文章的引言重复了一个常见的论断:
> ARM 是最宽松的,允许大量的硬件优化;而 x86 是最严格的,强制执行一个非常强的内存一致性模型,几乎没有太多优化空间。
但我看到过一些令人信服的论点,认为宽松的模型未必能带来多少实际收益,https://fgiesen.wordpress.com/2026/08/25/memory-ordering-in-...
- dagmx
供参考,Fex 是一个将 x86 翻译到 ARM 的框架,类似于 Apple 的 Rosetta2 和 Microsoft 的 Prism。
Valve 资助其开发,因为这也是新款 Steam Frame 支持 x86 游戏的方式。它目前也被(以分支形式)用于 Crossover Beta,以替代 Rosetta2 的使用。
- modeless
正如文章所指出的,Apple 早在六年前就通过在其芯片中直接添加 x86 兼容的内存排序模式解决了这个问题,当时 x86 模拟变得至关重要。这又是 Apple 芯片引领行业的一个例子。
- sureglymop
稍微相关一点,但这个项目(FEX)真的很棒。我已经在多台 ARM 掌上设备上运行了 Armada OS,它们现在已经是相当不错的 Linux 小机器了,而且电池续航惊人。
我遇到的大多数问题都与反作弊系统(如 EAC 等)有关,但目前可以绕过。x86 模拟发展到这个程度,感觉简直不可思议。
- asksomeoneelse
太棒的文章了!这正是我总希望能在 HN 首页看到的内容。
我真的很好奇 Apple 内部是如何组织的,才能让垂直整合运作得如此顺畅。光是这个功能,想必就涉及了来自众多不同团队的许多人。