我正在阅读“ Linux内核开发”,但我不了解过程的价值。在linux内核中,每个进程都有一个不错的值,然后将不错的值映射到weight。
检查set_load_weight
linux内核源代码中的功能。在此,计算调度实体(任务/任务组)的实际负载。从不同的地方调用此例程(例如,fork或从用户空间设置新的nice值等)。
if (update_load && p->sched_class == &fair_sched_class) {
reweight_task(p, prio);
} else {
load->weight = scale_load(sched_prio_to_weight[prio]);
load->inv_weight = sched_prio_to_wmult[prio];
}
sched_prio_to_weight
根据优先级包含权重。
保存任务重量信息的结构是struct load_weight
。cfs使用此结构来获取实体的负载并vruntime
在例程中更新任务的runtime()update_curr
。cfs选择要在中运行的下一个任务pick_next_task
。下面是代码片段。
for_each_class(class) {
p = class->pick_next_task(rq, prev, rf);
if (p) {
if (unlikely(p == RETRY_TASK))
goto again;
return p;
}
}
在这里,它遍历每个调度类并检查要运行的任务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句