Comment le temps CPU et l'utilisation CPU sont-ils les mêmes?

23

Dans la page Wikipedia pour le temps CPU , il est dit

Le temps CPU est mesuré en ticks d'horloge ou en secondes. Souvent, il est utile de mesurer le temps processeur en pourcentage de la capacité du processeur, ce qui est appelé l'utilisation du processeur.

Je ne comprends pas comment une durée peut être remplacée par un pourcentage. Quand je regarde top, ne me %CPUdit pas que j'utilise MATLAB2.17 de mes cœurs?

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
18118 jasl      20   0 9248400 261528  78676 S 217.2  0.1   8:14.75 MATLAB      

Question

Afin de mieux comprendre l'utilisation du processeur, comment puis-je calculer moi-même l'utilisation du processeur?

Jasmine Lognnes
la source
Appuyez sur «1» pendant que «top» est ouvert pour obtenir plus de granularité par cœur.
Peter
C'est le numéro un ( 1).
Michael Hampton
Laissez Linux vous montrer à quel point chaque processeur est occupé par cette demande de ligne de commande. mpstat -P ALL 5 3 enter pour statut multiprocesseur 5 secondes 3 intervalles. Divisez le% CPU rapporté par votre nombre de cœurs pour obtenir un% occupé CPU moyen. iostat -xm 5 3 enter vous indiquera le nombre de cœurs / CPU dont vous disposez.
Wilson Hauck

Réponses:

32

Le temps CPU est alloué en tranches de temps discrètes (ticks). Pour un certain nombre de tranches de temps, le CPU est occupé, d'autres fois ce n'est pas le cas (ce qui est représenté par le processus inactif). Dans l'image ci-dessous, le CPU est occupé pour 6 des 10 tranches de CPU. 6/10 = 0,60 = 60% du temps occupé (et il y aurait donc 40% de temps inactif).

entrez la description de l'image ici

Un pourcentage est défini comme "un nombre ou un taux qui est exprimé comme un certain nombre de parties de quelque chose divisé en 100 parties". Donc, dans ce cas, ces parties sont des tranches de temps discrètes et quelque chose est des tranches de temps occupé par rapport aux tranches de temps inactif - le taux de tranches de temps occupé à inactif.

Étant donné que les processeurs fonctionnent en GHz (milliards de cycles par seconde). Le système d'exploitation découpe ce temps en unités plus petites appelées ticks. Ils ne font pas vraiment 1/10 de seconde. Le taux de tick dans Windows est de 10 millions de ticks en une seconde et sous Linux, il est sysconf(_SC_CLK_TCK)(généralement 100 ticks par seconde).

Dans quelque chose comme top, les cycles CPU occupés sont ensuite encore décomposés en pourcentages de choses comme le temps utilisateur et le temps système. Sous topLinux et perfmon sous Windows, vous obtiendrez souvent un affichage qui dépasse 100%, car le total est de 100% * the_number_of_cpu_cores.

Dans un système d'exploitation, c'est le travail du planificateur d'allouer ces précieuses tranches aux processus, c'est donc le planificateur qui le signale.

Kyle Brandt
la source
1
Les tranches de temps ne sont pas mesurées en milliardièmes de seconde. Ils ne sont pas si courts. Ils sont plus susceptibles de se situer entre 0,1 ms et 10 ms. La résolution des valeurs de temps dans les API n'est pas identique au taux d'interruptions du minuteur. Certains appels d'API sous Linux ont des temps spécifiés en nanosecondes, mais vous ne voudriez pas que le minuteur interrompt aussi souvent. Si vous aviez un million d'interruptions par seconde, vous passeriez tout le temps CPU sur les changements de contexte.
kasperd
2
Voulez-vous dire 1000 tiques? Tous mes systèmes Linux sont soit 1000 ticks (EL5 et EL6), soit 1000 ticks + tickless (EL7). Ou voulez-vous dire autre chose?
Michael Hampton
1
La page de manuel indique: "La variable correspondante est obsolète." Je ne pense pas que l'on puisse s'y fier. J'ai vérifié la configuration du noyau dans /boot/config-2.6.32- quoi que ce soit ce mois-ci ...
Michael Hampton
1
Aha, non, ils ne sont pas signalés de la même façon. CLK_TCK est une valeur mise à l'échelle explicitement pour l'espace utilisateur, et est apparemment toujours 100 quel que soit le nombre de ticks que le noyau utilise réellement. J'ai trouvé de bonnes explications sur SO ( 1 , 2 )
Michael Hampton
2
Je pense également que les «tics» de Windows auxquels cet appel d'API fait référence ne sont pas les mêmes que la fréquence d'interruption du minuteur Windows et ne sont donc pas vraiment comparables.
Michael Hampton
15

Le temps CPU est le temps que le processus utilise le CPU - la conversion en pourcentage se fait en divisant par la quantité de temps réel écoulé.

Donc, si j'ai un processus qui utilise 1 seconde de temps CPU sur une période de 2 secondes, il utilise 50% d'un CPU.

Dans le cas de votre processus MATLAB, 217% indique qu'il a utilisé 2,17 secondes de temps processeur par seconde au cours du dernier intervalle d'échantillonnage - en fait, monopoliser 2 cœurs de processeur et en prendre un tiers.

Shane Madden
la source
5
Ou il pourrait utiliser 25% de 8 CPU et une partie d'un neuvième.
Bob Jarvis - Rétablir Monica