使用正常运行时间或top命令,您可以看到负载的输出,例如负载平均值:0、0.03、0,确切地说,负载是多少用户文档只是一个传递,并没有给出负载的具体定义。



负荷统计必须用内核完成。因此,最好在内核源代码中找到答案。找到2.6.21内核源代码并开始探索。



节选部分来源:







1254 active_tasks = count_active_tasks();



1256 calc_load(avenrun { 0 },exp_1,active_tasks);



1257 calc_load(avenrun { 1 },exp_5,active_tasks);



1258 calc_load(avenrun { 2 },exp_15,active_tasks);



/ / / /计划包括Linux。H



110 #定义fshift 11 NR精密* / / *位



111 #定义fixed_1(1 <



112 #定义load_freq 5秒的间隔(5 Hz) / * * /



113 #定义exp_1 1884 1 /口作为定点(5sec / 1min) / * * /



114 #定义exp_5 2014 1 /口(5sec / 5min) / * * /



115 #定义exp_15 2037 1 /口(5sec / 15min) / * * /



117 #定义calc_load(负载,口,N)



118加载=经验;



119负荷= n *(fixed_1-exp);



120负荷= fshift;



负荷(t)=(负载(t-1)×exp(我)+ N(t)*(2048 exp(i)))/ 2048



负荷(t-1)计算的结果是最后一次



t时t(t)活动过程的个数



计算是在累计CPU的运行队列中运行和不间断地乘以2048的值。



计算方法如下:



1946无符号长nr_active(void)



1947 { {



1948个无符号长i,运行= 0,不中断= 0;



一千九百四十九



1950 for_each_online_cpu(我){



1951运行= cpu_rq(我)-> nr_running;



1952不间断= cpu_rq(我)-> nr_uninterruptible;



1953 }



一千九百五十四



1955如果(不太可能((长)不间断的< 0))



1956不间断= 0;



一千九百五十七



1958返回运行+不间断;



1959 }



1226静态无符号长count_active_tasks(void)



1227 { {



1228回nr_active()* fixed_1;



1229 }



经验值(1)=1884



经验值(5)=2014



经验值(15)=2037



导出(i)= 2048×e(- 1 12)



从本质上讲,负载是由过去一段时间内每个CPU的活动进程数决定的,但它的数值并不等同于每秒调度所需的进程数,具体的计算过程是一个更复杂的过程。