找回密码
 立即注册
搜索
查看: 7461|回复: 37

[硬件] 苹果换芯成开发者噩梦:众多工具和库不支持ARM64

[复制链接]
     
发表于 2020-11-18 02:53 | 显示全部楼层 |阅读模式
原标题:苹果换芯成开发者噩梦:Docker运行受影响,众多工具和库不支持ARM64

转自架构头条公众号

作者 | Tina、核子可乐

“2020 年已至,我第一次感受到苹果公司对于我这类开发人员的点点恶意。”

1苹果的换芯行动

11 月 11 日凌晨,苹果“One more thing”发布会如期而至。发布会上,苹果宣布推出首款自研的 5nm M1 芯片,该款芯片将为其新一代基于 ARM 的 Mac 系列产品提供动力。苹果公司声称,该款 M1 芯片搭载了许多世界顶级工艺的产品,包括世界上最快的 CPU 内核、最快的 IGPU。

“苹果花了十几年的时间来创造和优化 Apple 芯片,因为芯片是 iPhone、iPad 和 Apple Watch 的核心。现在我们希望将其引入 Mac,因此 Mac 可以凭借令人难以置信的性能、自定义技术和行业领先的芯片来实现巨大的飞跃”,苹果如是说。

苹果公司认为,M1 是迄今为止性能最高的芯片,并且低功耗高效内核可提供与当前基于英特尔的双核 MacBook Air 相似的性能。当然,高性能内核要快得多。

M1 芯片推出以前,英特尔几乎垄断了苹果笔记本电脑的 CPU。2005 年,苹果从 PowerPC 芯片切换到了英特尔。这个过渡已经有 15 年了,过渡的成本来主要来自软件方面。开始时开发人员需要使用苹果提供的工具链来生成可以在 PPC 和 x86 Mac 上运行的通用二进制文件,并且并非所有苹果以前的 API 都可以过渡到 x86。

当年,苹果推出的工具链名叫 Rosetta,用于将 PowerPC 应用转换到 x86 上。Rosetta 能做到让大多数 PPC Mac OS X 应用程序在 x86 Mac 上运行,尽管性能有些损失(这并不是一件简单的事情)。最终,Rosetta 成为了苹果的创可贴,直到 2011 年 Mac OS X 10.7(Lion)推出时才被放弃。

现在,从英特尔切换到苹果 Silicon,苹果给出了三种解决方案:Universal 2 通用应用、Rosetta 2 工具链、原生 ARM 应用。第一种解决方案是在苹果芯片版 Mac 上使用“Universal 2”运行应用程序,针对 Adobe Photoshop、Microsoft Word 这样的系统软件。第二种解决方案是利用苹果提供的 Rosetta 2 将应用重新编译,让 x86 应用能运行在 ARM 架构上,主要针对不太涉及处理器特性的绝大部分轻量级应用。

从本质上讲,Rosetta 2 可能足以支持大多数主流生产力应用程序,但往往无法兼容那些需要与操作系统、硬件或图形硬件进行直接交互的软件。特别是,那些在关键任务需求中涉及虚拟化或高端图形、视频或科学类应用处理的用户,可能最好是等推出原生软件版本之后再考虑升级到基于 ARM 的苹果芯片版 Mac 平台。

2换芯给开发者们带来的问题

很明显,这次换芯行动将给消费者们带来巨大助益,包括获得更长的电池续航并改善运行过热问题(2018 款 MacBook Pro 就是款强大的「暖宝宝」)。软件与硬件之间的紧密集成,也将进一步优化用户的使用体验。另外,产品价格也有可能随之下降。

苹果的芯片迁移决定,自然也激起了开发者们的担忧,特别是在开发者体验方面。苹果虽然表示提供了相应的解决方案,强调新的芯片将提高开发人员的生产力,但是换芯行动也同样会沉重打击高度依赖其产品及生态系统的专业开发者。

3现有 Mac 应用运行速度可能减慢

如果将现有 Mac 应用借助 Rosetta 2 转换引擎重新编译为“Universal 2”二进制形式,大部分专为英特尔处理器编写的 64 位 MacOS 应用程序都能够直接运行在苹果芯片版 Mac 之上。

但苹果在开发者文档中颇为诙谐地提到,“转译过程需要时间,因此用户可能感觉转译后的应用在启动或运行时偶尔更慢。”

当然,只要涉及任何形式的仿真、虚拟化或者转译过程,应用程序的运行速度就必然要比原生版本稍慢一点。虽然还没有官方确认,但通过已经泄露的 Geekbench 5 基准测试,大家大概可以推断 Mac mini DTK 的运行速度会比在 iPad Pro (2020) 机型上慢多少。

与运行原生代码的 iPad Pro(2020)机型相比,Mac mini DTK 在通过 Rosetta 2 以单核形式运行 Geekbench 5 基准测试时,速度降低了 26%;在多核形式下,速度要慢 38%。

值得一提的是,与这款 iPad Pro 相比,Mac mini DTK 的时钟频率也有所下降,而且运行的 beta 软件并未经过优化。但如果我们假定二者时钟频率相同且在最终硬件发布时完成了进一步软件优化,那么估计通过 Rosetta 运行软件时、相较于原生应用的速度劣势应该会在 20% 到 30% 之间。可以肯定的是,基于 ARM 的苹果芯片 Mac 性能更强,甚至足以抵消引入 Rosetta 2 带来的速度劣势,最终实现与一、两年前大部分英特尔芯片版 Mac 相同的性能水平。

但是,其他人怎么办?实际上,大多数在 Mac 上进行开发的用户并不是在构建 iOS 或者 MacOS 应用。

根据 StackOverflow 2020 开发者调查,超过四分之一的开发者使用 MacOS,但只有 6% 的用户使用 Swift 语言。作为目前苹果唯一官方指定的苹果生态应用构建语言,Swift 孱弱的市场占有率足以说明大多数 Mac 用户其实并不是在为苹果开发产品。

换言之,相当一部分 MacOS 上的开发者是在构建其他类型的应用,例如运行在云服务器上的 Web 应用程序。对于这些已经熟悉了 Node.js、Python、Ruby、PHP、Go 甚至.NET/C# 的开发者来说,Mac 的换芯行动意味着什么?简单来说,他们的使用体验必然受到影响。

4相当一部分工具和库并不支持 ARM64

虽然情况会逐渐改善,但除了 AMD64 之外,其他大多数架构都无法在 ARM 上运行。而且对其他架构的支持会带来高昂成本:开发商需要从自己的代码中删除所有指向特定架构的部分,构建基础设施(在无法或不方便进行交叉编译时,可能需要购买新的硬件)、执行测试,最后提供支持。

由于相当一部分工具和库属于开源项目,因此由此带来的维护需求增长将成为沉重的额外负担,导致某些贡献者直接放弃为新的 Mac 平台上提供支持。

当然也有一些应用程序、特别是闭源项目,压根没有 ARM 版 build,例如微软 SQL Server 或 OracleDB。一位网友曾在 Reddit 上评论说:“我在学术圈待过,之前使用 Mac 设备的学生们只能依靠 Mac + Azure Data Studio 上的 Docker 完成微软 SQL 的操作练习。因此除非微软发布 ARM 版本的 SQL Server,否则这项利好将彻底消失。目前来看似乎微软并无此意,至少在 ARM 版 Mac 推出之前是不太可能有什么动静。”

5对虚拟化的支持也只能运行在 ARM64 操作系统上

苹果公司当然意识到在 Mac 上运行 Linux 的重要性,因此在发布会上演示了如何使用 Debian 虚拟机。但他们聊得不多,只是在稍后的小组讨论中证实,当时台上展示的是 Debian 的 ARM 版本。虽然不少 Linux 发行版都提供 ARM 镜像,但仍不是全部,而且多少会影响到软件可用性。更重要的是,至少 ARM 架构是绝对支持不了 Windows 的。因此,如果大家打算使用 Mac 测试自己的 Windows 应用,只能说抱歉了。你需要另外买台笔记本,或者使用远程桌面服务。另外,你也没法在 Mac 上运行虚拟机进行设备测试(例如 ESXi、pfSense、FreeNAS 等)。

6Docker 受到的影响

由于 Mac 上的 Docker 只能在虚拟机内运行,再加上用户只能对基于 ARM 架构的 Linux 进行虚拟化,意味着我们未来只能在苹果芯片版的 Mac 上运行 ARM64 容器。

目前,Docker Hub 上存在 331 万 9219 个针对 AMD64 的镜像,但针对 ARM64 的镜像只有 29076 个,占比不足 1%。再有,构建多架构 Docker 镜像还特别复杂。

尤其需要注意的是,由于生产系统通常运行 Linux/AMD64,因此你生产的二进制文件及 Docker 镜像很可能无法在开发计算机上运行。当然,你也许可以进行重新编译及交叉编译,但永远无法还原其真实的运行状态。另外,如果你的应用在生产环境中发生问题,也无法仅凭二进制文件或容器镜像在自己的笔记本上进行调试。

Docker 在开发者的日常工作流程中占据非常重要的位置,所以这些令开发者们感到相当头痛。

任职于 Docker 的 Stephen Turner 博士表示:“虽然操作系统具有虚拟化功能,但苹果芯片尚不支持虚拟化。我们也无能无力,但我们正在和苹果紧密合作希望解决这个问题”,但什么时候能够解决,他表示“还没有具体的日期”。

在 11 日的发布会后,据开发者的反馈,他们怀疑问题是否已经解决:“据我所知,M1 确实具有虚拟化支持,但尚未移植 Docker。”

并且如果只能在虚拟化层上运行 Docker,将给文件 I/O 性能造成严重拖累,并导致大型项目的编译速度直线下降。有开发者表示目前他只能使用 docker-sync 来解决这个问题。另外,除非使用 docker machine 实现真虚拟机,否则没有其他方法能够将设备挂载至 Mac 上的 docker 容器当中。所以,对于大多数需要与硬件直接交互的软件厂商来说,早点发布自家软件的原生版本才是正道。

当然,你可以使用 Rosetta 2 来运行 x86 容器,但其能否进一步扩展至支持虚拟化 Linux 等 x86 操作系统仍然有待观察。

参照 2005 年的过渡方案,苹果为这次过渡给出了两年的时间。如果一切顺利,苹果应该会在两年之后的新版本 macOS 中去掉对 x86 指令集的支持,在三年之后的新版本中去掉 Rosetta 2。而这三年之中,开发者们需要付出什么样的代价,还有待验证。

 参考链接:

https://www.reddit.com/r/docker/ ... le_silicon_keynote/

https://github.com/docker/for-mac/issues/4733

https://news.ycombinator.com/item?id=25073010
回复

使用道具 举报

     
发表于 2020-11-18 02:58 | 显示全部楼层
所以我觉得苹果可能还会维持2代的Intel版本

但是怎么定价就是个问题

回复

使用道具 举报

     
发表于 2020-11-18 04:45 | 显示全部楼层
以Homebrew为例,contirbuter says there won’t be any support for native ARM Homebrew installations for months to come, 所以想在M1上开发得舒服至少得半年到一年
回复

使用道具 举报

     
发表于 2020-11-18 05:42 来自手机 | 显示全部楼层
这不是大好事吗,变相推动了aarch64生态发展啊,怎么就成噩梦了
回复

使用道具 举报

     
发表于 2020-11-18 05:47 | 显示全部楼层
这文章臆想和错误也太多了...
回复

使用道具 举报

发表于 2020-11-18 07:04 | 显示全部楼层
docker都不支持,做开发机?lol
回复

使用道具 举报

     
发表于 2020-11-18 07:39 | 显示全部楼层
怎么,还有人在mac上用docker,当然是再买一台Linux pc啦
回复

使用道具 举报

发表于 2020-11-18 07:50 | 显示全部楼层
  100多年前,福特公司的创始人亨利·福特先生到处跑去问客户:“您需要一个什么样的更好的交通工具?”几乎所有人的答案都是:“我要一匹更快的马”。很多人听到这个答案,于是立马跑到马场去选马配种,以满足客户的需求。但是福特先生却没有立马往马场跑,而是接着往下问。
    福特:“你为什么需要一匹更快的马?”
    客户:“因为可以跑得更快!”
    福特:“你为什么需要跑得更快?”
    客户:“因为这样我就可以更早的到达目的地。”
    福特:“所以,你要一匹更快的马的真正用意是?”
    客户:“用更短的时间、更快地到达目的地!”
    于是,福特并没有往马场跑去,而是选择了制造汽车去满足客户的需求。
回复

使用道具 举报

头像被屏蔽
     
发表于 2020-11-18 07:58 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2020-11-18 08:00 | 显示全部楼层
反正docker for mac现在性能就不如linux下的
生态构建看苹果自己和谷歌等arm友军这几年的了
回复

使用道具 举报

     
发表于 2020-11-18 08:07 来自手机 | 显示全部楼层
这文章跟国内流量号的水平差不多
回复

使用道具 举报

     
发表于 2020-11-18 08:47 | 显示全部楼层
拿swift说明开发应用的人少我是真没想到的。。。。
所以现在M1的Docker究竟是个什么情况。
回复

使用道具 举报

     
发表于 2020-11-18 08:56 来自手机 | 显示全部楼层
sqd 发表于 2020-11-18 04:45
以Homebrew为例,contirbuter says there won’t be any support for native ARM Homebrew installations f ...

太乐观了,五年吧,到时候应该大部分都支持了
回复

使用道具 举报

     
发表于 2020-11-18 08:58 | 显示全部楼层
只要docker for mac 可以跑arm linux我就知足了...
回复

使用道具 举报

     
发表于 2020-11-18 09:05 | 显示全部楼层
sqd 发表于 2020-11-18 04:45
以Homebrew为例,contirbuter says there won’t be any support for native ARM Homebrew installations f ...

可以跑 rosetta 的 homebrew
回复

使用道具 举报

     
发表于 2020-11-18 09:20 | 显示全部楼层
回复

使用道具 举报

     
发表于 2020-11-18 09:39 | 显示全部楼层
香港记者巴拉森 发表于 2020-11-18 09:20
所以能直接装arm版linux吗

  -- 来自 有消息提醒的 Stage1官方 Android客户端

客服说的可以

评分

参与人数 1战斗力 +1 收起 理由
nws + 1 欢乐多

查看全部评分

回复

使用道具 举报

     
发表于 2020-11-18 10:05 来自手机 | 显示全部楼层
MakeLaugh 发表于 2020-11-18 07:50
100多年前,福特公司的创始人亨利·福特先生到处跑去问客户:“您需要一个什么样的更好的交通工具?”几 ...

什么?福特先生现在卖的汽车两年后才能装上轮子?
回复

使用道具 举报

     
发表于 2020-11-18 10:49 | 显示全部楼层
MakeLaugh 发表于 2020-11-18 07:50
100多年前,福特公司的创始人亨利·福特先生到处跑去问客户:“您需要一个什么样的更好的交通工具?”几 ...

X86,马车,不行!
果子M1,汽车,行!伟大!!
回复

使用道具 举报

发表于 2020-11-18 10:58 | 显示全部楼层
苹果远程把你的电脑换成m1了不成?
回复

使用道具 举报

头像被屏蔽
     
发表于 2020-11-18 11:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2020-11-18 11:53 | 显示全部楼层
本帖最后由 手撕寿司 于 2020-11-18 11:55 编辑
qratosone 发表于 2020-11-18 11:48
某些人的意思是,未来互联网公司的后端技术选型会为了便于在新Mac上开发而把现有服务器从x64 Linux上迁移到 ...

反了。
ARM服务器已经是趋势了
前几年linus说过,缺少实用的ARM桌面设备,制约了ARM服务器端的开发

不是为了吃这口醋(ARM笔记本),去买的饺子(ARM服务器)
而是现在这口饺子(ARM服务器)刚好就缺这瓶醋(ARM笔记本)

回复

使用道具 举报

     
发表于 2020-11-18 12:33 | 显示全部楼层
我决定先买个树莓派400玩玩
回复

使用道具 举报

     
发表于 2020-11-18 12:35 | 显示全部楼层
qratosone 发表于 2020-11-18 11:48
某些人的意思是,未来互联网公司的后端技术选型会为了便于在新Mac上开发而把现有服务器从x64 Linux上迁移到 ...

服务器用什么芯片和你写代码的客户端用什么芯片,对于大多数公司来说并没有什么关系
回复

使用道具 举报

发表于 2020-11-18 12:37 | 显示全部楼层
w酱 发表于 2020-11-18 07:39
怎么,还有人在mac上用docker,当然是再买一台Linux pc啦

在mac上面build一下的需求不是没有啊
回复

使用道具 举报

发表于 2020-11-18 12:41 | 显示全部楼层
本帖最后由 mimighost 于 2020-11-18 12:42 编辑
qratosone 发表于 2020-11-18 11:48
某些人的意思是,未来互联网公司的后端技术选型会为了便于在新Mac上开发而把现有服务器从x64 Linux上迁移到 ...

你说的两个东西没有关系

现在arm linux普及的瓶颈在于云计算公司。国外最激进的是亚马逊,现在Graviton已经做到第二代了,性能差不多甚至更优的情况下,价格比intel的x86便宜40%,目前已经有公司在大规模迁移了。但是问题还是存在,而且不小,比如一些祖传的数据库的代码,在arm上面就是没法跑的,或者会出问题,所以还需要时间。

至于mac这个桌面版arm 64那就是自己的阵线了。那些果粉现在吹还为时过早,要看之后工具链的迁移的进度。
回复

使用道具 举报

发表于 2020-11-18 12:44 | 显示全部楼层
当然outel在这个时候已经输了

一旦开了这个头,那么以后intel的独食就没得吃了

记得烧纸
回复

使用道具 举报

     
发表于 2020-11-18 12:47 来自手机 | 显示全部楼层
mimighost 发表于 2020-11-18 12:41
你说的两个东西没有关系

现在arm linux普及的瓶颈在于云计算公司。国外最激进的是亚马逊,现在Graviton已 ...

个人比较乐观。
说工具链,其实不就是个armlinux,apple只要乐意,搞个类似wsl2的虚拟化没啥难度。只要armlinux跑起来,一系列工具链,包括主楼说的docker(arm版)就都没问题了。
回复

使用道具 举报

发表于 2020-11-18 12:50 | 显示全部楼层
本帖最后由 mimighost 于 2020-11-18 12:53 编辑
手撕寿司 发表于 2020-11-18 12:47
个人比较乐观。
说工具链,其实不就是个armlinux,apple只要乐意,搞个类似wsl2的虚拟化没啥难度。只要ar ...

我也不唱衰

但是反正未来2年我还是抱着intel的mbp用的了,等那边趟坑趟完,再跳坑不迟
回复

使用道具 举报

头像被屏蔽
     
发表于 2020-11-18 17:05 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2020-11-18 17:16 | 显示全部楼层
镜像支持arm是个奇怪的说法...
回复

使用道具 举报

     
发表于 2020-11-18 17:56 | 显示全部楼层
没什么好说的,ARM Mac 现在就是跑不了 docker
https://github.com/docker/for-mac/issues/4733

至于 ARM 镜像的问题,用 ARM 镜像可以取得更好的性能
https://bmalehorn.com/arm-mac/
回复

使用道具 举报

发表于 2020-11-18 18:34 | 显示全部楼层
这段时间没怎么玩游戏,正试着把raspberrypi当轻型主力机使用,常用的问题不大,要弄一些特殊应用还是麻烦,

arm64生态如果真能被苹果带起来也是好事,乐见其成。

  -- 来自 有消息提醒的 Stage1官方 iOS客户端
回复

使用道具 举报

     
发表于 2020-11-18 19:47 | 显示全部楼层
Magnesium 发表于 2020-11-18 17:56
没什么好说的,ARM Mac 现在就是跑不了 docker https://github.com/docker/for-mac/issues/4733  

我对arm mac的一点疑惑. 我在mac下用arm base的镜像开发,那我要到amd64的服务器上部署amd64 base的程序这个不会有问题吗。也就是我的服务器也得是arm的才能不会有兼容问题吗
回复

使用道具 举报

     
发表于 2020-11-18 22:41 | 显示全部楼层
roamer 发表于 2020-11-18 19:47
我对arm mac的一点疑惑. 我在mac下用arm base的镜像开发,那我要到amd64的服务器上部署amd64 base的程序 ...

x86 服务器也跑 arm 的镜像,但是会很慢(5-10 倍性能差距)
所以更合理的做法是在 arm Mac 上跑 x86 的镜像,让开发环境吃这个 debuff
回复

使用道具 举报

     
发表于 2020-11-18 23:23 | 显示全部楼层
roamer 发表于 2020-11-18 19:47
我对arm mac的一点疑惑. 我在mac下用arm base的镜像开发,那我要到amd64的服务器上部署amd64 base的程序 ...

我猜这要看你开发的程序吧……Rust的编译器可以选择编译二进制文件版本,所以盲猜LLVM也能?
回复

使用道具 举报

     
发表于 2020-11-18 23:35 | 显示全部楼层
果子不是已经开发出中间层了吗
回复

使用道具 举报

头像被屏蔽
发表于 2020-11-19 00:45 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-11-14 21:53 , Processed in 0.282777 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表