随着移动设备的普及,用户对设备的操作体验有了越来越高的要求。能够实现一些硬性操作已经是最基本的条件了,是否可以提供更流畅的操作体验、更让人舒适的交互方式等,逐渐变成了设备之间“攀比”的方式,想要满足这些需求,首先需要明确一个合适、高效的 CPU 调度,再去优化能耗。
为了保证系统的性能和响应时间,在不同的场景下,如何实现多任务的并发执行、怎样选择不同的调度算法和策略呢?
01 ESA 调度器缘起
Linux 内核一直使用完全公平调度器 CFS ( Completely Fair Scheduler )作为默认调度器,其使用的 PELT ( per entity load tracking )跟踪任务负载,更适合 CPU 高吞吐量场景,而对于现在流行的手机或者消费电子等对功耗敏感的设备,则存在明显的局限性,比如:
CFS 主要是为了服务器性能优先场景而设计的,主要目标是最大限度地提高系统的吞吐量,CFS 调度的目标是所有任务都平均分配到系统所有可用的 CPU 上。
CFS 主要针对 SMP 系统,对于非 SMP 系统支持不足,比如说 arm.big.little 架构以及 intel PE 核架构。
没有充分利用各个核的功耗、性能、频率差异来达到性能和功耗的最优平衡。
EAS由来
那如何解决 CFS 调度器的局限性问题呢?
ARM 和 Linaro