【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

你接下来想深入哪个?

相关推荐
聆风吟º8 小时前
CANN开源项目深度实践:基于amct-toolkit实现自动化模型量化与精度保障策略
运维·开源·自动化·cann
Coder个人博客8 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
较劲男子汉11 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
Doro再努力11 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp11 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎11 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Doro再努力11 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene11 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
不像程序员的程序媛11 小时前
Nginx日志切分
服务器·前端·nginx
忧郁的橙子.11 小时前
02-本地部署Ollama、Python
linux·运维·服务器