The Scourge of x86 Emulation
4 hours ago
- 在ARM的弱一致性模型上模拟x86-TSO内存模型会导致严重的性能问题,尤其是非对齐访问和原子指令。
- 最初使用加载获取/存储释放指令的ARMv8.0变通方案导致严重减速,部分CPU的非对齐访问性能损失达50-70%。
- LRCPC扩展(ARMv8.3+)提高了对齐内存性能,但对于跨越16字节粒度的非对齐访问无效,需要昂贵的DMB后补丁。
- 原子RMW操作从x86到ARMv8.1-a一对一映射,但非对齐原子操作在ARM上慢1000倍,因为涉及内核信号处理的拆分锁模拟。
- Apple M1的硬件TSO模式消除了许多开销,但跨缓存行的拆分锁仍然存在问题;高通Oryon-3支持64字节边界内的缓存行一致性。
- 没有硬件支持的拆分锁模拟通常不正确;提议的解决方案使用跨越缓存行边界的128位CASP指令。
- ARM上的非缓存(写合并)内存性能极差,存储带宽比x86差高达816倍,导致《空洞骑士》等游戏运行低于1 FPS。
- UMA系统可以通过使用缓存缓冲区绕过非缓存内存问题,但PCIe GPU设置仍然存在问题,需要未来的扩展如FEAT_LRCPC4。
- 供应商正在逐步改善对x86模拟的硬件支持,但完全与x86持平可能需要进一步的架构变更。