Linux调度新特性EAS

EnergyAwareScheduling(EAS)使调度器能够预测调度决策对CPU能量消耗的影响,通过依赖于CPU能量模型,在确保性能影响最小的情况下选择能量最优的CPU。此特性由Linaro和ARM开发,经历了从IKS到GTS再到EAS的发展,最终在LinuxKernel5.0版本中正式发布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Energy Aware Scheduling(EAS)

EAS赋予调度器新的功能,使其能预测其调度决策(Task Placement)于CPU的能量消耗带来的影响,即Energy Aware。它依赖于CPU能量模型(Energy Model),以此来实现在确保性能影响最小的情况下为每个任务选择能量最优的CPU的调度决策。该特性主要由Linaro和ARM共同开发,在Linux Kernel 5.0版本正式发布。

事实上EAS的开发过程经过了漫长的讨论和版本变迁,每个阶段的功能实现首先发生在Android Kernel,然后开始逐步引入Linux mainline。而在Linux mainline中经历了漫长的Scheduling和Power Management模块的融合,最终在5.0版本主线接纳。下面对其设计思想、实现以及变迁过程进行梳理。

背景介绍

  • CPUFreq、CPUIdle和Scheduler早期处于各行其政而又功能交叠的状态,如图4所示


图4. Scheduler与CPUFreq和CPUIdle之间的关系(无EAS支持)(图片参考自Linaro官网)

  • Power Management模块(CPUFreq和CPUIdle子系统包含其中)与Schedule子系统之间独立运作且功能上相互影响,如传统的CFS调度策略力求达到Performance最大化和Load Balance,而PM则要求实现能耗最小,两者之间存在矛盾
  • 随着手机等设备的发展和普及,PM需求越来越突出,要求PM必须与Schedule进行配合来工作
  • CPU架构也经历着演变,有Asymmetric Multiprocessing(AMP), Symmetric Multiprocessing(SMP), Bound Multiprocessing(BMP)和Heterogeneous Multiprocessing(HMP),而这本身对Schedule带来了新的挑战,推动传统的调度功能进行修改以最大化CPU能效
  • Linux Kernel主要的调度类CFS为适应SMP调度开发,将所有CPU视为同等进行调度,且对能耗一无所知

发展过程

EAS经历了一下三个发展阶段,主要是ARM为适配其CPU big.LITTLE 架构逐步开发演进而来

  • In Kernel Switcher(IKS):同样称为CPU Migration,在最初ARM提出 big.LITTLE 架构时为了让Linux Kernel支持,在原有的CFS调度基础上加入IKS,根据负载变化决定采用big或者LITTLE的CPU进行调度,其特点同一时间只有big或者LITTLE core可见,而不能big和LITTLE core同时可见,且big和LITTLE cores的数量相同,如图5所示

 

图5. IKS下的Task Placement操作方式(图片参考自Linaro官网)

  • Global Task Scheduling(HMP/GTS):由Linaro开发,主要是改善IKS,其特点是所有CPU可见,不再采用big Little CPU切换,而直接将Task调度到对应的CPU上,如图6所示。该过程本身更轻量,而进程切换过程带来了10%的能耗降低,同时支持了非对称多处理SoC(比如2 Contex-A15 cores + 4 Cortex-A7 cores),当然也能在同一时间让更多CPU运行,达到更高的峰值性能,这部分代码并未进入Linux Kernel主线,只存在于Android源码中
    关于GTS与IKS的详细对比可以进一步阅读:https://www.linaro.org/blog/big-little-software-update/

 

图6. GTS下的Task Placement操作方式(图片参考自Linaro官网)

  • Energy Aware Scheduling(EAS):ARM在2017年发布了 DynamlQ 架构,实现了总共8 cores的big LITTLE组合CPU架构,而Linux Kernel的Schedule和PM也相互融合,随着EAS的到来支持了非对称多处理器架构,CFS不再是视所有CPU对等的SMP架构特有的调度类

重点问题

  • Schedule子系统与CPUFreq的融合:首先需要解决相同的负载在不同频率下看起来不同的问题,或者在相同频率下不同CPU类型(big或者LITTLE)下的负载不同的问题,”sched: Scale-invariant per-entity load-tracking“和”scheduler-driven cpu frequency scaling“带来了”Dynamic voltage and frequency scaling(DVFS)“技术,解决了这一问题
  • 另外,在现有的代码中做修改,需要保证Schedule子系统,CPUFreq,CPUIdle以及PM等各个模块已有的功能不被破坏或影响,且相关的改动涉及的领域众多,需要经过多次的讨论,以及社区各个模块Maintainer以及开发这的Review以及测试,最终代码合入主线,这需要经历漫长的过程

解决了这些问题加入EAS后模块视图如图7所示,实际的决策过程不再由CPUFreq和CPUIdle等模块发出,而是将由Scheduler作出决策,而CPUFreq和CPUIdle分别提供信息让Scheduler知道CPU的Power状态,并根据Scheduler的决策实际控制CPU运行状态。

 

图7. Scheduler与CPUFreq和CPUIdle之间的关系(EAS支持之后)(图片参考自Linaro官网)

Kernel 提交

更多有关EAS的讨论信息可以查看链接内容:https://www.linaro.org/blog/summary-energy-aware-scheduling-workshop-linux-kernel-summit-2014/

EAS的设计思想也可以参考2014年由Nicolas Pitre在lwn发布的文章Teaching the scheduler about power management 以及 Energy-aware scheduling on asymmetric systems

Kernel Doc中的介绍:https://www.kernel.org/doc/html/latest/scheduler/sched-energy.html#background-and-terminology

内容概要:本文档深入介绍ARM Energy-Aware Scheduling(EAS)的相关概念和技术架构。它详细讲述了EAS如何通过对任务放置进行优化来提升能量利用效率。EAS通过构建一个平台通用的能量消耗模型指导调度决策,特别适合用于big.LITTLE系统。此外还提供了对EAS各版本变化、具体实现机制如容量感知、能量感知等细节解释以及相关调试工具、验证测试的说明。文档面向开发者群体阐述了从理论到应用的一系列关键点并涵盖了用户空间整合所需注意事项和支持的新电源管理提示。EAS能够显著提高设备在低中度负载下能源利用率,确保高性能同时实现节能。 适合人群:具备ARM架构和Linux内核基本认知的软件工程师,尤其是那些参与移动端产品调优和性能增强工作的专业人员。 使用场景及目标:适用于正在为基于ARM的大规模小异质架构SoC平台开发产品的工程团队,在此类平台上引入智能的任务调度机制有助于降低能耗并改善用户体验;同时对于想要深入了解Linux内核调度器行为的研究人员也很有价值。 其他说明:文档包含了丰富的实例案例研究和代码片段辅助理解,并推荐了若干第三方分析工具以支持进一步的学习探索。由于EAS的发展快速迭代,因此文中提到的具体命令路径可能会随着新发布的版本而有所更改,请注意查阅官方最新资料以获得最准确的操作指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值