4.1 调度器概述
- 核心功能:决定哪个进程获得CPU使用权
- 设计目标:
- 最大化CPU利用率
- 提供用户交互响应性
- 保证公平性
- 调度策略:
- 实时进程:SCHED_FIFO, SCHED_RR
- 普通进程:SCHED_NORMAL(CFS)
4.2 调度器演进
版本 | 调度器类型 | 主要特点 |
---|---|---|
2.4 | O(n) | 全局队列,遍历选择 |
2.6 | O(1) | 优先级数组,时间片计算 |
2.6.23+ | CFS | 完全公平,红黑树实现 |
4.3 CFS调度器
struct sched_entity {
struct load_weight load; // 进程权重
struct rb_node run_node; // 红黑树节点
u64 vruntime; // 虚拟运行时间
};
-
核心机制:
- 虚拟时钟(vruntime)计算
- 红黑树组织可运行进程
- 最小vruntime优先调度
-
权重计算:
time\_slice = \frac{weight}{total\_weight} \times scheduler\_period
4.4 调度相关系统调用
sched_setscheduler()
- 设置调度策略sched_yield()
- 主动让出CPUnice()
- 调整普通进程优先级(-20~19)
4.5 实时调度
-
两种策略:
- SCHED_FIFO:先到先服务,无时间片限制
- SCHED_RR:轮转调度,有时间片限制
-
优先级范围:1(最低)~99(最高)
4.6 多核负载均衡
- 调度域(Sched Domain):
- 核心级域
- 套接字级域
- NUMA节点域
- 负载均衡触发:
- 周期性均衡(tick_balance)
- 空闲CPU拉取任务
4.7 实验:观察调度行为
# 查看进程调度策略
chrt -p <pid>
# 实时进程测试
taskset -c 0 chrt -f 99 ./real_time_app