CFS调度器中虚拟运行时间的取值范围

CFS调度器中虚拟运行时间的取值范围

我试图了解使用内核版本 4.19.2 的 Linux CFS 调度程序的工作原理。

正如文档中提到的,它没有以传统方式使用时间片,而是使用虚拟运行时的概念。每个进程的 vruntime 更新都在文件中进行内核/sched/fair.c

更新的确切行是

    curr->vruntime += calc_delta_fair(delta_exec, curr);
   //curr is the currently scheduled task, the function cal_delta_fair() 
   returns a value depending on the duration the task ran and its priority 
   ensuring fairness.

变量vruntime是u64,在内核类型中定义为64B的无符号整数。为了了解进程的 vruntime 如何变化,我编写了一个系统调用来获取它的值,结果有时是负值,有时是正值。如何? vruntime 的负值意味着什么?

答案1

vruntime 的数据类型是一个无符号 64 位整数。如果您正在读取负数,那么我认为您需要在系统调用实现中将变量转换为正确的类型

相关内容