苹果 M 系列 CPU与macOS的调度算法

苹果的 M 系列 CPU 是 Apple Silicon 家族的一部分,这些是基于 ARM 的系统级芯片(SoCs),从 2020 年的 M1 开始引入。这些芯片采用异构(类似于 big.LITTLE)架构,结合高性能核心(P-cores)和高效核心(E-cores),以平衡功耗和性能。这种设计针对从后台进程到计算密集型工作负载的任务进行优化。

关键架构特征包括:

  • 统一内存架构 (UMA):CPU、GPU 和加速器共享高带宽内存(例如,M4 中的理论峰值高达 120 GB/s),减少延迟并提高效率。
  • 核心配置
  • M1:4 个 P-cores(最大 3.2 GHz)+ 4 个 E-cores(最大 2.06 GHz)。
  • M2:4 个 P-cores(最大 3.5 GHz)+ 4 个 E-cores(最大 2.42 GHz)。
  • M3:4-8 个 P-cores(最大 4.05 GHz)+ 4 个 E-cores(最大 2.75 GHz),根据型号而异(例如,M3 Pro 有 6 个 P-cores + 6 个 E-cores)。
  • M4:4-10 个 P-cores(最大 4.4 GHz)+ 6 个 E-cores(最大 2.85 GHz),具有变体如 M4 Pro(10 个 P-cores + 4 个 E-cores)和 M4 Max。
  • 附加组件:集成 GPU(使用基于图块的延迟渲染)、用于 ML 任务的 Neural Engine(针对 FP16/INT8 优化),以及加速器如高级矩阵扩展 (AMX) 用于矩阵运算,在 M4 中演变为 ARM 可扩展矩阵扩展 (SME)。
  • 功耗和效率重点:设计用于低功耗(负载下通常 10-20W. ,CPU 支持 FP64/FP32,但 GPU 上的 FP64 有限。

这些芯片为 macOS 设备如 MacBooks、iMacs 和 Mac Studios 提供动力,性能在各代之间扩展(例如,M4 GPU 的 FP32 峰值约为 2.9 TFLOPS)。

芯片P-Cores (最大频率)E-Cores (最大频率)GPU 核心内存带宽 (峰值)典型用例
M14 (3.2 GHz)4 (2.06 GHz)7-8~68 GB/s入门级 Macs (例如,MacBook Air)
M24 (3.5 GHz)4 (2.42 GHz)8-10~100 GB/s中档 (例如,MacBook Pro 13″)
M34-8 (4.05 GHz)4-6 (2.75 GHz)8-40~120 GB/s (Pro/Max)Pro 型号,具有增强的 ML 加速。
M44-10 (4.4 GHz)4-6 (2.85 GHz)8-40~120 GB/s最新,具有 SME 用于矩阵运算。

macOS 调度算法

macOS 使用 XNU 内核(Mach 和 BSD 的混合),它采用基于优先级的线程调度器,具有分时元素。调度器在运行队列上操作,这些队列分为带(Normal、System High Priority、Kernel Mode Only、Real-Time),允许线程根据行为迁移。优先级在带内随时间衰减以防止饥饿,系统支持策略如 FIFO、Round-Robin,以及针对音频/ML 任务的时间约束实时策略。

对于 Apple Silicon,调度针对非对称多处理 (AMP) 进行优化,其中线程通过 Grand Central Dispatch (GCD) 根据服务质量 (QoS) 级别进行分派。QoS 确定核心资格,没有直接 API 用于手动核心分配:

  • QoS 级别:从 9(最低,后台)到 33(最高,用户交互)。低 QoS (9) 线程限制在 E-cores;更高 QoS 线程可以使用 P- 和 E-cores。
  • 核心分配
  • 线程被排队并批量分配到核心集群(2-4 个相同类型核心的组,以统一频率运行)。
  • 在 M1 上:最多 4 个高 QoS 线程优先 P-cluster;5-8 个溢出到 E-cluster。
  • 在 M1 Pro/Max 上:前 4 个到 P0(4 个 P-cores),5-8 个到 P1(4 个 P-cores),溢出到 E-cluster(2 个 E-cores)。
  • 在 M1 Ultra 上:四个 P-cluster 顺序加载,然后是 E-cluster。
  • 后台任务(例如,Time Machine、Spotlight)仅在 E-cores 上运行,频率降低(M1 上约 1 GHz,在 Pro/Max 上可调整以实现功耗均衡)。
  • 动态调整:GCD 动态分发任务,高 QoS 优先 P-cores,但在负载下招募 E-cores。实时线程指定周期分数(例如,3000/7000 周期),如果计算绑定则可能被降级。Mach 中的 Voucher 对象确保跨 IPC 的优先级继承。

在游戏和 HPC 中,开发者通过 OpenMP 调整 CPU 并行性或 Metal Performance Shaders (MPS) 用于 GPU,组织作业以最大化 P-core 使用,同时 E-cores 处理轻任务。 虚拟机(例如,在 Parallels 中)运行高 QoS 线程,但遵循主机调度规则。

挑战包括中等负载场景,其中线程迁移到 E-cores,导致 slowdowns(例如,在 DAW 如 Logic Pro 中),以及有限控制——工具如 taskpolicy -c background 强制 E-core 执行,但无法覆盖低 QoS 限制。

流程图-like 逻辑(来自草案):从 QoS 分配开始 → 队列分离(低 vs. 高) → 批量到集群 → 根据集群负载设置频率。

频率和功耗控制 (DVFS 和管理)

Apple Silicon 采用动态电压和频率缩放 (DVFS) 来实时调整核心电压/频率,在满足性能需求的同时最小化功耗。这是内核管理的,除了功耗模式(Automatic、Low Power)之外,没有用户暴露的控制。

  • 频率缩放
  • 按集群:集群中的所有核心以相同频率运行,根据 QoS 和负载缩放。
  • E-cores:单低 QoS 线程约 1 GHz(例如,在 M1 Pro 上);多线程或高 QoS 溢出时高达最大值 (2-2.85 GHz)。
  • P-cores:高 QoS 接近最大 (3-4.4 GHz);在 Low Power 模式下降低(例如,M4 Pro 降到 3.624 GHz 用于 FP 测试,2.616 GHz 用于 NEON >5 线程)。
  • GPU:独立缩放 (1.27-1.47 GHz),在某些模式下不受 CPU DVFS 影响(例如,M3 Pro Low Power 显示无 GPU 变化)。
  • 功耗管理
  • Low Power 模式:限制总 CPU 功耗(M4 Pro 上约 14W. M3 Pro 上 <10W)以限制热量/风扇使用。降低 P-core 频率/能量(例如,M3 Pro NEON:每线程 6.7 KJ → 3.6 KJ;M4 Pro FP:每线程 1,300 mW → 1,100 mW)。E-core 频率无变化,但 GPU 降到 1/3 频率。
  • Automatic 模式:更高频率/功耗(例如,M4 Pro NEON:3,000 mW/P-thread,280 mW/E-thread;7+ 线程总 >32W. 。
  • 测量:使用 powermetrics 获取实时数据。效率在 GPU-MPS 上达到 >200 GFLOPS/W. CPU 约 0.25 TFLOPS/W。
  • DVFS 机制:根据工作负载调整(例如,空闲/低负载:降频;高负载:升频)。统一 SoC 启用特定域缩放 (CPU/GPU/内存),尽管细节是专有的。在 HPC 中,DVFS 有助于能量效率,但限制 GPU 上的 FP64。

比较:

  • E-cores 在轻任务上功耗胜出(例如,两个 E-cores 在最大频率下超越一个 P-core,同时使用更少功耗)。
  • Low Power vs. Automatic:CPU 任务上 30-50% 能量节省,但在持续负载下可能节流。

总体而言,macOS 将 QoS 驱动的调度与 DVFS 集成,确保最佳电池寿命/性能,尽管开发者必须针对异构核心进行剖析。

发表评论

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 知差(chai)网 🐾 DeepracticeX 社区 🐾 老薛主机 🐾 智柴论坛 🐾