CFS 完全公平调度策略简述

  • 调度器认为每个进程都应该运行同样的时间(公平可能就指此)
  • 总是选择时间运行的最少的进程
  • nice 值高的进程时间增长的快,nice值低的进程时间增长的慢

这里的时间是虚拟时间,即 vruntime,是经过权重加权过的时间,每个进程都会记录。

具体实现

每个进程都包含一个调度实体,调度实体内有 vruntime 变量。

struct sched_entity {struct load_weight  load;       /* for load-balancing */struct rb_node      run_node;struct list_head   group_node;unsigned int     on_rq;u64           exec_start;u64          sum_exec_runtime;u64            vruntime;   /* 进程运行的虚拟时间 */u64          prev_sum_exec_runtime;...
};

系统为每个nice 值 [-20, 19] 都设定了一个权重。

static const int prio_to_weight[40] = {/* -20 */     88761,     71755,     56483,     46273,     36291,/* -15 */     29154,     23254,     18705,     14949,     11916,/* -10 */      9548,      7620,      6100,      4904,      3906,/*  -5 */      3121,      2501,      1991,      1586,      1277,/*   0 */      1024,       820,       655,       526,       423,/*   5 */       335,       272,       215,       172,       137,/*  10 */       110,        87,        70,        56,        45,/*  15 */        36,        29,        23,        18,        15,
};

每次更新虚拟时间时,都会考虑到相应权重。从这里可以看出,低 nice 值,即高权重的进程,时间增长更慢;相反,高 nice 值,时间增长会更快。

vruntime += realtime / weight;

利用红黑树的特性,排序出最小时间值,红黑树的排序标准是 vruntime。

static inline s64 entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se)
{return se->vruntime - cfs_rq->min_vruntime;
}

每次调度挑选进程时总是选择最左侧节点,即虚拟运行时间 vruntime 最少的进程。

static struct sched_entity *__pick_next_entity(struct cfs_rq *cfs_rq)
{struct rb_node *left = cfs_rq->rb_leftmost;if (!left)return NULL;return rb_entry(left, struct sched_entity, run_node);
}

Linux CFS 完全公平调度算法 简明分析相关推荐

  1. Linux进程管理:进程调度之完全公平调度算法

    目录 完全公平调度算法基本原理 完全公平调度的两个时间 完全公平调度的两个对象 完全公平调度算法实现 调度时机 Linux 进程调度算法经历了以下几个版本的发展: 基于时间片轮询调度算法.(2.6之前 ...

  2. 进程管理笔记三、完全公平调度算法CFS

    进程管理笔记三.CFS调度算法 引言:CFS是英文Completely Fair Scheduler的缩写,即完全公平调度器,负责进程调度.在Linux Kernel 2.6.23之后采用,它负责将C ...

  3. 【Linux 内核】CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )

    文章目录 一.CFS 调度器概念 ( 完全公平调度器 ) 二.CFS 调度器虚拟时钟概念 ( Virtual Runtime ) 三.进程优先级 ( 调度优先级 | 静态优先级 | 正常优先级 | 实 ...

  4. Linux CFS调度算法核心解析

    回家的路上,聊了下CFS调度器-我昨天不是写了一篇批判性的文章嘛: [为什么Linux CFS调度器没有带来惊艳的碾压效果] https://blog.csdn.net/dog250/article/ ...

  5. 用c语言实现对n个进程采用“短进程优先”算法的进程调度_为什么Linux CFS调度器没有带来惊艳的碾压效果?...

    文章转自公众号"人人都是极客" 但凡懂Linux内核的,都知道Linux内核的CFS进程调度算法,无论是从2.6.23将其初引入时的论文,还是各类源码分析,文章,以及Linux内核 ...

  6. Linux进程O(1)调度算法,面试必考哦

    进程调度有很多方法,这里只讨论Linux下的进程调度,先说下,这个是高端面试必考题,既然我发文了,大家最好看看,而且目前看到的写得最好的文章,推荐给大家. ==== Linux是一个支持多任务的操作系 ...

  7. (7)Linux进程调度-O(1)调度算法

    <(1)Linux进程调度> <(2)Linux进程调度器-CPU负载> <(3)Linux进程调度-进程切换> <(4)Linux进程调度-组调度及带宽控制 ...

  8. 为什么Linux CFS调度器没有带来惊艳的碾压效果? | CSDN博文精选

    任何领域,革命性的碾压式推陈出新并不是没有,但是概率极低,人们普遍的狂妄在于,总是认为自己所置身的环境正在发生着某种碾压式的变革,但其实,最终大概率不过是一场平庸. 作者 | dog250 责编 | ...

  9. linux cfs进程调度 配置,linux2.6 CFS调度算法分析

    1.概述 CFS(completely fair schedule)是最终被内核采纳的调度器.它从RSDL/SD中吸取了完全公平的思想,不再跟踪进程的睡眠时间,也不再企图区分交互式进程.它将所有的进程 ...

最新文章

  1. 深入理解pandas读取excel,txt,csv文件等命令
  2. 皮一皮:古老中医博大精深!
  3. vs编译cuda DLL
  4. javascript同级遍历_有用的DOM遍历方法,你需要了解一下
  5. CMD查询Mysql中文乱码的解决方法
  6. 查看动态代理生成的代理类字节码
  7. 使用nltk.pos出现IndexError: string index out of range
  8. 前端学习(2062):vue的option选项
  9. java对mysql读写权限设置_Java学习笔记——MySQL开放3306接口与设置用户权限
  10. 滴滴CTO五轮面试真是太刺激了,Java高级工程师一二三四五面面经(已拿到offer)...
  11. 想了解表格问答,我们先看看TA的前世
  12. pandas数据处理实践二(排序(sort_index()、sort_values())、连接(Concatenate(连接,串联)和Combine(结合、联合))
  13. 软件评测师教程简介(第二篇-测试技术)
  14. 《自然语言处理简明教程》读书笔记:第二章 词汇自动处理
  15. 微信小程序中如何发送客服消息给用户
  16. 各大邮箱网址用哪个好?企业内部邮箱哪个比较好用?
  17. 图像超分辨率论文笔记
  18. python实现视频ai换脸_Python如何实现AI换脸功能 Python实现AI换脸功能代码
  19. 回家的票抢上了吗?聊聊12306为什么时不时要崩一下
  20. 【树莓派 有趣实践】寻找小项目

热门文章

  1. 畅言评论没有头像的临时解决方法
  2. Java获取unix时间戳
  3. 【传智播客郑州校区】辞掉7年工作转行程序员,为了理想在传智播客前行
  4. Fisher判别分析
  5. 惊了!原来这就是今日头条的面试题!
  6. 假定某计算机的CPU主频为80 MHz,CPI为4,并且平均每条指令访存1.5
  7. 计算机技术性能指标指的是,计算机主要技术指标通常是指
  8. 【STB】未来机顶盒的发展方向
  9. 2022-2028年中国铷矿行业市场现状分析及发展前景展望报告
  10. 读 Herbert George Wells 之 A Short History of The World