为什么 M1 和 Mac 是绝配?
2010 年左右移动互联网初见端倪,消费者对性能的需求不断提高,手机处理器芯片核心数量发展迅猛,短短一两年时间,就完成了从单核到双核乃至四核、八核的变化。
为应对这一趋势,ARM 推出了大小核心的设计,大核性能强悍支撑高计算资源场景下的用户需求,小核节能降低在待机情况下芯片的耗电量,不过这项技术问世之初,却出现了这样一个诡异的现象,一核有难,N 核围观....CPU 的调度出现了问题。
当然后来芯片厂商优化使这样调度不均衡的情况大为改观,但是计算密集任务与IO 密集型任务的调优依旧是资深程序员所必须掌握的技能。本文向我们展示了苹果 M1 与英特尔至强 w 系列处理器上的测试情况。
运作与QoS
无论是 Intel 内核还是 ARM 内核,macOS 都必须管理同一处理器上的多个任务并行运行。尽管实现方式有很多种,但为了简单起见,在这里我只打算集中讨论使用苹果 Foundation 框架的操作队列,因为大多数 macOS 应用都采用了这种方式。
从本质上讲,其原理非常简单。应用执行任务需要花费时间,因此为了避免阻塞用户以及其他应用的运行,开发人员将代码和数据放入一个 Operation 中(就像任务一样),然后在一个或多个内核上运行。开发人员可以指定两个常见的参数是:并发操作的最大数量,以及服务优先级亦称为任务不可打断级别(Quality of Service,即QoS)。
苹果提供了四个可以指定的QoS级别,第五个级别则由macOS决定。编写代码时,开发人员需要使用QoS级别的名称,范围从background(最低)到userInteractive(最高)。这些名称分别对应于9~33之间均匀分布的整数值,这本身就很奇怪。不对应于任何名称(例如32或34)的整数值不起作用,macOS不认识这些值,而且还会给QoS赋值-1,然后由系统决定使用四个定义级别中的哪一个。
测试
为了研究 QoS 行为,我为压缩/解压实用程序 Cormorant 构建了一个专门的免费版本,用于设置其任务的 QoS 级别。接着,我创建了一个标准的 10GB 测试文件,并使用不同的QoS进行了多次压缩测试。
在 Intel Xeon W 8 核处理器上,如果没有相互竞争的进程的话,那么无论采用什么 QoS 设置,所有操作都会尽快执行。无论怎么设置 QoS,测试的 10GB 文件通常都需要 5.6~6.6 秒的时间才能完成压缩,只有当同时进行互相竞争操作时,QoS 设置的优先级才能起到作用。
例如,分别设置 QoS 为 9(background)和 33(userInteractive),然后运行压缩,QoS 值较高的进程仍然会在正常时间内完成工作,而 QoS 值较低的进程则出现了延迟,直到 24 秒才完成任务。当使用多个压缩任务来加载处理器时,通过活动监视器观察超线程,就会发现虚拟的第二个核心承担了一些额外的负载。
我在 M1 上重复了类似的测试,无论是在带有主电源的 Mac mini,还是使用电池的 MacBook Pro,其结果都大不相同。当 QoS 为 9(background)时,所有操作仅在四个节能内核(Icestorm)上运行,即便这四个核心满载,而高性能核心一直空闲。当 QoS 设置为更高的值(从17 到 33)时,操作会在所有八个核心上运行。
QoS 的设置对任务执行的影响也很明显。当 QoS 为 9(background)时,标准压缩任务耗时 38~43 秒,而当 QoS 设置为更高的值时,操作几乎没有变化。当同时运行两个计算密集型后台任务时,一个任务几乎花费了同样的时间(40秒),而另一个任务几乎花了两倍的时间(77 秒),这两个任务都仅使用了节能核心。
与 Intel 内核相比,QoS 值较高的操作也更加一致。当 QoS 值较高时,多个任务同时运行与单个任务单独运行所耗费的时间几乎相同,而 QoS 值较低的任务耗费的时间略长,约为 15.5 秒,但仍不到节能核心所需时间的一半。
策略
如果你已经使用了 M1 Mac,则可以观察一下苹果的新策略。打开“Activity Monitor”,并在“窗口”菜单中通过“CPU History”命令观察 M1 是处于空闲还是使用状态。
下面是我之前使用过的一个测试示例的情况。
我发现 macOS 使用内核的规律是,几乎所有 macOS 的活动都在节能内核上运行,而高性能内核上只是偶尔才出场。但运行应用和执行其他用户任务会采用相反的方式,首先使用的是高性能核心,然后才是节能核心。这是因为这些用户任务运行使用的 QoS 至少是 17(在许多情况下为 25 和 33)。
就处理器而言,M1 Mac 分为两部分:四个节能内核主要负责运行 macOS 及其许多后台任务,节省下四个高性能核心供用户的应用程序使用。
M1 Mac 更快
虽然基准测试表现非常好,但是人们对于 M1 Mac 的评价普遍是,感觉更快,即使性能测量并没有表现出意外的惊喜。一种有效的表现出快速的方法是让 macOS 和用户软件分开使用不同的核心,就像 M1 一样。
在操作系统的问题中,没有什么比界面速度缓慢给用户留下的印象更糟的了。我们都有过类似的经历:遇到某个 mdworker 进程不断崩溃并重新启动,或者其他原因导致 macOS 阻塞。由于这些进程都交给了节能核心,因此它们只会影响到其他 macOS 的后台任务,对我们的影响大大降低。
上图所示的任务运行非常缓慢,花费了 15 分钟才备份了不到 1GB 的文件。如果不是在活动监视器中亲眼观察到,我都完全不知道它的性能有问题。由于加载了英特尔处理器的 Mac 无法以相同的方式将其任务划分到不同的核心上,因此当 macOS 被阻塞时,也会影响用户进程。
我想对那些认为苹果 Macs 台式机应该采用统一核心的人说,拥有八个高性能核心当然很好,但是请不要去掉 macOS 的节能核心。
原文链接:https://eclecticlight.co/2021/05/17/how-m1-macs-feel-faster-than-intel-models-its-about-qos/
声明:本文由CSDN翻译,转载请注明来源。