mac处理器的核心负载

本文原文发表于HowardOakley博士的个人博客 , 文章的翻译、注释以及发布均已得到作者同意 。为了补充一些细节以及便于普通读者理解 , 本文对原文有一定程度的修改 。
mac处理器的核心负载
文章图片

文章图片

1984年1月 , Apple开始设计、开发和销售个人电脑系列产品Macintosh 。在这近40年时间里 , Apple浓墨重彩地书写了许多科技史上的里程碑 , 其中就包括了三个非常重要的时间点——1994年从摩托罗拉68000架构迁移至PowerPC平台、2005年从PowerPC平台迁移至英特尔x86平台、2020年从英特尔x86平台迁移至AppleSilicon 。
2020年11月11日Apple在加州Cupertino正式发布了M1芯片 , 不仅是Apple自己首款基于ARM架构的用于个人电脑的自研处理器 , 而且其强大的性能也让当时苦「牙膏厂」久已的Geeker们也感到异常亢奋 。
不过 , 看得见的风光总是与看不到的努力分不开的 。作为专为Mac设计、优化的芯片 , 系统到底是怎么将程序调度在M系列处理器上的 。
▍关于HowardOakley博士
mac处理器的核心负载
文章图片

文章图片

HowardOakley博士目前是一名Mac软件的开发者 , 同时也是网站EclecticLightCompany的创始人 。他与Mac的缘分始于他对MacintoshSE和MacintoshProgrammer'sWorkshop的一见钟情 , 从此他沉溺于其中、不可自拔直至今日 。
▍不对称的处理器架构
在以前的Intel处理器款的Mac中 , Intel处理器所有的核心都是相同的 , 因此这种处理器是对称多处理(Symmetricmultiprocessing , 缩写为SMP)构架 。系统要做的事情其实很简单 , 保持每一个核心的负载大体相近即可 。
在Intel处理器款的Mac上打开「活动监视器」的CPU历史窗口 , 我们可以注意到图表分为了两列 , 左半部分奇数核是真实的物理核心 , 右半部分则是Intel超线程技术虚拟出来的核心 。可以看到 , 在高负荷的情况下 , 系统将负载均匀地分散到了所有的核心上 , 而负载较轻时系统则将负载主要放在了真实的物理核心上 。
mac处理器的核心负载
文章图片

文章图片

横坐标轴为时间 , 纵坐标轴则为负载 , 时间从左到右逐渐靠近当时的情况
但AppleSilicon上的CPU则完全不同 , 它的处理器部分都是由两种不同的CPU核心组成 , 一种是叫做Firestorm高性能核心(有时也被缩写成P核) , 而另一种则叫做Icestorm高能效核心(有时也被缩写成E核) , 这种不对称的处理器被称为非对称多处理(AsymmetricMultiprocessing , 缩写为AMP、ASMP)器 , 或是异构计算(HeterogeneousComputing)处理器 。
【mac处理器的核心负载】从2020年开始到今天 , M1系列共计发布了四款芯片 , 分别是:
M1(2020年)
M1Pro与M1Max(2021年)
M1Ultra(2022年)
mac处理器的核心负载
文章图片

文章图片

E核心有5个频率可以选择 , P核心有15个频率可以选择
通过powermetrics我们可以知道E核心的频率最高为2064Mhz , P核心的情况则分为两种情况 , M1芯片的P核心最高频率为3204Mhz , M1Pro/Max/Ultra的P核心最高频率可达3228MHz 。如果系统还是和以前一样将保持所有的核心负载相近 , 不仅会浪费P核心更多的中间档位 , 也会让跑在E核心上的程序明显更慢 。
此外 , M1和M1Pro/Max/Ultra有完全不同的E核心和P核心组合 , 每个处理器还可以选择不同的CPU数量 , 比如最基础款的14inchMacBookPro上的M1ProCPU部分只有6个性能核和2个能效核 , 所以开发者如果需要手动适配「保持所有的核心负载相近」这个逻辑从直觉上来说异常繁琐 。