一、基本概念
1.1 算法定位
完全公平调度(Completely Fair Scheduler,CFS)是Linux内核中用于进程调度的核心算法,其核心目标是实现所有进程公平分享CPU资源。以下是其核心机制和技术细节:
1.2 设计目标
完全公平调度(CFS) 是Linux内核(2.6.23+)默认的进程调度算法,旨在实现以下目标:
-
公平性:所有可运行进程公平共享CPU时间
-
低延迟:快速响应交互式任务
-
高效性:避免传统时间片轮转的O(n)复杂度
二、基本原理
2.1 公平性实现
-
公平性设计 CFS通过虚拟运行时间(vruntime)实现公平性,每个进程的vruntime计算方式为:
vruntime = 实际运行时间 × 1024 / 进程权重
-
进程权重:由进程的nice值决定,nice值越小(优先级越高),权重越大(
prio_to_weight
数组转换) -
实际运行时间:进程实际占用CPU的时间,由调度周期和权重比例分配
-
-
红黑树调度队列 CFS使用红黑树(自平衡二叉搜索树)存储可运行进程,以vruntime为键值,每次选择最左侧节点(vruntime最小的进程)运行,时间复杂度为
O(log n)
三、核心机制
3.1 时间管理策略
-
调度周期与粒度
-
调度周期:默认20ms,保证所有进程至少运行一次
-
最小调度粒度:默认4ms,防止频繁切换进程
-
动态调整:当进程过多时,调度周期调整为
最小粒度 × 进程数
,确保每个进程至少运行最小粒度时间
-
-
优先级与权重映射
-
nice值范围:-20(最高优先级)到19(最低优先级)
-
权重表&#
-