我们都希望在调度时,任务按照相同的进展比例进行,这样才公平,谁也不多干,谁也不少干。例如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 /当前进程的权重
已上是我的个人理解,如果不对,请指出,谢谢