# Load average

Le load average désigne, sous les systèmes UNIX, une moyenne de la charge système, une mesure de la quantité de travail que fait le système durant la période considérée. Celle-ci est disponible via la commande top ou uptime, ou encore via le fichier système /proc/loadavg.

## Exemple

Le premier nombre, 1.27, est une moyenne de la charge calculée sur une minute, avec une mise à jour toutes les 5 secondes. Le second nombre est calculé sur cinq minutes, et le troisième sur quinze minutes. Il est un très bon indicateur de la (sur)charge de travail d'un système, mais ne permet pas d'en identifier la cause.

## Ce que représente la charge

La charge représente le nombre de processus en train d'utiliser ou en train d'attendre le processeur plus, sous la majorité des systèmes, le nombre de processus bloqués. Ceci rend l'interprétation du nombre plus difficile.
Le nombre maximum de processus réellement en cours d'exécution dépend du nombre de processeurs : 1 pour un monoprocesseur, 2 pour un biprocesseur…
Une charge de 2 indique qu'il y a forcément un processus en attente sur un monoprocesseur, mais peut être simplement deux processus en cours d'exécution sur un biprocesseur.

## Comment interpréter la charge ?

Cas d'un seul processeur, et d'optimisations systèmes (par opposition aux optimisations applicatives, à ne jamais négliger)
* La charge est < 1
Une charge < 1 indique qu'il n'y a pas assez de processus pour occuper complètement la machine. La « compétition » pour le processeur est donc inexistante ; ce dernier exécute les instructions rapidement et est libéré. Un problème de performance proviendra donc certainement des demandes de traitement qui ne parviennent pas assez rapidement à la machine.
→ Pour améliorer les performances : effectuer plus de tâches simultanées, augmenter le débit des requêtes…
* La charge est constamment à 1
Une charge de 1 constante signifie qu'il y avait à tout moment un et un seul processus en état de travail. Aucun processus n'a donc « attendu son tour » pour être traité par le processeur. Cependant, s'il y a un processus unique qui occupe constamment le processeur, il pourrait éventuellement s'exécuter plus rapidement sur un processeur plus puissant. En effet, même si la file d'attente est vide, le processus « en cours » peut avoir besoin de plus de rapidité.
→ Pour améliorer les performances : s'il y a un seul processus, en ajouter et observer la charge. Sinon, l'équilibre est atteint, et plus de tâches à effectuer impliqueront une amélioration au niveau processeur, mémoire et/ou entrées-sorties.
* La charge est supérieure à 1
Ceci ne signifie pas forcément qu'un processeur plus rapide résoudrait le problème. En effet, la charge inclut généralement les processus en attente d'entrées-sorties. Un processus dans ce cas sera donc comptabilisé, mais il est « bloqué » car il « attend » un périphérique d'I/O, et non pas le processeur. Il faut donc prêter attention aux autres affichages des commandes comme top ; où l'utilisation processeur globale est également indiquée. Si le processeur est inactif (idle) à 90 % mais que la charge est élevée, un processeur plus véloce n'y changera rien. S'il reste « collé » à 100 % d'utilisation, alors il est certainement en cause. (Autrement dit : un load > 1 n'indique une contention sur le processeur que si, et seulement si, le idle = 0.0.)
→ Pour améliorer les performances : examiner le taux d'utilisation global du processeur. Minimiser si possible les I/O (la quantité de mémoire vive est elle suffisante ?). Agir ensuite en conséquence sur les points faibles identifiés.

## Calcul de la moyenne de charge

La moyenne affichée est calculée avec une pondération : plus la mesure est récente, et plus elle est importante. La décroissance du poids est exponentielle. Cette subtilité peut être ignorée dans la majorité des cas.

## Charge processeur versus utilisation processeur

L'étude comparative sur différents indices de charge menée par Ferrari et Zhou montre que l'information de charge basée sur la longueur de la file de processus est plus efficace pour connaitre la charge globale d'un système, probablement parce que quand un hôte est fortement chargé, l'utilisation du processeur va continuellement plafonner à 100 % alors que la file d'attente peut donner une évaluation plus précise et évolutive de l'engorgement du système. Par exemple, deux systèmes dont le processeur est utilisé à 100 %, l'un avec trois processus en attente et l'autre avec six processus en attente, sont évidemment très différemment chargés.