Calcul précis de l'utilisation du processeur sous Linux à l'aide de / proc / stat

Il y a un certain nombre de postes et des références sur la façon d'obtenir de l'Utilisation de l'UC à l'aide de statistiques dans /proc/stat. Cependant, la plupart d'entre eux utilisent seulement quatre des 7+ CPU stats (utilisateur, de nice, de système, et d'inactivité), en ignorant le reste jiffie CPU compte présent dans Linux 2.6 (iowait, irq, softirq).

Comme un exemple, voir La détermination de l'utilisation de l'UC.

Ma question est celle-ci: le iowait/irq/softirq numéros aussi compté dans l'un des quatre premiers chiffres (utilisateur/nice/système/inactif)? En d'autres termes, le total jiffie compter égal à la somme des quatre premiers stats? Ou, le total jiffie compter égal à la somme de tous les 7 stats? Si ce dernier est vrai, alors une utilisation de l'UC formule doit tenir tous les numéros de compte, comme ceci:

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

source d'informationauteur Stephen Schaub | 2011-04-01