操作系统调度
单核调度策略
经典调度
先到先得 / 先进先出(FIFO)
- 缺点:
- 长短任务混合的场景对短任务不友好
如果长任务先到,那么所有短任务都等待很久 - 对I/O密集型任务不友好
I/O时会放弃CPU重新排队
- 长短任务混合的场景对短任务不友好
最短任务优先(SJF shortest job first)
- 缺点:
- 必须预知任务的运行时间
- 迟到的短任务无法优先
最短完成时间任务优先(STCF)
- 抢占式的SJF
时间片轮转(RR Round Robin)
优先级调度
多核调度策略
能耗感知调度(EAS, Energy Aware Scheduling)
以ARM的DynamIQ架构为例,其架构包含大核和小核两种计算单元
Linux的能耗感知调度
- linux当前使用完全公平调度器(Completely Fair Scheduler, CFS)
- ESA需要使用当前处理器架构的功耗模型,包括:
- 容量
- 当前CPU在当前频率下的处理能力
- 每个任务会占用一定的容量
- 功率
- 当前CPU在当前功率下的功率,单位是毫瓦(mW)
- 容量
- 系统的CPU核心会被划分为多个性能域(Performance Domain, PD)
- 一个能耗模型中有多个性能操作点(Operating Performance Point, OPP)
- CPU的容量和功率的对应关系
- 同一个性能域的CPU具有同样的性能操作点(大核一样、小核一样)
当任务到来时:
- 任务的大小为x
- 看大核和小核的OPP中容量能够满足x的点对应的功耗,选择较小的CPU
NOTE: EAS使用于中、低负载场景。
当任一CPU核心的当前负载超过80%,Linux会开启负载均衡并关闭EAS。