Существует множество сообщений и ссылок о том, как получить использование ЦП с использованием статистики в /proc/stat. Тем не менее, большинство из них используют только четыре из 7+ статистики процессора (пользовательский, симпатичный, системный и простаивающий), игнорируя оставшиеся значения процессора jiffie, присутствующие в Linux 2.6 (iowait, irq, softirq).
В качестве примера см. Определение использования ЦП..
Мой вопрос заключается в следующем: числа iowait/irq/softirq также учитываются в одном из первых четырех чисел (пользователь/nice/system/idle)? Другими словами, совпадает ли суммарный счет jiffie с суммой первых четырех статистических данных? Или, общее количество jiffie равно сумме всех 7 статистических данных? Если последнее верно, то в формуле использования процессора должны учитываться все числа, например:
#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);
}