目录
1.什么是完全公平调度?
2.调度周期,调度延迟,最小调度粒度
3.实际运行时间
4.nice值和权重
5.虚拟运行时间
6.查看进程运行时间
1.什么是完全公平调度?
完全公平调度,CFS (Completely Fair Scheduler) 是 Linux 内核中的一个调度算法,用于管理进程的调度和时间片分配。
-
CFS 的设计理念是以红黑树作为进程队列的数据结构,其中每个进程都有一个红黑树节点。这些节点按照进程的虚拟运行时间排序,时间较少的进程在树的左节点,而运行时间较长的进程位于树的右节点。调度器每次选择红黑树最左边(最小虚拟运行时间)的节点来运行。
-
CFS 通过计算每个进程的虚拟运行时间来实现公平调度,能够保证每个进程都能获得时间片,不被饿死。
-
CFS 通过不断调整时间片长度和优先级权重,以及使用红黑树来保持进程排队顺序,实现了对系统资源的有效管理和公平分配。
2.调度周期,调度延迟,最小调度粒度
调度最小粒度:单个进程最小运行时间。
unsigned int sysctl_sched_min_granularity = 750000ULL; //0.75ms
调度周期:是将运行队列(如:完全公平运行队列)中所有的进程调度一遍所需要的时间。
调度延迟:保证每个进程都运行一次的总时间。
unsigned int sysctl_sched_latency = 6000000ULL; //6ms
-
情况1:进程运行时间 = 调度延迟 / 进程数量 > 调度最小粒度。
调度周期 = 调度延迟
-
情况2:进程运行时间 = 调度延迟 / 进程数量 < 调度最小粒度。
调度周期 = 调度最小粒度 * 进程数量。
3.实际运行时间
实际情况每个进程运行时间会不一样,实际运行时间长短由权重决定。
进程实际运行时间 = 调度周期 * 进程权重 / 运行队列所有进程权重之和
4.nice值和权重
Linux内核定义了一张nice转权重的映射表,每一个nice值都会对应一个映射表。
5.虚拟运行时间
-
完全公平调度最核心的设计就是采用虚拟运行时间(vruntime)。
-
虚拟运行时间 = 实际运行时间 * (1024 / 进程权重)
-
虚拟运行时间最小的进程优先调度。
-
完全公平运行队列采用红黑树结构,以虚拟运行时间为键值存储调度实体,虚拟运行时间越小,越靠近树的左端,CPU每次选取红黑树最左边进程执行即可。
-
只需要维护和更新虚拟运行时间,就能保证完全公平调度正确运行。
6.查看进程运行时间
cat /proc/PID/sched查看进程运行时间
-
vruntime虚拟运行时间
-
sum_exec_runtime实际运行时间
更多Linux环境编程图文和视频资料,点击文末图片领取。