CPU : charge moyenne, utilisation et priorités
Tu sais lire les trois nombres de uptime et les comparer au nombre de cœurs, lire la ligne CPU de top, dire si un processus est limité par le calcul ou par le disque, et régler sa priorité ou les cœurs qu'il a le droit d'utiliser.
Mis à jour le
À recouper avec le cours. Cette leçon a été écrite à partir du plan du chapitre, avant relecture avec les supports. En cas de doute, le cours fait foi.
Pourquoi on voit ça
« L’application est lente. » C’est la plainte la plus fréquente qu’un administrateur reçoit, et elle ne dit rien sur la cause. Quatre ressources peuvent manquer : le processeur, la mémoire, le disque, ou une limite fixée par le système. Ce chapitre t’apprend à trouver laquelle.
On commence par le processeur (CPU), parce que c’est le premier réflexe : on tape uptime ou top et on regarde. Encore faut-il lire correctement ce qui s’affiche. Une charge de 4 peut être excellente ou catastrophique selon la machine.
La charge moyenne
uptime
14:02:11 up 12 days, 3:41, 2 users, load average: 0.52, 0.80, 0.91
Les trois nombres de la fin sont la charge moyenne (load average) sur la dernière minute, les 5 dernières minutes et les 15 dernières minutes, dans cet ordre.
La charge, c’est le nombre moyen de processus qui utilisent un cœur ou qui attendent : soit leur tour sur un cœur, soit la fin d’une entrée/sortie sur le disque.
L’image des caisses
Imagine un supermarché. Chaque cœur est une caisse. La charge, c’est le nombre de clients en train de payer plus ceux qui font la queue.
- 4 caisses, 2 clients : tout le monde passe tout de suite.
- 4 caisses, 4 clients : toutes les caisses sont occupées, personne n’attend.
- 4 caisses, 10 clients : 6 personnes font la queue. Ça ralentit.
La charge seule ne veut donc rien dire. Il faut la comparer au nombre de cœurs :
nproc
4
| Charge par rapport au nombre de cœurs | Ce que ça veut dire |
|---|---|
| nettement en dessous | la machine a de la marge |
| à peu près égale | tous les cœurs travaillent, pas de file d’attente |
| au-dessus | des processus attendent : la machine est saturée |
Lire la tendance
Les trois nombres racontent une histoire. On les lit de gauche (récent) à droite (ancien).
| Exemple | Lecture |
|---|---|
8.12, 3.40, 1.05 |
la charge monte : le problème vient de commencer |
1.05, 3.40, 8.12 |
la charge baisse : le pic est passé |
4.00, 4.10, 3.90 |
charge stable depuis un quart d’heure |
Charge et utilisation : deux choses différentes
L’utilisation du CPU est un pourcentage : la part du temps où le processeur travaille vraiment. La charge est un nombre de processus : la demande, file d’attente comprise.
Les deux ne vont pas toujours ensemble. Comme la charge compte aussi les processus bloqués sur une entrée/sortie, tu peux avoir une charge très haute avec un processeur presque inactif. Dans ce cas, ce n’est pas le calcul qui manque, c’est le disque qui ne suit pas.
Pour faire la différence, il faut regarder à quoi le processeur passe son temps.
La ligne CPU de top
top
En haut de l’écran, la troisième ligne ressemble à ceci :
%Cpu(s): 12.0 us, 3.0 sy, 0.0 ni, 84.5 id, 0.5 wa, 0.0 hi, 0.0 si, 0.0 st
C’est la répartition du temps du processeur, en pourcentage. Quatre champs sont à connaître :
| Champ | Nom | Le processeur passe ce temps… |
|---|---|---|
us |
user | dans les programmes ordinaires (espace utilisateur) |
sy |
system | dans le noyau (appels système) |
id |
idle | à ne rien faire |
wa |
I/O wait | à attendre la fin d’une entrée/sortie |
Le champ ni compte le temps passé dans les processus dont on a baissé la priorité avec nice (voir plus bas).
Comment lire :
usélevé → une application calcule beaucoup.syélevé → le noyau travaille beaucoup (énormément d’appels système).idélevé → le processeur a de la marge.waélevé → le processeur attend le disque. Le problème est côté stockage.
top dit laquelle.Sous cette ligne, la liste des processus est triée par consommation de CPU : le coupable est en général tout en haut. Dans la colonne %CPU, 100 correspond à un cœur entier. Un processus à 200 % occupe deux cœurs.
CPU-bound ou I/O-bound
On classe un processus selon ce qui le freine.
| Type | Ce qui le limite | Exemples | Signes |
|---|---|---|---|
| CPU-bound | la puissance de calcul | compression, chiffrement, encodage vidéo | us élevé, processus près de 100 % |
| I/O-bound | les entrées/sorties (disque, réseau) | sauvegarde, copie de fichiers, base de données qui lit le disque | wa élevé, processus à quelques % de CPU |
La distinction donne la solution. À un processus CPU-bound, il faut des cœurs plus rapides ou plus nombreux. À un processus I/O-bound, ajouter des cœurs ne sert à rien : il faut un disque plus rapide ou moins d’accès au disque.
La priorité : nice et renice
Quand plusieurs processus veulent le processeur, le noyau partage. Tu peux influencer ce partage avec la valeur nice, la « gentillesse » du processus.
- L’échelle va de -20 à 19. La valeur par défaut est 0.
- Plus la valeur est haute, plus le processus est gentil : il laisse passer les autres. Il est donc moins prioritaire.
- -20 est la priorité la plus forte, 19 la plus faible.
- Un utilisateur ordinaire peut seulement augmenter la valeur. Les valeurs négatives sont réservées à root.
Lancer une commande avec une valeur nice :
nice -n 10 tar czf sauvegarde.tar.gz /var/www
Changer la valeur d’un processus déjà lancé, à partir de son PID :
renice -n 5 -p 1234
1234 (process ID) old priority 0, new priority 5
Dans top, la colonne NI affiche la valeur nice de chaque processus.
La valeur nice ne ralentit pas un processus seul sur la machine. Elle ne joue que lorsqu’il y a concurrence pour le processeur.
L’affinité : taskset
L’affinité est la liste des cœurs sur lesquels un processus a le droit de tourner. Par défaut : tous. Les cœurs sont numérotés à partir de 0.
Voir l’affinité d’un processus :
taskset -cp 1234
pid 1234's current affinity list: 0-3
La modifier (ici, cœurs 0 et 1 seulement) :
taskset -cp 0,1 1234
Lancer une commande directement sur un cœur précis :
taskset -c 2 ./calcul.sh
-c indique qu’on donne une liste de numéros de cœurs, -p qu’on vise un processus existant. À quoi ça sert : réserver des cœurs à une application sensible, ou cantonner un traitement lourd pour qu’il n’envahisse pas toute la machine.
À ne pas confondre : nice règle l’ordre de passage, taskset règle l’endroit où le processus tourne.
À retenir
uptimedonne la charge moyenne sur 1, 5 et 15 minutes. On la compare toujours au nombre de cœurs (nproc).- Charge au-dessus du nombre de cœurs : des processus attendent. Charge ≠ utilisation : la charge compte aussi l’attente du disque.
- Ligne CPU de
top:usprogrammes,synoyau,idrepos,waattente d’entrées/sorties. - CPU-bound : limité par le calcul (
ushaut). I/O-bound : limité par le disque ou le réseau (wahaut). nicelance,renicemodifie. De -20 (très prioritaire) à 19 (très gentil). Valeurs négatives : root seulement.taskset -cpaffiche ou fixe les cœurs autorisés pour un processus.
Entraînement
12 questions, dont 3 à compléter. Tu réponds, on passe à la suivante. La note arrive à la fin.
Ta note
Cartes · 8
Réviser les cartes ici
Pourquoi