【Linux】进程调度器

下面我给你一个 清晰、准确、面向最新 Linux 内核(5.x~6.x)的解释

你的三个问题分别是:

  1. 最新的 Linux 内核是否仍然用 CFS 调度普通进程?
  2. 是不是一个进程指定一种调度器?
  3. CFS 与实时调度器(RT scheduler)的关系是什么?

我逐条解释。


1. 最新 Linux 内核是否仍然使用 CFS?

是的。

在 Linux 6.x 内核中(包括最新的 6.10 LTS),Linux 仍然采用:

  • **CFS(Completely Fair Scheduler)**作为 普通任务(normal tasks) 的主调度器
    对应调度策略:SCHED_NORMAL(SCHED_OTHER)SCHED_BATCH

CFS 仍然是桌面 Linux、服务器 Linux 中绝大多数进程使用的调度器。

✔ CFS = 默认调度器,一直在维护和优化


2. 一个进程是否"指定"一种调度器?

不是直接指定调度器,而是指定调度策略(policy)。

调度策略由内核映射到具体调度器。

用户态只能设置:

  • SCHED_OTHER / SCHED_NORMAL
  • SCHED_BATCH
  • SCHED_IDLE
  • SCHED_FIFO
  • SCHED_RR
  • (新)SCHED_DEADLINE

policy → 内核选定对应的调度器

调度策略(policy) 使用的调度器 说明
SCHED_NORMAL(SCHED_OTHER) CFS 默认普通进程
SCHED_BATCH CFS 批处理,权重较低
SCHED_IDLE CFS idle 调度类 极低优先级
SCHED_FIFO RT 调度器 实时
SCHED_RR RT 调度器 实时(轮转)
SCHED_DEADLINE Deadline 调度器 最强实时、按调度参数保证

🔹 所以,进程并不直接选择 CFS 或 RT 调度器。

🔹 它选择 policy,policy 决定属于哪个调度器类(sched_class)。


3. CFS 与实时调度器(RT scheduler)的关系是什么?

Linux 调度器内部不是一个调度器,而是一个 调度器类链表(scheduler class)

复制代码
stop_sched_class
deadline_sched_class
rt_sched_class
fair_sched_class   <-- CFS
idle_sched_class

调度决策遵循以下优先级:

stop > deadline > rt > fair(CFS) > idle

所以关系是:

  • 最高优先级:实时/硬实时(SCHED_DEADLINE / SCHED_FIFO / SCHED_RR)
  • 其次才是:普通任务(CFS)
  • 最后是:空闲级别(SCHED_IDLE)

简化理解:

复制代码
优先运行 RT > CFS

RT 任务一定会抢占 CFS 任务

CFS 任务永远不阻塞 RT 任务

Deadline 调度比 RT 更强,是硬实时


🔥 最简单的总结(必记)

1. 最新 Linux 内核仍然使用 CFS 作为主要 CPU 调度器

2. 进程不是直接选调度器,而是选调度策略(policy)

3. Linux 有多种调度器并存,按优先级排:

复制代码
Deadline > RT(FIFO/RR) > CFS > Idle

如果你需要,我还能继续解释:

  • 如何在 Linux 中把进程切换成 RT 任务(例子:chrt)
  • CFS 的 vruntime 是怎么确保公平的
  • RT 调度器如何避免任务饿死
  • Deadline 调度器的参数 runtime/period/deadline

你接下来想深入哪个?

相关推荐
Avan_菜菜3 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
Sokach101512 小时前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
SelectDB1 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
AlfredZhao1 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3103 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
A小辣椒4 天前
TShark:Wireshark CLI 功能
linux
A小辣椒5 天前
TShark:基础知识
linux
AlfredZhao5 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci