首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >M1上的其他x86-64仿真器是否有可能利用Rosetta 2所使用的相同的优化?

M1上的其他x86-64仿真器是否有可能利用Rosetta 2所使用的相同的优化?
EN

Stack Overflow用户
提问于 2021-09-04 15:07:28
回答 1查看 2.2K关注 0票数 17

我很好奇使用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?或者,这些场景中的独立操作系统层是否排除了利用内存排序优化的能力?

另外,这种处理器模式(标志或指令)是记录在案并发布给第三方使用的,还是只对苹果私密?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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架构的细节。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69056518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档