我是一个PHP程序员, 最新在了解CPU调度 ,学习了CFS调度算法的一些文章,有一个问题。
虚拟运行时间的作用既然是 ,让每个进程的调度次数更平均,为什么不用一个固定的值?
为什么要是使用公式 算出一个 并不等于 实际运行时间总和 的值,而且这个值也是大于调度周期的? 这个值是有其他用处吗?
我是一个PHP程序员, 最新在了解CPU调度 ,学习了CFS调度算法的一些文章,有一个问题。
虚拟运行时间的作用既然是 ,让每个进程的调度次数更平均,为什么不用一个固定的值?
为什么要是使用公式 算出一个 并不等于 实际运行时间总和 的值,而且这个值也是大于调度周期的? 这个值是有其他用处吗?
<?php
function cfs($a_nice,$b_nice,$c_nice){
$niceToWeight=[1024,820,655,526,423,335];
$nice0=1024;
$cpu_schedule=6;
//实际运行时间公式 = 调度周期 * 进程权重 / (所有进程权重之和);
$sj_a=round($cpu_schedule*$niceToWeight[$a_nice]/($niceToWeight[$a_nice]+$niceToWeight[$b_nice]+$niceToWeight[$c_nice]),1);
$sj_b=round($cpu_schedule*$niceToWeight[$b_nice]/($niceToWeight[$a_nice]+$niceToWeight[$b_nice]+$niceToWeight[$c_nice]),1);
$sj_c=round($cpu_schedule*$niceToWeight[$c_nice]/($niceToWeight[$a_nice]+$niceToWeight[$b_nice]+$niceToWeight[$c_nice]),1);
//虚拟运行时间公式 = 实际运行时间*nice_0_load / 权重
$xn_a=round($sj_a*$nice0/$niceToWeight[$a_nice],2);
$xn_b=round($sj_b*$nice0/$niceToWeight[$b_nice],2);
$xn_c=round($sj_c*$nice0/$niceToWeight[$c_nice],2);
echo "<p>****************************************<p>";
echo "A进程nice权重: {$a_nice} <br>";
echo "B进程nice权重: {$b_nice} <br>";
echo "C进程nice权重: {$c_nice} <br>";
echo "实际运行时间 A进程: {$sj_a}<br>";
echo "实际运行时间 B进程: {$sj_b}<br>";
echo "实际运行时间 C进程: {$sj_c}<br>";
echo "<hr>";
echo "虚拟运行时间 A进程: {$xn_a}<br>";
echo "虚拟运行时间 B进程: {$xn_b}<br>";
echo "虚拟运行时间 C进程: {$xn_c}<br>";
echo "<p>****************************************<p>";
}
cfs(1,2,3);
A进程nice权重: 1
B进程nice权重: 2
C进程nice权重: 3
实际运行时间 A进程: 2.5
实际运行时间 B进程: 2
实际运行时间 C进程: 1.6
虚拟运行时间 A进程: 3.12
虚拟运行时间 B进程: 3.13
虚拟运行时间 C进程: 3.11
我写了一段代码来更好的理解,不知道我理解的公式是否正确?
如果正确的话,虚拟运行时间的确是恒定几乎相等 不会因为权重变化而不等,实际时间是根据权重而来 所以权重高的时间更长,为什么虚拟运行时间需要计算出来呢 ,都用 1 来代替不行吗