Comment une moyenne de charge de 0,00 peut-elle exister?

12

Je comprends que l'équilibre de charge est un moyen de mesurer l'occupation du processeur. Cependant, je ne comprends pas comment une moyenne de charge 0.00peut exister. Le noyau ne fonctionne-t-il pas toujours? Cela ne fait-il pas partie de la charge CPU?

NerdOfLinux
la source
6
Notez que dans la majorité des cas, ce que vous voyez comme 0,00 est vraiment 0,0001 ou plus
PlasmaHH
1
Autrefois, c'était la longueur moyenne de la file d'attente d'exécution. En d'autres termes, combien de processus étaient prêts à exécuter (et sans attendre les E / S, etc.). S'il n'y en a pas, c'est 0,00. Ces jours-ci, selon mon expérience, cela n'est possible que si vous n'exécutez pas un bureau graphique mais uniquement un serveur sans interface graphique.
Thorbjørn Ravn Andersen
Juste pour être complet, je pense que c'était l'un des BSD qui pendant un moment avait un bug du noyau où le thread inactif du noyau était compté dans la moyenne de charge, provoquant une moyenne de charge de 1,00 lorsque le système ne faisait rien du tout. Cela a été résolu assez rapidement.
un CVn

Réponses:

16

La moyenne de charge sur une période de temps est le nombre moyen de processus qui se disputaient le CPU au cours de cette période. Le "noyau" ne fonctionne pas s'il n'y a rien à faire; plus précisément, s'il n'y a rien à faire, la CPU est affectée à un thread spécial "inactif" qui n'est pas compté (et qui peut faire des choses comme mettre la CPU est un état où elle attend une interruption).

Ainsi, par exemple, une moyenne de charge de 0,6 sur 5 minutes signifie généralement que pendant ces 5 minutes, le processeur a été utilisé pendant 3 minutes au total par certains processus (ou par le noyau), et pendant 2 minutes au total, il était inactif. Mais, comme l'observe @UKMonkey, cela pourrait signifier qu'après 4 minutes et demie de ne rien faire, 6 processus ont concouru pour le CPU pendant les 30 dernières secondes ...

Le processeur est inactif s'il n'y a aucun processus qui souhaite l'utiliser pour exécuter du code, car tous les processus attendent une opération d'entrée ou de sortie pour se terminer ou dorment en attendant d'être réveillés à un certain moment.

Les liens de @ Panther fournissent des discussions plus approfondies sur les moyennes de charge.

AlexP
la source
1
La moyenne de charge de 0,6 pendant 5 minutes pourrait également signifier qu'elle n'a rien fait pendant 4 minutes et demie - puis dans les 30 dernières secondes, un nombre important de processus attendaient le temps CPU ... Ce n'est pas une indication de la quantité de travail Le CPU a fait - mais combien de processus attendaient pour l'utiliser.
UKMonkey
@UKMonkey: Parfaitement vrai ... Les moyennes sont des moyennes et la même moyenne peut être obtenue de plusieurs façons. Modifié la réponse pour expliquer qu'une moyenne modérée ne signifie pas que les pics sont également raisonnables.
AlexP
13

Une moyenne de charge est une mesure de la surcharge d'un cœur de processeur en termes de nombre de processus souhaitant l'utiliser simultanément.

Les éléments suivants supposent un processeur à cœur unique (un seul thread):

  • 0,0

    Le CPU ne fait rien du tout. Si un processus devait commencer à utiliser le CPU, ce serait le seul à l'utiliser.

    Un processeur inactif ne signifie pas qu'aucun processus n'est en cours d'exécution. Par exemple, les services d'arrière-plan et le noyau sont toujours en cours d'exécution et occupent toujours de la mémoire. Ils n'utilisent tout simplement aucun processeur, car ils ne font rien.

  • 1.0

    Le processeur est à son utilisation maximale, mais il n'y a aucun conflit entre les processus d'utilisation du processeur. Autrement dit, un seul processus est en cours d'exécution, il est donc capable de réclamer 100% du temps CPU pour lui-même. Alternativement, plusieurs processus sont en cours d'exécution mais aucun ne revendique 100% de CPU, et leur utilisation combinée de CPU s'élève à 100%. Ils fonctionnent tous aussi vite qu'ils le feraient même s'ils avaient le processeur pour eux.

  • Supérieur à 1,0

    Le processeur est à son utilisation maximale, et plusieurs processus souhaitent l'utiliser simultanément afin qu'ils s'exécutent effectivement plus lentement qu'ils ne pourraient autrement fonctionner sur un processeur inactif. Par exemple, une moyenne de charge de 3,0 indique que les processus s'exécutent à un tiers de la vitesse qu'ils souhaitent exécuter. Une moyenne de charge de 50,0 indique que les processus s'exécutent à 1/50 de la vitesse qu'ils souhaitent exécuter, en raison de tous les autres processus en cours d'exécution. Autrement dit, des chiffres supérieurs à 1,0 indiquent que le processeur disponible est étiré entre de plus en plus de processus.

Avoir un processeur multi-cœur ne change pas la signification des chiffres mais peut changer leur interprétation. Par exemple, si vous avez un processeur à 4 cœurs, une charge de 1,0 équivaut toujours à un processus utilisant 100% de processeur sur un cœur, mais il y a trois autres cœurs. Ainsi, sur un processeur à 4 cœurs, le point d'efficacité maximale est 4,0, et non 1,0 - et le point auquel tout fonctionne à 1/3 est 12,0, et non 3,0. Pour ajouter à la complexité, un seul processus peut avoir plus d'un thread réclamant chacun son propre processeur. Un seul processus peut donc utiliser 100% des 4 cœurs s'il est multithread.

Note importante

L'utilisation du processeur n'est qu'une ressource qui peut limiter les performances d'un processus. Les E / S en sont un autre et ne sont pas prises en compte dans la charge du processeur. Un processus utilisant une certaine quantité de CPU ne pourra pas nécessairement en utiliser davantage sur une machine plus légère, car il pourrait frapper d'autres goulots d'étranglement.

Quelle est la meilleure moyenne de charge

Cela dépend vraiment de ce que vous faites et si vous préférez la réactivité, ou que le processeur travaille le plus dur possible.

Pour quelque chose qui doit faire autant que possible, la moyenne de charge doit être égale ou légèrement supérieure au nombre de cœurs. Tout ce qui est beaucoup plus grand que cela indique que vous pourriez faire plus, plus rapidement, si vous sépariez les tâches sur plus d'ordinateurs / serveurs.

Pour quelque chose qui doit être aussi réactif que possible (réagir rapidement), la moyenne de la charge doit être une marge confortable inférieure au nombre de cœurs, comme la moitié ou le tiers, ce qui permet une certaine variation intermittente avant tout ralentissement.

Pour un invité de virtualisation (par exemple KVM), plus la moyenne de charge est faible, mieux c'est, car vous partagez en fait le processeur avec d'autres invités sur le même hôte.

thomasrutter
la source
J'ai été surpris de voir que parfois les threads "en attente d'E / S" sont inclus dans la charge moyenne serverfault.com/a/524818/27813, il semble ...
rogerdpack
@rodgerpack Oui, Dles processus d'état sont toujours inclus dans la moyenne de charge sous Linux. Oui, c'est déroutant. Oui, nous devrions principalement examiner d'autres mesures que la charge moyenne.
kubanczyk
2

Une moyenne de charge de 0,00 signifie que votre système est inactif et qu'il n'y a pas de retard, de stress ou de goulot d'étranglement sur votre CPU pendant la durée mesurée.

Cela ne signifie pas que votre CPU est inactif, cela signifie simplement que si un processus veut du temps CPU, il n'y a pas d'attente.

Il est difficile d'en dire plus sur le peu que vous avez publié, car cela peut dépendre de la façon dont vous avez mesuré votre charge (système, par utilisateur?) Et sur quelle période.

Pour plus de détails et une lecture intéressante, voir

https://www.tecmint.com/understand-linux-load-averages-and-monitor-performance/

http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html

Panthère
la source