有很多帖子和参考资料介绍如何使用 /proc/stat 中的统计数据获取 CPU 利用率。然而,大多数只使用了 7+ 个 CPU 统计数据中的四个(user、nice、system 和 idle),而忽略了在 Linux 2.6 中存在的剩余 jiffie CPU 统计数(iowait、irq、softirq)。
例如,请参见 确定 CPU 利用率。
我的问题是:iowait/irq/softirq 数字也会计入前四个数字(user/nice/system/idle)之一吗?换句话说,总 jiffie 数是否等于前四个统计数的总和?或者,总 jiffie 数是否等于所有 7 个统计数的总和?如果后者成立,则 CPU 利用率公式应考虑所有数字,如下所示:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long double a[7],b[7],loadavg;
FILE *fp;
for(;;)
{
fp = fopen("/proc/stat","r");
fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6]);
fclose(fp);
sleep(1);
fp = fopen("/proc/stat","r");
fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3],&b[4],&b[5],&b[6]);
fclose(fp);
loadavg = ((b[0]+b[1]+b[2]+b[4]+b[5]+b[6]) - (a[0]+a[1]+a[2]+a[4]+a[5]+a[6]))
/ ((b[0]+b[1]+b[2]+b[3]+b[4]+b[5]+b[6]) - (a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]));
printf("The current CPU utilization is : %Lf\n",loadavg);
}
return(0);
}