CFS调度器(Completely Fair Scheduer),顾名思义,即想要实现多任务在同一硬件上能够被完全公平的调度。内核中对“完全公平”的定义如下:
CFS调度器(Completely Fair Scheduer),顾名思义,即想要实现多任务在同一硬件上能够被完全公平的调度。内核中对“完全公平”的定义如下:
task group,即所谓的任务组调度,旨在解决指定的一组任务如何做CPU带宽控制的问题。
为什么需要对一组任务做带宽控制?或者说什么场景需要这种能力?
调度的目的是要解决在有限资源的情况下如何高效分配资源给消费者的问题。内核中需要调度的地方有很多,比如:对CPU而言,消费CPU的进程需要调度;对IO而言,下发的IO包需要调度;对PMU(perf monitor unit)而言,perf event需要调度,等等。可以说,调度无处不在。本文重点介绍进程的调度框架。对于现今流行的SMP多核架构,本文将从单CPU、任务组、整机SMP三个视角来进行拆解,便于理解其背后的设计原理。
PSI全称为Pressure Stall Information,是一种衡量系统负载压力的方法。PSI所要测量的对象包括cpu、memory和io三部分(在近期的内核6.12+中新加入了irqtime),其测量的粒度是cgroup级别的,当cgroup层级为1时,则测量的是整个系统的负载。对于系统的负载,PSI将压力信息输出在/proc/pressure/{cpu,memory,io},而对于cgroup的负载,压力信息则输出到/sys/fs/cgroup/xxx/{cpu,memory,io}.pressure,具体输出格式为: