Точный расчет загрузки ЦП в Linux с помощью / proc / stat

Есть ряд сообщений и ссылок о том, как получить загрузку ЦП с помощью статистики в / proc / stat . Однако большинство из них используют только четыре из 7+ показателей ЦП (пользователь, хороший, системный и бездействующий), игнорируя оставшееся количество ЦП в jiffie, присутствующее в Linux 2.6 (iowait, irq, softirq).

Например, см. Определение загрузки ЦП .

У меня такой вопрос: считаются ли номера iowait / irq / softirq одним из первых четырех номеров (user / nice / system / idle)? Другими словами, равен ли общий счетчик джиффи сумме первых четырех характеристик? Или общее количество джиффи равно сумме всех 7 характеристик? Если последнее верно, то формула загрузки ЦП должна учитывать все числа, например:

#include 
#include 

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);
}

15
задан Community 23 May 2017 в 12:30
поделиться