我很好奇使用Rosetta 2和仿真在苹果M1平台上运行x86-64二进制文件的性能特征,例如Desktop目前使用QEMU所做的事情。
我理解为什么模拟速度这么慢,但是在Twitter中已经详细解释了罗塞塔2为何如此之快:https://twitter.com/ErrataRob/status/1331735383193903104。
该解释的要点是,在通常情况下,arm和x86有相反的(且不兼容)内存寻址方案,需要大量的仿真开销,但M1芯片通过硬件优化来解决这一问题,使其能够使用这两种寻址方案访问内存。有效地,当运行罗塞塔2模拟指令时,设置一个标志让处理器知道使用x86类型的寻址方案。
假设这一解释是合理的(如果有人比上面的Twitter线程有更好的来源报告,我希望在注释中包含它),技术上可以利用这种优化来进行完全的硬件仿真,例如运行x86-64 Linux Docker容器,或者运行一个完整的x86-64 Windows桌面虚拟机-- la VMware Fusion/VirtualBox?或者,这些场景中的独立操作系统层是否排除了利用内存排序优化的能力?
另外,这种处理器模式(标志或指令)是记录在案并发布给第三方使用的,还是只对苹果私密?
发布于 2021-09-04 20:09:16
不是内存寻址,是内存排序。也就是说,对于x86中用于线程间同步的无锁原子,每个asm负载/存储分别是获取/释放。(使用真正的x86 CPU进行推测性的早期加载,因此在正常情况下,当单个线程在其他线程没有写入的内存上操作时,性能不会受到影响。)
M1有对这种模式的硬件支持,也有一种弱排序模式,以便最有效地运行本机AArch64代码。看见
没错,https://github.com/saagarjha/TSOEnabler是一款开源软件,可以切换这种支持。但是它是一个内核扩展,代码签名使得获得MacOS来允许它变得很棘手,您必须对它进行签名或禁用签名验证或其他什么:
据推测,如果您构建并签名内核扩展(如果您不使用KEXT签名证书,则禁用SIP ),并将其拖到/Library/扩展中,您应该能够使用它。应该出现一个对话框,提示您在Security&Privacy preferences窗格中启用扩展,您可以从那里重新启动它,并且它将被安装。(如果您没有看到它,扩展的权限可能是错误的:尝试一个chown -R根:轮。)在实践中,这可能在许多方面出错,我很幸运,通过“重置一切”并在执行以下操作后尝试安装:.有关步骤列表,请参阅链接。
是的,QEMU的x86仿真可以使用与罗塞塔-2的x86仿真相同的硬件支持,这是合理的。它们都是x86模拟器。
正如您所说,主要问题是苹果提供公共API来启用HW模式,这样人们就不必手动安装这个内核模块;我相信大多数人都不想这样做。我不太了解软件的情况,我更感兴趣的是CPU架构的细节。
https://stackoverflow.com/questions/69056518
复制相似问题