为什么需要CFS?
在CFS出现之前,Linux使用O(1)调度器,基于动态优先级和时间片轮转。这种设计需要启发式判断进程的交互性,算法复杂且效果不佳。CFS的设计者Ingo Molnár另辟蹊径:既然目标是公平,那就直接模拟一个理想多任务处理器。
虚拟运行时间:公平的核心度量
CFS为每个维护一个vruntime,表示该进程在虚拟时钟上运行的时长。低优先级的进程vruntime增长更快,从而更快被抢占;高优先级进程增长更慢,获得更多实际CPU时间。所有进程的vruntime趋向于相等,实现数学意义上的完全公平。
红黑树:高效选择进程
CFS使用红黑树组织所有可运行进程,左侧节点始终是vruntime最小的进程。每次调度只需取最左侧节点,时间复杂度O(logN)。基于红黑树的特性,CFS的调度延迟和吞吐量在现代NUMA系统中表现优异。

发表评论 取消回复