为什么需要CFS?

在CFS出现之前,Linux使用O(1)调度器,基于动态优先级和时间片轮转。这种设计需要启发式判断进程的交互性,算法复杂且效果不佳。CFS的设计者Ingo Molnár另辟蹊径:既然目标是公平,那就直接模拟一个理想多任务处理器。

虚拟运行时间:公平的核心度量

CFS为每个维护一个vruntime,表示该进程在虚拟时钟上运行的时长。低优先级的进程vruntime增长更快,从而更快被抢占;高优先级进程增长更慢,获得更多实际CPU时间。所有进程的vruntime趋向于相等,实现数学意义上的完全公平。

红黑树:高效选择进程

CFS使用红黑树组织所有可运行进程,左侧节点始终是vruntime最小的进程。每次调度只需取最左侧节点,时间复杂度O(logN)。基于红黑树的特性,CFS的调度延迟和吞吐量在现代NUMA系统中表现优异。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部