Cálculo exacto de la utilización de la CPU en Linux usando / proc / stat

Hay una serie de publicaciones y referencias sobre cómo obtener la utilización de la CPU utilizando estadísticas en / proc / stat. Sin embargo, la mayoría de ellos usan solo cuatro de las estadísticas de CPU de 7+ (usuario, agradable, sistema e inactivo), ignorando los recuentos de CPU jiffie restantes presentes en Linux 2.6 (iowait, irq, softirq).

Como ejemplo, veaDeterminación de la utilización de la CPU.

Mi pregunta es esta: ¿los números iowait / irq / softirq también se cuentan en uno de los primeros cuatro números (usuario / nice / system / idle)? En otras palabras, ¿el jiffie total cuenta igual a la suma de las primeras cuatro estadísticas? ¿O es el recuento total de jiffie igual a la suma de las 7 estadísticas? Si esto último es cierto, entonces una fórmula de utilización de la CPU debería tener en cuenta todos los números, como este:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta