普通视图

发现新文章,点击刷新页面。
昨天以前王子亭的博客

入手 MacBook Air (Apple Silicon)

作者 王子亭
2021年1月10日 00:00

最近两年几乎买齐了苹果的全线产品,越来越看好苹果,甚至买了一些苹果的股票,当然为什么选择苹果生态这个话题可以放在单独的文章里来说。

我在 Small talk 的第二期「聊聊用 M1 芯片的新 Mac」中也聊到了 Apple Silicon 的话题,欢迎大家收听,但这期播客录制时间较早,如有冲突还是以本文为准。

第一体验

在 11 月 17 日的发布会后我又观望了一周才下单,最后在 12 月 4 日拿到了搭载 M1 处理器 的 MacBook Air,我将内存升级到了 16G ,存储则还是低配的 256G。

选择这一款是因为从测评来看 Air 和 Pro 的性能差别并不显著,也不想为了 Touch Bar 和屏幕亮度支付额外 2000 元的价格,不如把这个钱加到内存上。

说到内存,新的 Mac 使用了「统一内存架构(UMA)」,可以消除 CPU 和显卡等专用计算单元之间的内存拷贝,既提高了速度,又减少了内存使用。一些朋友表示 8G 的内存对于不开虚拟机的中度使用也非常够用,但相信硬件的提升很快就会被软件消化,如果你希望新的 Mac 有一个比较长的使用周期,还是建议升到 16G 内存。对于新的 Mac 来说最高也只能选配 16G 内存,据说是因为总线 IO 的瓶颈,只有 2 个雷电接口也是这个原因。

至于存储空间,我属于最低的存储空间都够用的那一类人 —— 我希望设备上有最高性能的本地存储,但我并不会用这么昂贵的空间去存储冷数据,毕竟我才刚刚花了大功夫 自己搭了一个 NAS

拿到 MacBook Air 开始,最亮眼的还是发热和续航的表现,我偶尔会把 MacBook 放在腿上使用,之前的 Intel MacBook 十几分钟就会觉得烫,而 M1 Mac 则在日常使用时几乎感觉不到温度,在 CPU 跑满的情况下温热,只有 CPU 和 GPU 同时跑满才会有烫的感觉。相应地,M1 的续航表现也非常亮眼,后面的性能测试中会有详细的说明。

然后把它和我们家其他的 Mac 对比一下跑分,果然是用最低的价格提供了最高的分数:

MacAir (M1)Pro (2020)Pro (2017)mini (2018)
CPUM1I5-1038NG7I5-7360UI7-8700B
GPU7-CoreIris PlusIris Plus 640Intel UHD 630
Memory16G16G8G16G
Geekbench SC167811368521117
Geekbench MC7225423720205621
Geekbench Metal19138849849303776
Price¥9499¥14499¥11888¥11909

数据来自 everymac.com 和 geekbench.com

其中 MacBook Pro 2020 是我 2020 年初时购买的最后一代 Intel MacBook,使用第十代 i5,倒是没什么问题,只是目前来看就买得实在太亏了;MacBook Pro 2017 是蛋黄一直在用,最近她开始学习 Swift 就一直在吐槽电脑实在太慢了,同时电池也进入了待维护状态;Mac mini 2018 是我目前工作用的电脑,当时虽然选了最高配的 i7 CPU,但没考虑到 Intel UHD 630 的性能实在太差了,即使我只是接了一块 4k 屏,系统的界面响应就已经非常卡顿了,现在 GPU 成为了整台电脑的瓶颈。

ARM 生态

应该说这次从 x86 到 ARM 的切换比我想象中的要顺利,苹果的第一方应用和 masOS 独占的应用都第一时间进行了适配,其他没有适配的应用则可以用 Rosetta 2 来运行。Rosetta 2 用起来是完全无感的,系统会自动将 x86 的应用以转译的方式来运行,无论是图形界面应用还是命令行的 binary 文件。性能上的差别对于大部分应用来说也并不明显,很多时候感觉不到自己是否使用了 Rosetta 2。

M1 芯片之前对我来说最大的变数在于对 Docker 的支持,但就在前几天 Docker for Mac 也发布了 针对 M1 芯片的测试版本。测试版中默认会运行一个 ARM 架构的 Linux 虚拟机,默认运行 linux/arm64 架构的镜像(说起来在 M1 之前 linux/arm64 大概主要是被用在树莓派上吧);对于没有提供 linux/arm64 架构的镜像则会自动使用 QEMU 来运行 x64_64 的镜像,性能就比较差了。

macOS 吸引我的一大理由就是 Homebrew —— 可能是桌面开发环境中最好用的包管理器。在 M1 上 Homebrew 目前 推荐大家使用 Rosetta 2 来运行,所安装的包也都是需要 Rosetta 2 转译运行的 x86 版本,即使这个包已经提供了 ARM 版本。

这是因为 Rosetta 2 虽然可以完美运行 x86 的 binary,但当一个脚本中会以字符串的方式传递架构名、会调用多种不同的架构的程序,且这些程序同样关心当前的架构时就出问题了,不同的程序无法对这台机器的架构达成一致 —— 这往往发生在编译脚本里,也就是 Homebrew 的主要工作。解决这个问题目前只能是让整个脚本都运行在 x86(即 Rosetta 2)下,Homebrew 目前也是这样做的。

当然你可以选择在另外一个路径 安装 ARM 版的 Homebrew 来安装 ARM 版的包,但目前这种方式缺少官方指引、需要自己尝试一个包的 ARM 版是否可以工作、需要从源码编译。目前大多数无法工作的包是受限于上游依赖的发布周期(如支持 darwin/arm64 的 Go 1.16 要等到 2021 年二月才会发布),对于不涉及特定架构、或已经在其他平台提供有 ARM 版本的包,届时只需重新编译就可以提供 ARM 版本。

M1 的 Mac 可以直接安装 iOS 应用这一点我倒不是很在意,一方面是很多国内的毒瘤应用第一时间就从 Mac 商店下架,不允许安装。另一方面 iOS 基于触屏的交互逻辑本来就不适合 Mac,我也不觉得 Mac 之后会加入触屏的支持。

性能测试

以极低的功耗实现高于之前 MacBook 的性能是这次 M1 Mac 的亮点,在我购买之前实际上就已经看了很多视频自媒体的测评,在他们的测试中 M1 Mac 在使用 Final Cut Pro X 进行视频剪辑和导出有着碾压级的性能表现。

但显然这并不能代表 M1 在所有工作负载下的表现,因此我根据我日常的工作负载设计了 7 组共 15 项测试,主要将搭载 M1 的 MacBook Air 和我目前在使用的最后一代 Intel MacBook Pro (2020, i5 10th) 进行对比,以下数据均以后者为基准。

NameMacBook Pro (i5 10th)MacBook Air (M1, x86)MacBook Air (M1, ARM)
Node.js npm install2m 41s1m 38s (+39%)1m 2s (+61%)
Node.js webpack build54s38s (+30%)27s (+50%)
Xcode build Swift SDK11m 30sN/A6m 47s (+41%)
Xcode start iOS Simulator49sN/A16s (+67%)
Docker Redis benchmark128k QPS133k QPS (+4%)261k QPS (+96%)
Docker build Node.js app2m 56s4m 43s (-61%)3m 17s (-12%)
Visual Studio Code startup7s17s (-142%)3s (+57%)
Visual Studio Code open and close tabs36s37s (-3%)40s (-11%)
Chrome Speedometer 2.088 times/m121 times/m (+38%)214 times/m (+143%)
Safari Speedometer 2.0111 times/mN/A227 times/m (+105%)
Safari 10% battery for Bilibili32mN/A1h 50m (+244%)
Final Cut Pro X background rendering9mN/A6m 20s (+30%)
Final Cut Pro X export H.2648m 25sN/A7m 8s (+15%)
Steam Oxygen Not Included25 ~ 40 fps45 ~ 50 fps (+25 ~ 80%)Not support
Steam Sid Meier’s Civilization VIp99 22 fpsp99 51 fps (+132%)Not support

对于 Node.js 依赖安装、前端项目构建、Swift 代码编译这些 CPU 密集且内存访问频繁、其中一些步骤依赖单核性能的场景,M1 有着非常明显的提升,即使使用 Rosetta 2 转译也要显著好于 i5。

最值得一提的是得益于 M1 的统一内存架构的高带宽和低延迟,Redis 跑出了 26 万 QPS 的成绩(无论是否在 Docker 中这个数据都差不多),而 i5 仅有 6 万。在调整 redis-benchmark 的数据长度参数时,M1 的结果几乎没有什么变化,而 i5 则随着数据长度的增加 QPS 逐步下降。说不定未来搭载 M1 的 Mac mini 会成为运行遇到 CPU 瓶颈的 Redis 的最佳硬件。

而使用 Docker for Mac 构建镜像则没有提升,这可能是因为构建的过程有很多零散的 IO,CPU 会有比较多的时间休息。而如果使用 Docker 去构建 x86_64 架构的镜像的话,性能损失就非常严重了(-61%)。

我编写了一个反复开关标签页的脚本来测试 VSCode 的性能,结果表明对于这类负载并不重的 GUI 程序,Rosetta 2 转译并不会影响性能,同样编译到 ARM 也不会对性能有多少提升,Rosetta 2 主要是会比较明显地增加启动速度。在 VSCode 的测试数据中出现了比较奇怪的现象 —— Rosetta 2 转译的版本竟然比 ARM 还快,我目前倾向于这是实验的误差,两者的速度实际上是几乎相同的。

在浏览器的测试中我们选择了 Speedometer,它会运行上百个由主流 Web 框架编写的 Todolist。结果显示无论是 Chrome 还是 Safari,其 ARM 版本都有一倍以上的性能提升,同样即使经过 Rosetta 2 转译也仍然比 i5 要快。浏览器的场景其实和前面 Node.js、Swfit 和 Redis 很像,都是 CPU 密集且内存访问频繁、其中一些步骤依赖单核性能,这也是 Intel CPU 之前的痛点。

我还基于浏览器进行了续航测试,我在中等亮度下播放 Bilibili 上 4K 120 帧的视频,开启弹幕的情况下 M1 使用前 10% 的电池播放了惊人的 1 小时 50 分钟,在这段时间的日常使用体验也是如此,我毫不怀疑官网给出的 18 小时视频播放时间。

在 Final Cut Pro X 的视频渲染和导出上,虽然 M1 确实有提升,但远不如之前一些媒体宣传的那么夸张,目前我还不清楚原因。

游戏方面我测试了我经常玩的 Oxygen Not Included(缺氧)和 Sid Meier’s Civilization VI(文明 6),我使用的都是中后期的存档、默认画面预设,在大多数时间都有 50 帧以上,是完全可以流畅游玩的。

可以看到 M1 的 Mac 在之前低配的价位上实现了中配甚至高配的计算性能,得益于专用的加速芯片,在苹果第一方和 macOS 独占的应用上有非常惊人的表现,而对于必须经过 Rosetta 2 转译的应用,仍有可以接受的性能表现,也是远高于之前同一价位的 Mac 的。

多用户模式

因为蛋黄和我对新的 MacBook 都很有兴趣,因此我们各建了一个账户,这段时间是在轮流使用这台 MacBook,这也是我第一次使用 macOS 的多用户模式。整体体验还是很不错的,macOS 允许两个用户同时登录,在不退出程序的情况下在两个用户间切换,这使得我和蛋黄同时使用一台电脑的体验非常流畅。

16G 的内存也非常够用,即使另外一个用户运行了 XCode、Final Cut Pro X 或大量标签页的 Chrome,也不会有任何感觉。倒是 256G 的存储空间对于两个用户同时使用有些不够,不过这样的状态应该不会持续太久,后面我也会入手一台 M1 的 Mac。

对 Mac 的展望

Rosetta 2 为什么会有这么好的性能呢?之前 Surface 等 x86 模拟器性能不佳的一个原因是 x86 与 ARM 在一个有关内存顺序的机制上有着不同的行为,在 ARM 上模拟这一行为会导致很大的性能损失。而苹果选择直接 在 M1 芯片中实现了一套 x86 的内存机制,大大加速了 Rosetta 2 的性能。据说苹果同样在芯片层面对 JavaScript 和 Swfit 中一些特定场景进行了优化,还有大量的专用计算芯片来加速编视频编解码、密码学计算等特定的任务。

这是一个非常有趣的方向,过去很长一段时间都是应用来适配芯片,但只要对硬件和操作系统的控制力足够强,芯片也可以反过来去对最常用、性能问题最突出的应用进行芯片层面的优化或加入专用的计算芯片,和应用程序一起进行迭代更新。M1 中有的是对 Rosetta 2 的优化,而下一代的 M2 芯片则可能不再需要 Rosetta 2,而是可以根据需要去优化当时的热门场景。

对于苹果来说切换到 ARM 最重要的是提升了其垂直整合的能力、自主控制 Mac 产品线的更新周期。因为苹果对于操作系统的控制力和对应用生态的号召力,可以最大限度地发挥出自主设计的 ARM 芯片的效果。Windows 阵营当然可以切换到 ARM,会享受到前面提到的一些好处,毕竟苹果已经证明了这条路是可行的。但因为软硬件不是同一家公司控制、Windows 对应用生态的号召力弱,微软又不敢破釜沉舟地投入到 ARM 上,因此短期内可能 Windows 阵营还很难实现。

23 岁的我在想些什么

作者 王子亭
2019年11月25日 00:00

又一年过去了,已经 24 岁了,最近两年我已经有些感觉到了时间的流逝。大概人对时间流逝的感觉是基于已经度过的时间吧 —— 同样的一年在 16 岁时是经历过人生的 1/16,而现在的一年则只是 1/23。这就开始让我在很多事情上有一种「会不会太晚了」的焦虑,尤其今年移民的进程并不顺利,之前觉得自己年龄小的优势可能会越来越小。

最近两年学习和输出的节奏也慢了一些,休息时间更多地选择看视频来放松,表达欲望也比之前下降了不少。偶尔会有一些灵感,但大多没能写完,都积压在了草稿箱中,博客快要变成年更了。这当然不是一个好现象,我还是希望能花更多的时间做一些输出。今年我决定减少在业余时间对于写代码的投入,不去造一些很可能没有什么后续的轮子了。而是花更多的时间在写文章,包括技术文章上,这样能帮助到更多人,我也会得到更直接的反馈。

虽然去年和蛋黄的那次比较大的矛盾在年初就结束了,但对我一整年的心态的影响还是很大,有些患得患失,对我们的未来有点迷茫,或者说觉得未来是很遥远的事情,就想维持现有的状态。就像人们觉得 35 岁之后诞生的科技都是违反自然规律的,现在想想我们互相对于在一起之前或刚在一起时就已经暴露出来的差异,就更容易互相接受;但对于之后才暴露出来的差异则非常难以互相理解。

蛋黄在年初就说要学习编程并希望直接去找编程相关的工作,一年里她也断断续续、三天打渔两头晒网地学,但进度实在太慢了,也没有什么阶段性的进展,还不愿意听我的建议。所以我还是对她的工作和学习能力有一些担忧、担心她能够找到合适的工作,也担心之前完全交给她的移民的事情是否做出了正确的决策。如果没有的话,其实包括学习编程和移民,都是在坚持一个结果非常渺茫的事情,这种感觉让我非常焦虑。

我和太空探索的故事

作者 王子亭
2019年7月2日 00:00

从小我就对太空以及人类对太空的探索特别感兴趣,最近一段时间因猎鹰重型火箭首次商业发射和回收成功,又激起了我对于太空探索的兴趣,今天我想讲一讲我和太空探索的故事以及这件事为何如此让我着迷。

在 2002 年前后(7 岁),我爸送了我两本书 最新21世纪少年儿童百科 和「十万个为什么」(这个版本全是文字、每本几百页左右、共 12 册,我并没有在网络上找到,现在想起来这本书的目标用户也许是家长才对)。我对太空探索以及其他科学知识的启蒙都来自于这两本书,小时候可以阅读的内容并不多,在之后的近十年中,这两本我起码看了十几遍以上,不过现在其实并不能想起来着两本书上具体讲了什么,只有一些模糊的片段。

后来 2005 年(10 岁)的暑假,发现号航天飞机在哥伦比亚号的事故后首次 执行任务,我记得那半个月我每天都从新闻和报纸关注事件的动态,还用积木(其实是麻将牌)去模拟我所理解的航天飞机发射过程。那时候每天晚上会有一段固定的时间,爷爷会给我解答一些我感兴趣的问题,我当时并不理解太空是怎样的,也不了解飞船是如何工作的。我想搞清楚这些,但受限于当时的知识,我只能以我所理解的方式去提问,所以很多时候并没有得到想要的答案。

值得一提的时候我高中有那么一年多在玩 EVE 这个游戏,其实说起来 EVE 在飞船的操纵上已经十分简化了,游戏背景中的先进科技也绕开了现实中的燃料和光速等限制。但在 EVE 中驾驶飞船给了我对于宇宙的一种直观的认识 —— 星球是如此地大、星球之间的距离是如此地远,其余的空间都是一片虚无,如果没有一个坐标的话,你几乎不可能和别人相遇。

对我影响比较大的作品还有 三体星际穿越。三体是我在高中的时候看的,因为我小说其实看得并不多,所以这是第一本让我印象深刻的科幻小说;星际穿越则是我刚刚离开学校(18 岁)时看的,也是我非常喜欢的太空背景电影。这两部作品构建了我对于太空的形象化的认识,无论是三体中的黑暗森林设定还是星际穿越中黑洞的视觉呈现,都很好地把握了宇宙的尺度。当时看完星际穿越我发了一条 推文:「看了 Interstellar, 虽然不喜欢结局,但确实是一部非常之优秀的科幻作品。觉得在宇宙面前人类的力量实在太渺小,或许其他的技术难关都可以克服,但时间的限制是永远突破不了的。大概人类永远也无法离开地球,因为一旦到宇宙中去,对于人类,时间或是过于短暂,或是无比漫长。」

蛋黄同样对太空探索很感兴趣,近两年我们也看了不少相关的纪录片,我们经常互相拉着对方讲新了解到的关于太空探索有趣的事情:蛋黄讲得比较多的是历史,而我会更关注技术。我们关注最多的具体项目还是阿波罗计划了,毕竟是人类首次登上另外一颗星球,直到目前依然保持着人类所到达的最远的地方的记录。在做了更多了解之后,我发现其实有非常多的美国公司(尤其是飞机制造商)都参与了阿波罗计划,负责具体的火箭和飞船制造,而 NASA 主要负责的是设计和组织,整个项目也可以算是人类历史上最宏大的工程之一了。

提到太空探索的爱好者,就必须要提 Kerbal Space Program(坎巴拉太空计划)这款游戏,基本上在知乎这样的社区只要涉及航天或火箭相关的话题,评论区就一定有人刷坎巴拉的梗。在我入手这个游戏后便很快沉迷无法自发,在游戏中我可以亲手实现之前的文字或视频中见到过无数次的技术:发射入轨、霍曼转移、交会对接、反推着陆、引力弹弓。也对比冲、Δv 之类的数值有了更深刻的认识,之后再看纪录片的时候就能脑补出其中提到的各种操作了。后面我应该会专门写一篇文章来介绍坎巴拉太空计划这个游戏。

那么为什么我对于太空探索如此着迷呢?首先我还是视它为一种兴趣,是因为去了解这些知识会让我感到高兴和满足,而不是我要用这些知识做一件什么事情。相比于其他的学科,例如数学、物理甚至是计算机,最新的研究成果几乎都是我无法理解的,并不适合作为消遣和兴趣;而美国人登陆了月球、火星发现了液态水、木卫四可能存在生命这些就要好理解得多。这大概是因为作为太空探索的主力 —— NASA 的大部分资金都来自于财政拨款,这要求它必须以一种普通人能够理解的方式,向美国的纳税人解释他们的工作,以得到更多人的支持、得到更多的拨款。

接下来的几年也非常值得期待,在太空竞赛、人类登月之后,经过几十年的修整,接下来十几年人类很有可能会在航天领域取得新突破。比如 SpaceX 的 BFR 和 Starlink,人类重返月球和登上火星以及更多的深空探测计划。

❌
❌