89 votes

Pourquoi l'utilisation du CPU rapportée par top sous Linux est-elle supérieure à 100% ?

J'ai vu l'utilisation du CPU dépasser les 100%. Comment cela est-il possible ? Est-ce parce que j'ai quatre cœurs de processeur, donc 100% n'est pas vraiment le maximum ?

De plus, lorsqu'un programme fait cela, que puis-je faire en plus d'utiliser la fonction k commande ?

89voto

Ehsan mahmood Points 11

AFAIK top montre l'utilisation du CPU par rapport à la puissance d'un cœur, c'est-à-dire que si votre tâche prend 200% du CPU, elle occupe deux cœurs.

23voto

IanH Points 1232

De la page d'accueil

   k: %CPU  --  CPU usage
  The task's share of the elapsed  CPU  time  since  the  last  screen
  update,  expressed as a percentage of total CPU time.  In a true SMP
  environment, if 'Irix mode' is Off, top will operate  in  number  of
  CPUs.  You toggle 'Irix/Solaris' modes with the 'I' interactive com-
  mand.

Donc, oui, le haut de l'écran affiche le pourcentage du CPU par cœur, mais vous pouvez changer ce comportement en appuyant sur 'I'.

13voto

Daisetsu Points 557

Oui, si un processus dans top dépasse 100% ou si top affiche >1.0 en charge, cela signifie que plus d'un cœur est occupé, ou que le système est sursouscrit. La sursouscription signifie qu'il y a plus de travail à faire sur le cœur que ce qui est physiquement gérable.

En top vous pouvez également trier la vue par différents paramètres (comme la mémoire utilisée). Si vous voulez voir par quoi vous pouvez trier, référez-vous à l'aide ou à la page de manuel de top .

Vous pouvez également voir toutes sortes d'informations sur les processus eux-mêmes, comme la mémoire virtuelle ou résidente utilisée par le processus et s'il est en sommeil ou en cours d'exécution, ainsi que le temps processeur utilisé.

La moyenne de la charge dans le haut, si nécessaire, peut également être visualisée par la touche uptime commandement.

5voto

hpaknia Points 734

Si l'hyper threading est activé, l'utilisation du CPU affichée dans top est l'utilisation par CPU, pas cœur. Par exemple, sur un serveur avec 24 cœurs et 2 threads par cœur (total de 48 CPU), l'utilisation peut aller jusqu'à 4800. Exécution de lscpu -p fournissent une impression décente des cœurs et des processeurs :

$ lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3
0,0,0,0,,0,0,0,0
1,1,0,0,,1,1,1,0
...
...
...
46,22,1,1,,22,22,22,1
47,23,1,1,,23,23,23,1

J'ai effectué les étapes suivantes pour vérifier la réponse ci-dessus :

  1. Sur le serveur, j'ai lancé cette boucle :

    $ while true; do x="reee";x="asdasd";z="asdasdasd;"; done

  2. Sur un autre fil de discussion, j'ai lancé top et vérifié que bash utilise environ 100% du processeur :

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 14791 hpaknia 20 0 129156 5188 1856 R 99.7 0.0 28:08.54 bash

  3. Ensuite, dans le même terminal du haut, j'ai appuyé sur 1 pour voir l'utilisation par CPU. Seul le thread 3 du CPU sur 48 utilise 100% du CPU :

    %Cpu3 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

Dans mon cas, chaque cœur a 2 threads CPU. Si top Le pourcentage a montré l'utilisation par cœur, la valeur devait être de 50% mais ce n'est pas le cas. Parce que top montre l'utilisation des threads par CPU.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X