Linux 内核CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )相关的知识,希望对你有一定的参考价值。
文章目录
- 一、CFS 调度器概念 ( 完全公平调度器 )
- 二、CFS 调度器虚拟时钟概念 ( Virtual Runtime )
- 三、进程优先级 ( 调度优先级 | 静态优先级 | 正常优先级 | 实时优先级 )
- 四、调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 )
一、CFS 调度器概念 ( 完全公平调度器 )
CFS 调度器 ( Completely Fair Scheduler ) 是 " 完全公平调度器 " , " 完全公平调度算法 " 对每个 进程 都是 公平 的 ,
" 完全公平调度算法 " 是 基于时间片轮询 的 调度算法 ,
每个进程 都会获得一段 相同的大小的 CPU 时间片 来运行 ;
CFS 调度器 没有 时间片概念 , 该调度器会 公平地 分配 CPU 的使用时间 ;
举例说明 : 如果有 4 4 4 个相同 优先级 的进程运行在 同一个 CPU 上 , 每个进程都会被 公平 分配到 25 % 25\\% 25% 的运行时间 ;
二、CFS 调度器虚拟时钟概念 ( Virtual Runtime )
CFS 调度器 中 , 定义了 一种 " 调度模型 " , 该 模型 为 CFS 执行队列 cfs_rq
中的 每个进程 都设置了 虚拟时钟 Virtual Runtime ;
被设置了 虚拟时钟 的进程 , 执行 n n n 时长后 , 其 虚拟时钟 会增加 n n n 时长 , 其它 没有执行的进程 虚拟时钟 值保持不变 ;
三、进程优先级 ( 调度优先级 | 静态优先级 | 正常优先级 | 实时优先级 )
参考 【Linux 内核】进程管理 - 进程优先级 ② ( prio 调度优先级 | static_prio 静态优先级 | normal_prio 正常优先级 | rt_priority 实时优先级 ) 博客 ,
在 linux-5.6.18\\include\\linux\\sched.h
头文件中 task_struct
" 进程描述符 " 结构体 中定义了 进程优先级字段如下 :
int prio; // 调度优先级
int static_prio; // 静态优先级
int normal_prio; // 正常优先级
unsigned int rt_priority; // 实时优先级
进程优先级 | 限期进程 | 实时进程 | 普通进程 |
---|---|---|---|
prio 调度优先级 | 等于 normal_prio 字段 | 等于 normal_prio 字段 | 等于 normal_prio 字段 |
static_prio 调度优先级 | 字段 值总为 0 0 0 , 没有意义 | 字段 值总为 0 0 0 , 没有意义 | 120 + n i c e \\rm 120 + nice 120+nice , 其数值越小 , 优先级越高 |
normal_prio 正常优先级 | − 1 -1 −1 | 99 − r t _ p r i o r i t y 99 - \\rm rt\\_priority 99−rt_priority | 120 + n i c e \\rm 120 + nice 120+nice , 其数值越小 , 优先级越高 |
rt_priority 实时优先级 | 字段 值总为 0 0 0 , 没有意义 | 字段 值为 1 1 1 ~ 99 99 99 , 其数值越大 , 优先级越高 | 字段 值总为 0 0 0 , 没有意义 |
四、调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 )
在 linux-5.6.18\\include\\linux\\sched.h
头文件中 task_struct
" 进程描述符 " 结构体 中定义的 sched_class
字段 ,
表示该进程所属的调度类 ;
const struct sched_class *sched_class;
源码地址 : linux-5.6.18\\include\\linux\\sched.h#680
上述可设置的调度类参考 【Linux 内核】调度器 ⑦ ( 调度器类型 | 停机调度类 stop_sched_class | 限期调度类 dl_sched_class | 实时调度类 | 公平调度类 | 空闲调度类 ) 博客 , 在 Linux 内核中 , sched_class
调度器 分为以下
5
5
5 种类型 :
- stop_sched_class : 停机调度类 ;
- dl_sched_class : 限期调度类 ;
- rt_sched_class : 实时调度类 ;
- fair_sched_class : 公平调度类 ;
- idle_sched_class : 空闲调度类 ;
调度类 优先级 由高到低排列为 : 停机调度类 > 限期调度类 > 实时调度类 > 公平调度类 > 空闲调度类
以上是关于Linux 内核CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核CFS 调度器 ⑥ ( CFS 调度器就绪队列 cfs_rq | Linux 内核调度实体 sched_entity | “ 红黑树 “ 数据结构 rb_root_cached )
Linux 内核CFS 调度器 ③ ( 计算进程 “ 虚拟运行时间 “ )
Linux 内核CFS 调度器 ⑤ ( CFS 调度器类 fair_sched_class 源码 | next 赋值 | enqueue_task 赋值 | dequeue_task 赋值 )