美文网首页
CFS 完全公平调度算法

CFS 完全公平调度算法

作者: ssochi | 来源:发表于2019-06-15 15:01 被阅读0次

简介

Complete Fair Schedule,是linux中对普通进程的一种调度算法,旨在使每个进程都运行相同多的运行次数.
其中vruntime是虚拟运行时间,是CFS给每个进程的一个计数器,vruntime越大表示该进程运行次数越多,那么下次轮到它的优先级也就越低。

实现

CFS的实现比较简单,CFS内部需要一个有序的数据结构,能快速获取vruntime最小的进程,并且由于每次调度进程vruntime值会增加,因此还需要该数据结构能快速插入。这里联想到了三个数据结构,一是跳表,二是红黑树,三是小根堆,然而既然是写linux内核怎么可能用lowB的跳表?并且小根堆可扩展性较弱,因此选择了红黑树。

整个过程是这样的。首先接收要调度的进程,将这些进程的key设为它们的pid,而参与红黑树计算的value设为它们的vruntime。这时vruntime都是1,但并不是每个进程都有相同的概率能被调度到。我们知道进程调度中有优先级(priority)的概念,优先级越高应该越容易被调度,那么我们不能单单通过vruntime来排序,而应该将priority和vruntime进行组合,即 value = vruntime / (log2(priority))。这个公式是我瞎猜的,不过公式应满足priority越大value越小。

这样我们得到一个红黑树,我们获取最左边的叶子,那就是最小值,把它取下来获取pid,调度pid进程。之后将它的vruntime++,再将它插入到红黑树当中

相关文章

  • CFS 完全公平调度算法

    简介 Complete Fair Schedule,是linux中对普通进程的一种调度算法,旨在使每个进程都运行相...

  • [校招面试]CPU调度系列二

    完全公平调度CFS CFS(Completely Fair Scheduler)试图按照对 CPU 时间的 “最大...

  • Linux进程调度原理

    极简联盟 假设我的系统只有一种调度算法cfs 那么有个调度的队列 cfs_rq ...

  • Linux的公平调度(CFS)原理 - kummer话你知

    1、CFS的基本思路 在CFS算法引入之前,Linux使用过几种不同的调度算法,一开始的调度器是复杂度为O(n)的...

  • LVS调度算法

    LVS 常用的调度算法: 固定调度算法:rr,wrr,dh,sh 静态方法仅根据算法本身进行调度,关心的是起点公平...

  • cfs调度之优先级,虚拟时间,权重

    cfs调度算法有两部分组成.1 虚拟时间(Vruntime)2 平均负载 (内核3.8开始加入) 虚拟时间主要是根...

  • haproxy调度

    haproxy的调度算法 1、静态调度 静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、链...

  • cpu调度-完全公平调度模式

    本篇我们来讲讲另一种调度方式-公平调度方式。公平调度模式基于一个基本概念:相对于MLFQ优化周转时间和相应时间,公...

  • Linux 进度调度测试

    调度器的参数 参数简介: sched_min_granularity_ns:CFS 设定了进程占用 CPU 的最小...

  • 常见调度算法

    先来先服务(FCFS)调度算法短作业优先(SJF)调度算法优先级调度算法高响应比优先调度算法时间片轮转调度算法多级...

网友评论

      本文标题:CFS 完全公平调度算法

      本文链接:https://www.haomeiwen.com/subject/qjsbfctx.html