Linux CFS 完全公平调度算法 简明分析
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 完全公平调度算法 简明分析相关推荐
- Linux进程管理:进程调度之完全公平调度算法
目录 完全公平调度算法基本原理 完全公平调度的两个时间 完全公平调度的两个对象 完全公平调度算法实现 调度时机 Linux 进程调度算法经历了以下几个版本的发展: 基于时间片轮询调度算法.(2.6之前 ...
- 进程管理笔记三、完全公平调度算法CFS
进程管理笔记三.CFS调度算法 引言:CFS是英文Completely Fair Scheduler的缩写,即完全公平调度器,负责进程调度.在Linux Kernel 2.6.23之后采用,它负责将C ...
- 【Linux 内核】CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )
文章目录 一.CFS 调度器概念 ( 完全公平调度器 ) 二.CFS 调度器虚拟时钟概念 ( Virtual Runtime ) 三.进程优先级 ( 调度优先级 | 静态优先级 | 正常优先级 | 实 ...
- Linux CFS调度算法核心解析
回家的路上,聊了下CFS调度器-我昨天不是写了一篇批判性的文章嘛: [为什么Linux CFS调度器没有带来惊艳的碾压效果] https://blog.csdn.net/dog250/article/ ...
- 用c语言实现对n个进程采用“短进程优先”算法的进程调度_为什么Linux CFS调度器没有带来惊艳的碾压效果?...
文章转自公众号"人人都是极客" 但凡懂Linux内核的,都知道Linux内核的CFS进程调度算法,无论是从2.6.23将其初引入时的论文,还是各类源码分析,文章,以及Linux内核 ...
- Linux进程O(1)调度算法,面试必考哦
进程调度有很多方法,这里只讨论Linux下的进程调度,先说下,这个是高端面试必考题,既然我发文了,大家最好看看,而且目前看到的写得最好的文章,推荐给大家. ==== Linux是一个支持多任务的操作系 ...
- (7)Linux进程调度-O(1)调度算法
<(1)Linux进程调度> <(2)Linux进程调度器-CPU负载> <(3)Linux进程调度-进程切换> <(4)Linux进程调度-组调度及带宽控制 ...
- 为什么Linux CFS调度器没有带来惊艳的碾压效果? | CSDN博文精选
任何领域,革命性的碾压式推陈出新并不是没有,但是概率极低,人们普遍的狂妄在于,总是认为自己所置身的环境正在发生着某种碾压式的变革,但其实,最终大概率不过是一场平庸. 作者 | dog250 责编 | ...
- linux cfs进程调度 配置,linux2.6 CFS调度算法分析
1.概述 CFS(completely fair schedule)是最终被内核采纳的调度器.它从RSDL/SD中吸取了完全公平的思想,不再跟踪进程的睡眠时间,也不再企图区分交互式进程.它将所有的进程 ...
最新文章
- 深入理解pandas读取excel,txt,csv文件等命令
- 皮一皮:古老中医博大精深!
- vs编译cuda DLL
- javascript同级遍历_有用的DOM遍历方法,你需要了解一下
- CMD查询Mysql中文乱码的解决方法
- 查看动态代理生成的代理类字节码
- 使用nltk.pos出现IndexError: string index out of range
- 前端学习(2062):vue的option选项
- java对mysql读写权限设置_Java学习笔记——MySQL开放3306接口与设置用户权限
- 滴滴CTO五轮面试真是太刺激了,Java高级工程师一二三四五面面经(已拿到offer)...
- 想了解表格问答,我们先看看TA的前世
- pandas数据处理实践二(排序(sort_index()、sort_values())、连接(Concatenate(连接,串联)和Combine(结合、联合))
- 软件评测师教程简介(第二篇-测试技术)
- 《自然语言处理简明教程》读书笔记:第二章 词汇自动处理
- 微信小程序中如何发送客服消息给用户
- 各大邮箱网址用哪个好?企业内部邮箱哪个比较好用?
- 图像超分辨率论文笔记
- python实现视频ai换脸_Python如何实现AI换脸功能 Python实现AI换脸功能代码
- 回家的票抢上了吗?聊聊12306为什么时不时要崩一下
- 【树莓派 有趣实践】寻找小项目