进程/线程调度器在大小核心CPU架构中的设计与比较

关键点

  • Android:可能使用能量感知调度(EAS),结合SchedTune机制,将高优先级任务分配到大核,低优先级任务分配到小核,以优化性能和能耗。
  • Windows:Windows 11似乎通过英特尔的Thread Director硬件反馈优化混合架构调度,动态选择性能核或效率核。
  • Linux:可能采用EAS和容量感知调度,根据任务负载和核心容量分配任务,平衡性能与能效。
  • macOS/iOS:可能基于服务质量(QoS)机制,高QoS任务优先使用性能核,低QoS任务分配到效率核。
  • 复杂性说明:各操作系统调度器的具体实现细节因其专有性质或开源社区的多样性而有所不同,公开信息可能有限。

Android调度器

Android的调度器可能利用能量感知调度(EAS),通过跟踪每个任务的负载来决定将其分配到大核(高性能)还是小核(节能)。SchedTune机制可能允许系统提升重要任务(如前台应用)的优先级,使其更倾向于运行在大核上,从而提升用户体验,同时将后台任务分配到小核以节省电量。

Windows调度器

Windows 11的调度器似乎针对混合架构(如英特尔Alder Lake的性能核和效率核)进行了优化,可能通过Thread Director硬件技术获取实时工作负载信息。这可能帮助调度器动态决定将线程分配到性能核(用于高负载任务)或效率核(用于轻量任务),以实现性能和能耗的平衡。Windows 10可能也支持混合架构,但优化程度可能不如Windows 11。

Linux调度器

Linux内核可能通过EAS和容量感知调度支持大小核架构。EAS可能使用能量模型预测不同核心的任务分配能耗,选择能耗最低的分配方案。容量感知调度可能根据核心的性能容量(大核容量高于小核)分配任务,确保高负载任务运行在大核上,低负载任务运行在小核上,以优化性能和能效。

macOS/iOS调度器

macOS和iOS可能使用基于QoS的调度机制,开发者为线程分配不同的QoS级别。高QoS线程(如用户交互任务)可能优先运行在性能核上,而低QoS线程(如后台任务)可能分配到效率核。调度器可能根据线程数量和优先级动态调整核心频率,以在性能和能耗间取得平衡。

比较概述

所有这些操作系统似乎都意识到大小核架构的异构特性,并努力将任务分配到最适合的核心上,以平衡性能和能耗。Android和Linux可能依赖能量模型,Windows可能利用硬件反馈,而macOS/iOS可能通过QoS提供更高层次的控制。以下部分将详细探讨这些调度器的设计和比较。


详细调研报告:进程/线程调度器在大小核心CPU架构中的设计与比较

以下是对Android、Windows、Linux、macOS/iOS的进程/线程调度器如何应对大小核心(大核与小核)CPU架构的详细调研,并对它们的实现机制进行比较。调研基于公开信息,涵盖调度器设计、任务分配策略、能耗管理、开发者接口及独特特性。

Android调度器设计

Android的调度器在大小核架构(如ARM big.LITTLE)中主要依赖能量感知调度(EAS),这是由ARM和Linaro开发的一种调度机制,旨在优化性能和能耗。EAS通过逐实体负载跟踪(PELT)监控每个任务的计算需求,根据任务负载决定将其分配到大核(高性能,如Cortex-A57)还是小核(节能,如Cortex-A53)。例如,在Nexus 5X. 四颗A53小核和两颗A57大核)上,Android的目标是将用户不关心的后台任务分配到A53小核,而将性能敏感的前台任务分配到A57大核。

Android还引入了SchedTune子系统,这是一个控制组控制器,通过schedtune.boost旋钮调整任务的调度优先级。例如,顶级应用(用户当前交互的应用)可能获得10%的提升,使其看起来对调度器「更重」,从而优先分配到大核。SchedTune不影响任务的调度优先级,而是影响CPU选择和运行速度。此外,Android使用窗口辅助负载跟踪(WALT)替代PELT,WALT通过跟踪最近时间窗口的CPU使用情况,快速响应任务行为变化,特别适合动态调整CPU频率。

调度策略

  • 顶级应用:采用「分散」策略,分配到大核,10%提升。
  • 前台任务:分散策略,无提升。
  • 后台任务:采用「集中」策略,限制在小核上,通常通过cpuset约束到两颗较慢的CPU。
  • 内核线程/系统进程:集中策略,优先小核。

成果:这些优化在Pixel手机上实现了与高性能移动平台(QHMP)相当或更好的性能,已合并到Android 3.18和4.4内核树中,并在Pixel、Acer R13 Chromebook等设备上启用。

Windows调度器设计

Windows 11的调度器针对混合架构(如英特尔Alder Lake的性能核和效率核,或ARM big.LITTLE)进行了优化,核心技术是英特尔Thread Director,这是一种内置于Alder Lake处理器的微控制器,提供实时工作负载反馈。Thread Director帮助调度器决定将线程分配到性能核(P核,适合复杂任务如向量指令)还是效率核(E核,适合轻量任务如标量指令或后台进程)。例如,Windows可能将后台任务分配到小核,空闲时所有任务都在小核上,而用户启动的任务优先分配到大核以快速完成。

Windows 10也支持混合架构(如英特尔Lakefield的Sunny Cove大核和Tremont小核),但优化程度不如Windows 11。Windows 10的调度器能够识别混合拓扑并根据工作负载分类分配任务,但缺乏Thread Director的硬件辅助。Windows还支持CPU集,允许进程独占一组处理器,防止其他进程或系统中断干扰,类似于低技术虚拟机。

调度策略

  • 复杂工作负载:分配到P核。
  • 轻量/后台任务:分配到E核。
  • 动态调整:基于Thread Director反馈实时选择最适合的核心。

成果:Windows 11在Lakefield Core i7-L16G7上的测试显示性能显著提升,证明了其对混合架构的优化。

Linux调度器设计

Linux内核通过能量感知调度(EAS)容量感知调度支持大小核架构(如ARM big.LITTLE)。EAS使用能量模型(EM)预测不同CPU分配的能耗,选择总能耗最低的分配方案。例如,大核(如Cortex-A15)通常更耗电,适合高负载任务,而小核(如Cortex-A7)适合低负载任务。但在某些情况下,小任务可能在大核上运行以节省能量(例如,快速完成任务以进入低功耗状态)。EAS需要不对称CPU拓扑、能量模型和Schedutil调速器的支持。

容量感知调度区分CPU的原始容量(最大性能水平,由arch_scale_cpu_capacity()返回)和当前容量(扣除中断处理等损耗后的容量)。调度器使用这些容量值将任务分配到性能足够的核上。例如,Linux 4.20引入了「错配」任务迁移改进,在ARM big.LITTLE系统上将CPU密集型任务迁移到更快的大核上。

调度策略

  • 高负载任务:分配到大核,确保性能。
  • 低负载任务:分配到小核,节省能耗。
  • 动态迁移:根据任务需求和核心容量动态调整。

成果:这些改进提高了Linux在现代ARM SoC上的性能和能效,特别是在高性能大核和低功耗小核的混合系统中。

macOS/iOS调度器设计

macOS和iOS基于相同的XNU内核,针对Apple Silicon(如M1系列)的性能核(P核,Firestorm)和效率核(E核,Icestorm)进行了优化。调度器使用服务质量(QoS)机制,开发者为线程分配QoS级别,决定其调度优先级。低QoS(9级,典型后台任务)线程仅运行在E核上,频率约为1000 MHz(M1)或根据线程数量调整(M1 Pro/Max:单线程1000 MHz,多线程2064 MHz)。高QoS线程可运行在P核或E核上,调度器根据负载动态调整。

在M1芯片上,高QoS用户线程(1-4个)运行在P核(约3 GHz),第5-8个线程溢出到E核(约2 GHz)。在M1 Pro/Max上,前8个高QoS线程可运行在P核(3228 MHz),第9-10个运行在E核(2064 MHz)。频率按集群设置,同一集群内核心频率一致。特殊情况包括启动过程(单E核)和macOS更新准备(单P核上5个线程,100% CPU占用30分钟)。

调度策略

  • 高QoS线程:优先P核,动态溢出到E核。
  • 低QoS线程:限制在E核,频率随线程数调整。
  • 后台任务:如Time Machine、Spotlight,固定低QoS,运行在E核。

成果:macOS和iOS在Apple Silicon上的调度优化确保了高性能用户体验和低能耗后台处理,特别是在M1系列芯片的多样化集群配置中。

比较分析

以下是对四种操作系统调度器在大小核心架构中的设计的详细比较,基于任务分配决策、能耗管理、开发者接口和独特特性。

特性AndroidWindowsLinuxmacOS/iOS
任务分配决策基于任务负载和能量模型,使用PELT或WALT跟踪负载,分配到大核或小核。基于Thread Director硬件反馈,动态选择P核或E核。基于能量模型和核心容量,分配到性能足够的核。基于QoS级别,高QoS优先P核,低QoS限制在E核。
能耗管理EAS预测能耗,SchedTune提升关键任务分配到大核,后台任务限制在小核。Thread Director实时调整,E核用于轻量任务节省能耗。EAS选择最低能耗分配,容量感知调度优化能效。动态调整核心频率,低QoS任务在E核上运行以节省能耗。
开发者接口SchedTune为系统级,开发者间接通过应用优先级影响调度。有限,依赖系统和硬件反馈,CPU集提供一定控制。提供任务亲和性和调度策略调整,需内核级修改。QoS API允许开发者指定线程优先级,直接影响核心分配。
独特特性SchedTune提升机制,WALT快速响应任务变化,针对移动设备优化。Thread Director硬件辅助,优化混合架构如Alder Lake。开源灵活性,支持多种EAS实现,适应不同硬件。与Apple Silicon深度集成,QoS提供高层次控制,频率按集群调整。
公开信息开源,详细文档和代码可查,但Android定制部分需厂商披露。专有,依赖英特尔文档,部分细节不公开。完全开源,文档丰富,社区驱动开发。专有,公开信息有限,依赖开发者文档和社区分析。

任务分配决策

  • Android和Linux:依赖软件驱动的能量模型,EAS通过负载跟踪和能耗预测分配任务,适合通用硬件平台。
  • Windows:硬件辅助的Thread Director提供实时反馈,使调度更动态,特别适合英特尔混合架构。
  • macOS/iOS:QoS提供高层次抽象,开发者直接影响调度决策,优化用户体验。

能耗管理

  • 所有系统都优先将低负载任务分配到小核/E核以节省能耗。
  • Android和Linux的EAS通过能量模型预测能耗,Windows通过硬件反馈实时调整,macOS/iOS通过频率调整和QoS优化能效。

开发者接口

  • macOS/iOS的QoS API为开发者提供最大控制,允许指定线程优先级。
  • Android的SchedTune主要为系统级优化,开发者影响有限。
  • Windows依赖系统和硬件,开发者控制较少。
  • Linux提供灵活的调度策略调整,但需要深入内核知识。

独特特性

  • Android的SchedTune和WALT针对移动设备优化,快速响应用户交互。
  • Windows的Thread Director是硬件与软件协同的典范,增强了混合架构支持。
  • Linux的开源性质允许广泛定制,适应不同硬件。
  • macOS/iOS与Apple Silicon的深度集成确保了高效的调度和能耗管理。

结论

Android、Windows、Linux、macOS/iOS的调度器都针对大小核架构进行了优化,但实现方式各异。Android和Linux依赖能量感知调度,结合负载跟踪和能耗模型,适合通用硬件平台。Windows通过Thread Director硬件反馈实现动态调度,优化了英特尔混合架构。macOS/iOS使用QoS机制,提供开发者控制,深度集成Apple Silicon硬件。选择最佳调度器取决于硬件平台、应用场景和开发者需求。开源系统(Android、Linux)提供透明性和灵活性,而专有系统(Windows、macOS/iOS)在特定硬件上表现出色。

关键引文

发表评论

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