Linux进程调度之完全公平调度(压箱底的干货分享)

目录

1.什么是完全公平调度?

2.调度周期,调度延迟,最小调度粒度

3.实际运行时间

4.nice值和权重

5.虚拟运行时间

6.查看进程运行时间


1.什么是完全公平调度?

完全公平调度,CFS (Completely Fair Scheduler) 是 Linux 内核中的一个调度算法,用于管理进程的调度和时间片分配。

  • CFS 的设计理念是以红黑树作为进程队列的数据结构,其中每个进程都有一个红黑树节点。这些节点按照进程的虚拟运行时间排序,时间较少的进程在树的左节点,而运行时间较长的进程位于树的右节点。调度器每次选择红黑树最左边(最小虚拟运行时间)的节点来运行。

  • CFS 通过计算每个进程的虚拟运行时间来实现公平调度,能够保证每个进程都能获得时间片,不被饿死。

  • CFS 通过不断调整时间片长度和优先级权重,以及使用红黑树来保持进程排队顺序,实现了对系统资源的有效管理和公平分配。

2.调度周期,调度延迟,最小调度粒度

Linux进程调度之完全公平调度(压箱底的干货分享)_第1张图片

调度最小粒度:单个进程最小运行时间。

unsigned int sysctl_sched_min_granularity = 750000ULL; //0.75ms

调度周期:是将运行队列(如:完全公平运行队列)中所有的进程调度一遍所需要的时间。

调度延迟:保证每个进程都运行一次的总时间。

unsigned int sysctl_sched_latency = 6000000ULL; //6ms

  • 情况1:进程运行时间 = 调度延迟 / 进程数量 > 调度最小粒度。

调度周期 = 调度延迟

  • 情况2:进程运行时间 = 调度延迟 / 进程数量 < 调度最小粒度。

调度周期 = 调度最小粒度 * 进程数量。

3.实际运行时间

Linux进程调度之完全公平调度(压箱底的干货分享)_第2张图片

实际情况每个进程运行时间会不一样,实际运行时间长短由权重决定。

进程实际运行时间 = 调度周期 * 进程权重 / 运行队列所有进程权重之和

4.nice值和权重

Linux进程调度之完全公平调度(压箱底的干货分享)_第3张图片

Linux内核定义了一张nice转权重的映射表,每一个nice值都会对应一个映射表。

5.虚拟运行时间

  • 完全公平调度最核心的设计就是采用虚拟运行时间(vruntime)。

  • 虚拟运行时间 = 实际运行时间 * (1024 / 进程权重)

  • 虚拟运行时间最小的进程优先调度。

  • 完全公平运行队列采用红黑树结构,以虚拟运行时间为键值存储调度实体,虚拟运行时间越小,越靠近树的左端,CPU每次选取红黑树最左边进程执行即可。

  • 只需要维护和更新虚拟运行时间,就能保证完全公平调度正确运行。

Linux进程调度之完全公平调度(压箱底的干货分享)_第4张图片

6.查看进程运行时间

cat /proc/PID/sched查看进程运行时间

  • vruntime虚拟运行时间

  • sum_exec_runtime实际运行时间

Linux进程调度之完全公平调度(压箱底的干货分享)_第5张图片


更多Linux环境编程图文和视频资料,点击文末图片领取。


Linux进程调度之完全公平调度(压箱底的干货分享)_第6张图片

你可能感兴趣的:(Linux环境编程,服务器,linux,c语言,物联网,ubuntu,开源)