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架构特有的调度类

重点问题

  • Scheduler并不了解SoC的Power模块信息,2014年的提交”sched: Add a new SD_SHARE_POWERDOMAIN for sched_domain“解决了该问题,增加了Scheduler标记SD_SHARE_POWERDOMAIN,让其关联到Power Domain
  • Schedule子系统的SMP特性:传统上Linux Kernel认为Multi-Cores中每个Core是相同的,尤其是Schedule子系统,其最重要的调度类CFS和RT都是以SMP的方式进行任务调度,而ARM big.LITTLE的出现意味着这种假设需要被打破,并且以一种更加通用的方式实现对big.LITTLE的支持,”ARM: topology: use new cpu_capacity interface“ 和 ”sched: consolidation of cpu_capacity“等提交开始解决这一问题,将每个CPU的Capacity区分对待
  • Schedule子系统与CPUIdle的融合:将Schedule子系统中Idle Class的Idle Task与CPUIdle关联,以达到CPU更高效率的Idle状态来减小能耗,有如下提交来解决融合问题
    • setting the table for integration of cpuidle with the scheduler
    • sched: idle: cpuidle: Check the latency req before idle
    • sched: idle_balance() cleanup and fix
    • basic IPI tracing

  • 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 提交

  • commit, commit, commit, commit, commit, commit, commit, commit, commit, commit, commit, commit

更多有关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

Linux调度新特性EAS相关推荐

  1. linux centos8新特性及安装教程

    下载地址 下载地址: http://mirrors.aliyun.com/centos/8.3.2011/isos/x86_64/ 新特性 CentOS 8 的新特性 DNF 成为了默认的软件包管理器 ...

  2. UCloud基于Linux内核新特性的下一代外网网关设计及相关开源工作

    2019独角兽企业重金招聘Python工程师标准>>> UCloud外网网关是为了承载外网IP.负载均衡等产品的外网出入向流量,当前基于Linux内核的OVS/GRE tunnel/ ...

  3. 《RHEL8新特性》

    RHEL8新特性 2019 年 5 月 7 日红帽(Redhat)公司正式发布了 RHEL8 正式版操作系统,针对混合云 时代重新设计的操作系统,旨在支持从企业数据中心到多个公共云的工作负载和操作. ...

  4. Go 1.18 版本新特性详解!

    导语 | 本文推选自腾讯云开发者社区-[技思广益 · 腾讯技术人原创集]专栏.该专栏是腾讯云开发者社区为腾讯技术人与广泛开发者打造的分享交流窗口.栏目邀约腾讯技术人分享原创的技术积淀,与广泛开发者互启 ...

  5. SQL Server 2019 (15.x) 新特性概要

    2019.11.4 SQL Server 2019发布,趁热打铁了解下2019的新特性.下面整理一些个人感觉重要的或者工作上能用到的新特性,有删减,完整版参考 SQL Server 2019 中的新增 ...

  6. Alibaba Cloud Linux 3 正式发布!新特性来了!

    目录 Alibaba Cloud Linux 历史 Alibaba Cloud Linux 3简介 优势 1.特性继承 2.支持周期 3.升级的内容 4.安全 技术亮点 获取方式 2021年4月28日 ...

  7. 能感知功耗的Linux调度器(EAS)

    译者简介 白嘉庆,西邮陈莉君教授门下研一学生.曾在华为西安研究所任C++开发一职,目前兴趣是学习Linux内核网络安全相关内容. 本文的翻译宋宝华老师指导审阅. 序 2014年Linux内核峰会(Li ...

  8. ubuntu linux的特点,16个新特性,让你爱上Ubuntu 20.04,

    16个新特性,让你爱上Ubuntu 20.04, 如果你已经从Ubuntu 18.04 LTS升级到Ubuntu 20.04 LTS,会发现新操作系统的外观和行为与您以前运行的操作系统有所不同. 本文 ...

  9. Linux Kernel 3.0新特性概览(转)

    上周五,Linus Torvalds终于发布了备受瞩目的新一代Linux操作系统内核.Linux Kernel 3.0经过了七个RC候选版才推出正式版本,上一个版本是5月19日的2.6.39,也是2. ...

  10. linux下软件发布,Linux Kernel 5.12发布下载,附新特性及新功能介绍

    Linus Torvalds在Linux内核邮件列表中宣布正式发布Linux Kernel 5.12版本,已提供linux-5.12.tar.xz/tar.gz下载,以下为你介绍该版本的更改.新特性及 ...

最新文章

  1. 缓冲区和数组的输入输出问题
  2. 在VS.NET中使用clickonce技术开发Winform程序
  3. Tomcat 7 DBCP 配置(MySQL)
  4. .NET Core 2.0使用NLog
  5. 20150318知识小结
  6. Oracle二三事之 12c 可插拔数据库PDB
  7. 地震勘探专业词汇(3)地震波动力学
  8. html垂直线6,HTML的垂直线
  9. python中文分词+词频统计
  10. java实现鼠标宏编程_对键盘鼠标宏处理--按键精灵让我们不要重复工作
  11. 从零开始设计RISC-V处理器——五级流水线之数据通路的设计
  12. Chrome 地址栏 Google 搜索错误处理 隐私设置错误 您的连接不是私密连接
  13. 数据结构之树的相关名字解释
  14. 《C++ Primer 第5版》-11.2关联容器概述-康奈尔笔记
  15. 小说作者推荐:半截白菜合集
  16. 在VC中编程实现按钮的启用(enable)和禁用(disable)
  17. 做设计师要用到的工具软件
  18. DNS解析出现错误故障解决
  19. SMTP判断邮箱是否存在 检查email地址是否真实存在
  20. VIT ①Python based

热门文章

  1. 当前网络存在的安全问题
  2. 获取点击按钮的元素_怎么按顺序自动点击网页所有链接
  3. mysql本地连接1045_MySQL密码正确却无法本地登录-1045
  4. android json字符串转成json对象_【hive】解析JSON格式字符串
  5. 【python】从web抓取信息
  6. CI框架 -- 核心文件 之 Loader.php(加载器)
  7. ie11只能用管理员身份打开解决办法
  8. 三网融合:不给安全营造“盗梦空间”
  9. @QueryParam和@PathParam的区别
  10. 2018-08-31 基于CSS3D视角,实现视差滚动