Linux 调度器 CFS

cpu_shares是如何影响这个cpu时间片的,这就需要去看一下linux进程调度原理。

Linux 调度器


内核默认提供了5个调度器,Linux内核使用struct sched_class来对调度器进行抽象∶

  • Stop调度器,stop_sched class∶优先级最高的调度类,可以抢占其他所有进程,不能被其他进程抢占
  • Deadline调度器, dl sched class∶使用红黑树,把进程按照绝对截止期限进行排序,选择最小进程进行调度运行
  • RT调度器,rt_sched_class∶实时调度器,为每个优先级维护一个队列
  • CFS调度器,cfs sched class∶完全公平调度器,采用完全公平调度算法,引入虚拟运行时间概念
  • IDLE-Task调度器,idle sched class∶空闲调度器,每个CPU都会有一个idle线程,当没有其他进程可以调度时,调度运行idle线程;

linux里面提供了多个进程调度器,最高优先级的是RT,就是real time的调度器,这个调度器基本上是轮训的,如果多个进程是使用RT调度器去调度,那么他就会轮流的去调度,这样的话保证其时效性。

次优的是CFS调度器,一般普通的用户进程都是使用CFS调度器,这个调度器是我们平时遇到最多的一种调度器。

CFS调度器


  • CFS是Completely Fair Scheduler简称,即完全公平调度器
  • CFS实现的主要思想是维护为任务提供处理器时间方面的平衡,这意味着应给进程分配相当数量的处理器。
  • 分给某个任务的时间失去平衡时,应给失去平衡的任务分配时间,让其执行。

  • CFS通过虚拟运行时间(vruntime)来实现平衡,维护提供给某个任务的时间量。

                 vruntime =实际运行时间*1024/进程权重

  • 进程按照各自不同的速率在物理时钟节拍内前进,优先级高则权重大,其虚拟时钟比真实时钟跑得慢,但获得比较多的运行时间

一个进程的权重越大,那么它的运行时间越长,虚拟时钟跑的越慢。

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/125305872