0%

Linux CFS

Linux-CFS调度器

CFS调度器是在2.6.23内核中开始引入的调度器。事实上,在(我写这篇文章时)最新的5.17.3内核上,你仍然可以看到他的身影。

虚拟运行时间

虚拟运行时间是CFS引入的一个概念,与实际的运行时间成正比,与权重成反比。

权重

进程的虚拟运行时间与权重成反比,实际上,这个权重是由进程的优先级来决定的,在Linux中为nice值。进程的优先级越高,则权重越高,进程的虚拟运行时间就越小。

调度

那么进程的虚拟运行时间是怎么影响到进程执行的顺序的呢?CFS调度使用了红黑树,键值为虚拟运行时间,每次从红黑树中取值最小的进程来运行(树中的最左子节点)。

例如,如果两个进程的运行时间相同,那么他们的运行优先级就是由他们的静态优先级nice值来决定的。如果进程A的运行时间大于进程B的运行时间(A虚拟运行时间增加,动态优先级降低),那么通过增加进程A的静态优先级(A增加静态优先级后,平衡掉增加的虚拟运行时间),这两个进程所可以获得的运行时间还是有可能接近的。CFS就是以这样一种方式来保证了公平性。