当前 Linux 内核(5.x 及以上版本)默认的进程调度器是 **CFS(Completely Fair Scheduler,完全公平调度器)**,而非传统的 **Round Robin(RR,轮询调度)**。
---
### **1. CFS:完全公平调度器**
#### **(1) 基本设计**
- **目标**:通过动态计算进程的**虚拟运行时间(vruntime)**,实现所有任务对 CPU 时间的公平分配。
- **核心机制**:
- **红黑树排序**:所有可运行进程按`vruntime`排序,选择`vruntime`最小的进程执行。
- **时间片动态调整**:优先级高的任务实际获得更多 CPU 时间,但通过`vruntime`的权重计算,保证全局公平性。
- **无固定时间片**:与传统 RR 的固定时间片不同,CFS 的时间片长度由进程权重和系统负载动态决定。
#### **(2) 优势**
- **公平性**:所有任务(无论优先级)按比例共享 CPU,避免饥饿问题。
- **低延迟**:适合交互式任务(如 GUI 应用),响应时间更短。
- **动态适应**:自动适配多核、多任务场景,优化吞吐量和延迟。
---
### **2. Round Robin(RR)的角色**
#### **(1) RR 的定位**
- **实时调度策略**:RR 属于 Linux 的**实时调度策略**之一(`SCHED_RR`),需显式配置,**并非默认调度器**。
- **使用场景**:适用于需要严格时间保障的实时任务(如音视频处理、工业控制)。
- **规则**:
- 相同优先级的任务按固定时间片轮转执行。
- 可被更高优先级的实时任务(`SCHED_FIFO`)抢占。
#### **(2) 与 CFS 的区别**
| **特性** | CFS(默认) | Round Robin(SCHED_RR) |
|----------------|--------------------------------|----------------------------------|
| **目标** | 公平性 + 吞吐量 | 实时性 + 确定性 |
| **时间片** | 动态调整 | 固定时间片 |
| **适用任务** | 普通进程(非实时) | 实时进程(需显式配置) |
| **调度策略** | `SCHED_NORMAL`(默认) | `SCHED_RR`(需手动设置) |
---
### **3. 为什么 Linux 选择 CFS 而非 RR?**
#### **(1) 历史背景**
- **O(1) 调度器**:2003 年前,Linux 使用基于优先级和时间片轮转的 O(1) 调度器,但其公平性和交互性较差。
- **CFS 的引入**:2007 年(内核 2.6.23),CFS 取代 O(1),成为默认调度器,解决了公平性和延迟问题。
#### **(2) 技术原因**
- **公平性需求**:服务器和桌面环境需同时处理交互任务和后台任务,RR 的固定时间片无法灵活适配。
- **多核扩展性**:CFS 的红黑树结构和权重机制更适应多核 CPU 的负载均衡。
- **混合负载优化**:CFS 能自动平衡 CPU 密集型(长任务)和 I/O 密集型(短任务)的调度需求。
---
### **4. 如何查看当前调度策略?**
#### **(1) 查看进程调度策略**
```bash
chrt -p <PID>
```
- 输出示例:
```plaintext
pid 1234 的当前调度策略:SCHED_OTHER(即 CFS)
pid 5678 的当前调度策略:SCHED_RR
```
#### **(2) 修改调度策略**
- **设置为 RR**(需 root 权限):
```bash
chrt -r -p <优先级> <PID>
```
---
### **5. 总结**
- **默认调度器**:Linux 普通进程默认使用 **CFS**,目标是公平性和高吞吐量。
- **Round Robin(RR)**:属于实时调度策略(`SCHED_RR`),需手动配置,适用于实时性要求高的任务。
- **选择依据**:
- 普通任务无需干预,CFS 自动优化。
- 实时任务(如嵌入式系统)可配置为 `SCHED_RR` 或 `SCHED_FIFO`。
---
通过 CFS,Linux 在绝大多数场景下实现了高效、公平的 CPU 资源分配,成为现代操作系统的核心优势之一。
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传