NRe*_*ngh 5 assembly emulation arm64 apple-silicon rosetta-2
我很好奇使用 Rosetta 2 与仿真在 Apple M1 平台上运行 x86-64 二进制文件的截然不同的性能特征,例如 Docker Desktop 目前使用QEMU做什么。
我明白为什么仿真这么慢,但是在这个 Twitter 线程中详细解释了为什么 Rosetta 2 这么快:https : //twitter.com/ErrataRob/status/1331735383193903104
该解释的要点是,在通常情况下,arm 和 x86 具有相反(且不兼容)的内存寻址方案,这需要大量的仿真开销,但 M1 芯片通过硬件优化解决了这个问题,允许它使用两种寻址方案访问内存。实际上,当运行 Rosetta 2 模拟指令时,会设置一个标志,让处理器知道使用 x86 风格的寻址方案。
假设这种解释是合理的(如果有人有比上述 Twitter 线程更好的来源报告,我会在评论中包含它,我会很感激),从技术上讲,这种优化是否可以用于完整的硬件仿真,例如运行 x86- 64 个 Linux Docker 容器,还是像VMware Fusion/VirtualBox 一样运行完整的 x86-64 Windows 桌面虚拟机?或者,这些场景中单独的操作系统层是否妨碍了利用内存排序优化?
另外,此处理器模式(标志或指令)是为第 3 方使用而记录和发布的,还是仅供 Apple 私有?
Pet*_*des 10
不是内存寻址,而是内存排序。即对于用于线程间同步的无锁原子 - 在 x86 中,每个 asm 加载/存储分别是获取/释放。(真正的 x86 CPU 会进行推测性早期加载,因此在正常情况下,当单个线程在其他线程未写入的内存上操作时,性能不会受到影响。)
M1 具有对此类模式的硬件支持,以及最有效地运行本机 AArch64 代码的弱有序模式。看
是的,https://github.com/saagarjha/TSOEnabler是切换该支持的开源软件。但它是一个内核扩展,代码签名使得 MacOS 允许它变得很棘手,你必须对其进行签名或禁用签名验证或其他东西:
据说,如果您构建并签署内核扩展(如果不使用 KEXT 签名证书,则禁用 SIP)并将其拖到 /Library/Extensions 中,您应该能够使用它。应该会出现一个对话框,提示您在“安全和隐私”首选项窗格中启用该扩展,您从那里允许它并重新启动,它将被安装。(如果您没有看到它,则扩展上的权限可能是错误的:尝试 chown -R root:wheel。)在实践中,这可能会在很多方面出错,我很幸运,通过“重置所有内容”并尝试执行以下操作后安装:
[...]请参阅步骤列表的链接
所以,是的,QEMU 的 x86 仿真可以使用与 Rosetta-2 的 x86 仿真相同的硬件支持,这是合理的。 它们都是 x86 模拟器。
正如你所说,主要问题是苹果提供了公共 API 来启用硬件模式,这样人们就不必手动安装这个内核模块;我相信大多数人都不愿意这样做。我对软件情况不太了解,我对CPU架构细节更感兴趣。
| 归档时间: |
|
| 查看次数: |
33 次 |
| 最近记录: |