CPU调度——EAS调度器

Linux内核的CFS调度器和SMP负载均衡的缺点:

1.主要是为了服务器性能优先场景而考虑的,它们希望把任务都平均分配到系统所有可用的CPU上,最大限度地提高系统的吞吐量,这是主要为服务器设计的,没有考虑到系统的耗电问题,显然这不适合手机或者消费电子,对功耗敏感的设备中。
2.主要针对SMP系统,对于非SMP系统支持不足,比如说arm.big.little架构。
3.没有充分利用各个核的功耗,性能,频率差异来达到性能和功耗的最优平衡。

最早,针对arm big.litthle,高通提出了HMP调度器,直接在大小cluster上全部切换。

与此同时,ARM和Linaro提出了EAS调度器,希望对现有的以性能优先的调度策略、调度器、CPUidle和CPUFreq模块的相对独立的现状做出改变,让它们可以紧密工作在一起,从而进一步优化功耗和效率,这个改变叫作Energy Aware Scheduling,简称EAS。EAS调度器的设计目标是在保证系统性能的前提下尽可能地降低功能。

目前,高通的产品线,也全面采用EAS调度器。

EAS如何运作?

EAS引入了使用能量模型,EAS试图统一内核的三个不同核心部分,它们之前都相互独立,能量模型有助于统一它们,皆可能节省功耗提高性能。

1.Linux调度程序(CFS):调度程序统一3个模块个部分,因为将它们一起计算可以使它们尽可能高效。
2.Linux cpuidle :CPUIdle尝试决定CPU何时进入空闲模式
3.Linux cpufreq :CPUFreq尝试决定何时加速或降低CPU。

不仅如此,EAS还将进程/程序/应用分为四个cgroup,即 top-app, system-background, foreground, and background,将要处理的任务放入其中一个类别中,然后为该类别提供CPU power,并将工作委派给不同的CPU核心。

top-app是完成的最高优先级,其次是forground,background和system-background gorup. backgound group与system-background group具有相同的优先级,但system-background group通常也可以访问更多的核心。实际上,Energy Aware Scheduling正在将Linux内核的核心部分整合到一个进程中。

唤醒设备时,EAS将选择处于最浅空闲状态的核心,从而最大限度地减少唤醒设备所需的能量。这有助于降低使用设备所需的功率,因为​​如果不需要,它不会唤醒big cluster

负载跟踪也是EAS的一个非常重要的部分,有两种选择。“Per-Entity Load Tracking”(PELT)通常用于负载跟踪,然后使用该信息来确定频率以及如何在CPU中委派任务。也可以使用“Window-Assisted Load Tracking”(WALT

许多ROM将使用WALT或PELT发布两个版本的内核,因此由用户决定。WALT更突发,CPU频率高峰,而PELT试图保持更一致。负载跟踪器实际上不会影响CPU频率,它只是告诉系统CPU使用率是多少。较高的CPU使用率需要较高的频率,因此PELT的一致特性是它会导致CPU频率缓慢上升或下降。

PELT确实倾向于偏向更高的CPU负载报告,因此它可以以更高的电池成本提供更高的性能。然而,现在没有人能够真正说出哪种负载跟踪系统更好,因为两种负载跟踪方法都在不断修补和改进。

无论哪种方式,很明显,无论使用何种负载跟踪方法,效率都会提高。除了处理处理器上的任务,还要分析任务并估算运行任务所需的能量。

这个聪明的任务放置意味着任务以更有效的方式完成,同时也使系统整体更快。EAS旨在以最小的功耗来获得最流畅的UI。这是其他外部组件(如schedtune)发挥作用的地方。

Schedtune在每个cgroup中由两个可调参数定义,以确保更好地控制要完成的任务。它不仅可以控制多个CPU上任务的分散,还可以控制感知负载,以确保更快地完成对时间敏感的任务。这样,用户所使用的前台应用程序和服务将不会减慢并导致不必要的性能问题。

 

参考:https://zhuanlan.zhihu.com/p/60030839

 

posted on 2020-04-12 16:26  Hello-World3  阅读(3885)  评论(0编辑  收藏  举报

导航