虚拟实时
来源:互联网 发布:飞鹰网络电视安卓版 编辑:程序博客网 时间:2024/05/01 08:06
CFS中的虚拟运行时间
2013年4月28日 由 留言 »一直对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值和权重的转换。
1
static
const
int
prio_to_weight[40] = {
2
/* -20 */
88761, 71755, 56483, 46273, 36291,
3
/* -15 */
29154, 23254, 18705, 14949, 11916,
4
/* -10 */
9548, 7620, 6100, 4904, 3906,
5
/* -5 */
3121, 2501, 1991, 1586, 1277,
6
/* 0 */
1024, 820, 655, 526, 423,
7
/* 5 */
335, 272, 215, 172, 137,
8
/* 10 */
110, 87, 70, 56, 45,
9
/* 15 */
36, 29, 23, 18, 15,
10
};
而在内核中,进程的虚拟运行时间是自进程诞生以来进行累加的,每个时钟周期内一个进程的虚拟运行时间是通过下面的方法计算的:
一次调度间隔的虚拟运行时间=实际运行时间*(NICE_0_LOAD/权重)
其中,NICE_0_LOAD是nice为0时的权重。也就是说,nice值为0的进程实际运行时间和虚拟运行时间相同。通过这个公式可以看到,权重越大的进程获得的虚拟运行时间越小,那么它将被调度器所调度的机会就越大。
- 虚拟实时
- 服务器虚拟化----实时迁移
- WinForm程序虚拟分页(实时加载数据)
- WinForm程序虚拟分页(实时加载数据)
- 谷歌的新玩意儿 实时翻译型虚拟键盘
- vue中虚拟dom,无法实时更新的解决方案
- 实时
- 实时
- 鼠标控制的实时虚拟拍摄,将图片转变成活灵活现的电影
- 在 Windows 窗体 DataGridView 控件中实现实时数据加载的虚拟模式
- Vuforia SDK全面更新:3.0版可实时生成虚拟场景和物体
- Vuforia SDK全面更新:3.0版可实时生成虚拟场景和物体
- Vuforia SDK全面更新:3.0版可实时生成虚拟场景和物体
- 专利文件公开显示谷歌或正开发实时翻译新型虚拟键盘
- “虚拟”货币“虚拟”吗?
- 实时交通
- 实时数据库
- 实时进度条
- 【KMP算法详解——适合初学KMP算法的朋友
- hibernate.TypeMismatchException: Provided id of the wrong type for class
- tyvj1051选课
- 从链接中下载文件
- iOS动画浅析
- 虚拟实时
- jquery.slides.js 幻灯片脚本使用方法
- UIImageView 显示图片和画一条直线
- winform ListView 扩展:1.失去焦点后保持选中行高亮;2.分组折叠
- ACM整理(一)——所需函数
- Palindrome Partitioning II
- php 设计模式
- Mathematics for computer graphics----Numbers
- 如何使用CFileDialog