上古卷轴5装备代码(上古卷轴5装备代码最好的套装)

在传统的多核处理器中(比如之前Mac机型使用的Intel CPU),所有核心都是一样的。当将线程分配给核心时,只需要平衡它们的负载,这被称为对称多处理(SMP)

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

在传统的多核处理器中(比如之前Mac机型使用的Intel CPU),所有核心都是一样的。当将线程分配给核心时,只需要平衡它们的负载,这被称为对称多处理(SMP)。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

在“活动监视器”的“CPU历史记录”窗口中,核心负载(即CPU%)按时间显示,最早的值显示在最左侧。左半部分的奇数核心是真正的核心,它显示了一个8核英特尔至强W在高负载下的情况。右边偶数编号的核心是超线程模拟的虚拟核心,也负责处理重负载。

但苹果芯片的CPU不一样,因为它包含两种不同的核心类型,一种是高性能的(称为性能核心,P核心或Firestorm核心),另一种是低功耗的(称为效率核心,E核心或Icestorm核心)。为了提高效率,需要根据核心类型分配线程。这种分配可以由应用程序和进程本身来控制,例如Asahi Linux;也可以通过操作系统来处理,比如macOS。在本文中,我们来看看macOS如何管理苹果M1芯片上的核心分配。这种管理方式被称为非对称多处理(AMP,但有些人喜欢称之为异构计算)。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

结构

M1系列芯片有两个CPU内核:

e核,其内部处理单元约为P核的一半,最高时钟频率为2064MHz。

p,最高频率更高,原装M1 3204 MHz,M1 Pro/Max/Ultra 3228 MHz。

M1系列芯片的CPU内核有三种配置方式:

M1最初包含4 e和4 p内核,用于MacBook Air、13英寸MacBook Pro、iMac和Mac mini。

M1和马克斯拥有用于14英寸和16英寸MacBook Pro和Mac Studio Max的2 E和8 P内核。

M1有4 E和16 P内核,用于Mac Studio Ultra。

一些14英寸的MacBook Pro笔记本使用了缩小版的M1 Pro芯片,P核的数量从8个减少到6个。

为了简化内核管理,macOS将内核按照功能分成簇,每个簇包含2~4个同类型的内核。不幸的是,系统级别的核心数量(如powermetrics等工具显示的数量)与活动监视器中看到的数量不同。为了与后者保持一致,我们在这里使用活动监视器中看到的核心号,但是集群号仍然与系统方式保持一致。在macOS Monterey 12.3.1中,三个芯片的功能集群如下:

在原来的M1中,每种类型的核只有一个簇,分别是E0和P0,每个簇包含四个同类型的核;

M1和马克斯分别有一个包含两个E核的集群(E0)和两个包含四个P核的集群(P0和P1);

Ultra有一个包含四个E核心的集群(E0)和四个包含四个P核心的集群(P0、P1、P2和P3)。

每个集群中的所有内核都以相同的时钟频率运行,并且通常(但不是在所有情况下)集群内的负载平衡将得以保持。有时,负载分布会不均匀,在某些极端情况下,一些线程可能会被分配到集群中的单个内核。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

线程控制

与Asashi Linux不同,macOS不支持直接访问内核、内核类型或集群,至少公共API不提供这些功能。通常,它们需要在服务质量(QoS)设置中由Grand Central Dispatch管理,macOS使用该设置来决定线程管理的策略。

具有最低QoS的线程将只在E集群上运行,而具有较高QoS的核心可以被分配到E或P核心商。后者的行为可以通过taskpolicy命令行工具或setpriority()函数动态修改。这些工具可以限制高QoS线程只在E和core上运行,或者在E或P core上运行。但是,他们不能改变最低QoS线程的规则,这些线程只能在E-core上运行。

MacOS本身采用了大多数后台任务以最低QoS运行的策略。这些任务包括自动时间机器备份、Spotlight索引维护等。存档实用程序的压缩和解压缩任务也包括在内。比如下载了xip格式的Xcode,解压需要很长时间,因为代码只能在E核上运行,没有办法更改。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

后台线程

最低QoS线程在最初的M1和M1 Pro/Max芯片上加载和运行的方式不同,因为它们的e-cluster大小不同。

的原M1芯片有四个E核,所以当QoS 9的线程运行时,时钟频率会设置为1000MHz(1GHz)左右。而只有两个E核的M1 Pro/Max则采取了不同的做法:如果只有一个线程,则以1000MHz左右的频率在集群上运行,但如果有两个或两个以上的线程,则频率提高到2064MHz。这样,M1 Pro/Max的E-cluster在不同的集群规模下,可以提供至少与原M1相当的功耗的后台任务性能。

一个常见的例外是,一些QoS最低的线程(如backupd)的进程也会受到I/O的限制。此类线程将在M1 Pro/Max上以1000MHz的速度运行。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

用户线程

所有QoS高于9的线程都以相同的方式处理,但队列的优先级不同会导致不同的结果。

因为具有高QoS的线程可以在任何类型的集群上运行,所以M1和M1 Pro/Max的管理方式不同。原来的M1只有一个P集群,所以一次最多可以给两个集群分配8个线程,每个集群运行4个线程。当线程数小于等于4时,将尽可能全部分配给P簇,E簇只在队列中有更多高QoS线程时使用。核心P的执行频率约为3GHz,而核心E的执行频率为2GHz,约为运行QoS 9线程频率的两倍。

M1和马克斯芯片有三个集群,其中两个集群各包含四个P内核,另一个集群包含两个E内核。队列中的前四个线程将被分配给第一个P集群(P0);如果有线程5~8,则分配给第二个P簇(P1),否则第二个P簇空空闲以降低功耗。如果队列中有更多的线程,它们将被分配给E内核。每个内核类型的最大频率为P0,P1为3228MHz,E0为2064MHz。

M1芯片有五个集群,每个集群有四个核心。其策略与M1 Pro/Max芯片相同,但E0只有在四个P簇全部使用时才会使用。

但是有两种情况,代码看起来只在一个内核上运行:在引导过程中,在操作系统内核初始化并运行其他内核之前,代码只会在一个活动的E内核上运行。另一种情况是在安装macOS更新之前,在“准备”下载更新的时候。在M1 Pro/Max芯片上,五个线程被分配了相当于一个核的资源,所以可以看到CPU利用率是100%,但是被限制在一个P核,也就是第二个P簇(P0)中的第一个核(下图中的核3)。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

在安装更新之前的准备阶段,这种不寻常的活动核心分布会持续大约30分钟。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

高负载情况

下图来自活动监视器的CPU历史窗口,大体反映了macOS的策略效果。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

上图是最初的M1芯片,当占用大量CPU的线程数量逐渐增加时。它的两个集群E0和P0由蓝框标识。从左到右,当只有高QoS的线程1~4时,负载完全分配给集群P0,然后线程5~8会占用集群E0。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

上图是M1 Pro芯片在高负载下的情况。负载来自多个线程,并且不断变化。有些线程有后台QoS,有些有高QoS。大部分负载分配给集群E0的两个核心,P0大部分时间都是满的,而P1会在高峰时段使用。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

上图是M1超的情况。我根据集群重新排列了核心,E0在顶部,P0~P3在底部两列。图中的负载是登录后几分钟内的典型负载。E0和P0上有很多载荷,前一个载荷高的时候会分配到P1~P3。

应该注意的是,活动监视器中不提供关于M1核心的集群频率的信息。当一条指令在CPU占100%的集群核心上以低于1000MHz的频率执行时(相当于活动状态),其速度只有CPU占100%的集群在2064MHz频率下的一半。不幸的是,这些信息只能通过命令行工具powermetrics获得。

下图显示了macOS如何管理原始M1、M1 Pro和Max芯片的CPU内核。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

苹果将于6月初在WWDC发布M1系列的后续产品。我们期待看到macOS用来管理M1芯片的核心架构和策略。

原文链接:https://不拘一格的light.co/2022/04/25/how-macOS-managers-m1-cpu-cores/

声明:本文由CSDN翻译,未经授权禁止转载。

揭开 M1 芯片的秘密:macOS 如何管理核心分配?

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/17599.html

发表回复

登录后才能评论