Linux CFS调度算法的理解

我们都希望在调度时,任务按照相同的进展比例进行,这样才公平,谁也不多干,谁也不少干。例如A完成了50%,B也应该完成50%。这个完成的百分比实际上就是“实际分配时间/应该分配时间”。

在加权的情况下,任务按照加权比例同时进行 ,例如A进程权重2,B进程权重1,A进程完成50%,B进程应该完成25%,加权后的实际分配的时间= ( 调度的总时间  * 该进程权重 )/总权重

那么我们就可以得到公式

A进程实际分配时间 / B应该分配时间 = (调度的总时间*A进程权重)/(总权重*A进程应该分配时间)

B进程实际分配时间 / B应该分配时间 = (调度的总时间*B进程权重)/(总权重*B进程应该分配时间)

如果公平的话,就是两者尽量相等,假设上面的两个等式对等,我们就可以得到

(A进程分配的时间*G)/(A进程权重)=(B进程分配的时间*G)/(B进程权重)

G为常量

是不是linux cfs调度器的虚拟时钟的计算方式好像:

virtime= 该进程分配的时间 * NICE_0_LOAD /当前进程的权重

已上是我的个人理解,如果不对,请指出,谢谢

猜你喜欢

转载自blog.csdn.net/qq_32044045/article/details/109391954