CFS中的虚拟运行时间vruntime
来源:互联网 发布:经传软件跟风统计 编辑:程序博客网 时间:2024/05/29 10:11
一直对CFS(Completely Fair Scheduling,完全公平调度)中的虚拟运行时间(vruntime)不太理解,最近在看cgroup中的cpu子系统算是搞清楚了它是怎么回事。
先 简单说一下CFS调度算法的思想:理想状态下每个进程都能获得相同的时间片,并且同时运行在CPU上,但实际上一个CPU同一时刻运行的进程只能有一个。 也就是说,当一个进程占用CPU时,其他进程就必须等待。CFS为了实现公平,必须惩罚当前正在运行的进程,以使那些正在等待的进程下次被调度。
具体实现时,CFS通过每个进程的虚拟运行时间(vruntime)来衡量哪个进程最值得被调度。CFS中的就绪队列是一棵以vruntime为键值的红黑树,虚拟时间越小的进程越靠近整个红黑树的最左端。因此,调度器每次选择位于红黑树最左端的那个进程,该进程的vruntime最小。
虚拟运行时间是通过进程的实际运行时间和进程的权重(weight)计算出来的。在CFS调度器中,将进程优先级这个概念弱化,而是强调进程的权重。一个进程的权重越大,则说明这个进程更需要运行,因此它的虚拟运行时间就越小,这样被调度的机会就越大。
那么,在用户态进程的优先级nice值与CFS调度器中的权重又有什么关系?在内核中通过prio_to_weight数组进行nice值和权重的转换。
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_0_LOAD/权重)
其中,NICE_0_LOAD是nice为0时的权重。也就是说,nice值为0的进程实际运行时间和虚拟运行时间相同。通过这个公式可以看到,权重越大的进程获得的虚拟运行时间越小,那么它将被调度器所调度的机会就越大。
转http://edsionte.com/techblog/archives/4331
- CFS中的虚拟运行时间vruntime
- CFS中的虚拟运行时间vruntime
- CFS中的虚拟运行时间vruntime 的理解
- CFS(完全公平调度)中的虚拟运行时间(vruntime)
- CFS中的虚拟运行时间
- CFS中的虚拟运行时间
- linux CFS 虚拟时间更新
- Linux CFS调度器之虚拟时钟vruntime与调度延迟--Linux进程的管理与调度(二十六)
- Linux CFS调度器之虚拟时钟vruntime与调度延迟--Linux进程的管理与调度(二十六)
- Linux Scheduler – CFS and Virtual Run Time (vruntime)
- linux调度器_第三代cfs(3)_分解代码vruntime的详解
- Linux CFS中的进程调度
- linux CFS进程时间片调度策略
- 算法运行时间中的对数
- CFS调度器虚拟时钟归一化理想的破碎
- 重大更正:CFS调度是没有时间补偿的!
- CFS调度器的艺术--虚拟时钟从物理HZ中分离
- 运行时间
- 当迷茫在大学泛滥成灾 -- 李开复
- 牛腩新闻发布系统总结
- js入门——Dom基础
- itoa函数
- ios编程笔记之
- CFS中的虚拟运行时间vruntime
- 13年百度题
- 进程间描述符传递
- 在线的PCA算法
- PowerDesigner和Oracle 数据库表结构互导
- --专访雷果国: 从1.5K到18K 一个程序员的5年成长之路--
- hdu4849 Wow! Such City!
- Jboss异常:SQL Error 17002和SQL Error 17008
- android开发笔记之viewpager 基本使用方法