引言
进程调度是操作系统的核心功能之一,它决定了哪个进程在什么时候获得CPU资源。Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS)自2.6.23版本引入以来,一直是桌面和服务器场景的主力调度器。
CFS的核心理念是"公平"——它不提供时间片的概念,而是通过虚拟运行时间(vruntime)来精确追踪每个进程的CPU使用量,确保所有可运行进程都能公平地分享CPU资源。
一、CFS设计哲学
1.1 从O(1)调度器到CFS的演进
在CFS之前,Linux使用O(1)调度器,它基于运行队列和时间片分配,实现了O(1)时间复杂度的调度决策,但存在交互式进程响应延迟预测不准确、公平性不足等问题。
CFS采用了一种全新的思路:不再维护固定时间片,而是让每个进程的虚拟运行时间尽可能相等。当某个进程的vruntime小于其他进程时,它就获得了运行的权利。
1.2 红黑树数据结构
CFS使用红黑树来组织可运行进程,以vruntime作为排序键。红黑树支持O(log n)的插入、删除和查找最左节点操作。最左节点vruntime最小的进程就是下一个被调度的目标。
二、虚拟运行时间机制
2.1 vruntime的计算
虚拟运行时间是CFS公平性的基石,其计算公式为:
delta_exec = now - curr-

发表评论 取消回复