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
Vous devez vous connecter pour publier un commentaire.
Je pense que iowait/irq/softirq ne sont pas comptés dans l'un des 4 premiers numéros. Vous pouvez voir le commentaire de irqtime_account_process_tick dans le code du noyau pour plus de détails:
(pour Le noyau Linux 4.1.1)
Pour le temps d'inactivité de la manipulation, voir account_idle_time fonction:
Si le processeur est inactif ET il y a quelques IO en attendant, il va compter le temps dans CPUTIME_IOWAIT. Sinon, c'est de compter dans CPUTIME_IDLE.
Pour conclure, je pense que le jiffies dans irq/softirq devraient être comptés comme "occupé" pour le cpu, car il était en fait de la manipulation de certains IRQ ou doux IRQ. D'autre part, le nombre de jiffies) dans "iowait" doit être compté comme "inactif" pour le cpu, car il n'était pas de faire quelque chose, mais en attente d'une décision de IO à arriver.