最新版linux3.10支持CFG调度策略
CFG调度时分配给每个进程的时间片是多少?
分配给进程的时间 = 总的cpu时间 * 进程的权重/就绪队列(runqueue)所有进程权重之和
CFS调度器针对优先级又提出了nice值的概念,其实和权重是一一对应的关系。nice值就是一个具体的数字,取值范围是[-20, 19]。数值越小代表优先级越大,同时也意味着权重值越大,nice值和权重之间可以互相转换。内核提供了一个表格转换nice值和权重。
const int sched_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,
};
数组的值可以看作是公式:weight = 1024 / 1.25nice计算得到。公式中的1.25取值依据是:进程每降低一个nice值,将多获得10% cpu的时间。公式中以1024权重为基准值计算得来,1024权重对应nice值为0,其权重被称为NICE_0_LOAD。默认情况下,