htop expliqué, partie 6 : temps et priorités des processus
Article arrivé 1er sur Hacker News, 1er sur /r/sysadmin, 2nd sur /r/linux), traduit avec l’accord de son auteur Pēteris Ņikiforovs, il présente la commande htop et les notions de base des composants d’un système GNU/Linux que cette commande affiche.
Voici les différents chapitres déjà publiés :
- l’uptime
- la load average (charge moyenne)
- les processus
- les processus utilisateur
- l’état des processus
Aujourd’hui : le temps du processus et la priorité
Temps et priorités des processus
Linux est un système d’exploitation multi-tâches, ce qui signifie que malgré le fait que vous ayez un seul CPU, vous pouvez exécuter plusieurs processus en même temps. Vous pouvez vous connecter à votre serveur via SSH et jeter un oeil à la sortie de htop alors que votre serveur web délivre le contenu de votre blog à vos lecteurs via Internet.
Comment est-ce possible quand un seul CPU ne peut exécuter qu’une instruction à la fois ?
La réponse est dans le temps partagé.
Un processus s’exécute un court instant, ensuite il est suspendu tandis que les autres processus en attente d’exécution s’exécutent tour à tour pendant un moment. La période de temps pendant laquelle un processus s’exécuter est appelé la tranche de temps (ndt : time slice).
La tranche de temps dure habituellement quelques millisecondes donc vous ne la remarquez pas vraiment quand votre système ne subit pas une forte charge. (il serait intéressant d’ailleurs de connaître combien la tranche de temps dure habituellement sous Linux)
Cela devrait expliquer pourquoi la moyenne de la charge est un nombre moyen de processus en cours d’exécution. Si vous n’avez qu’un cœur et que la moyenne de charge est de 1.0, le CPU a été utilisé à 100%. Si la moyenne de charge est plus grande que 1.0, cela signifie que que le nombre de processus en attente d’exécution est plus grand que celui que le processus peut exécuter, donc vous pourriez ressentir des lenteurs et des retards. Si la charge est plus petite que 1.0, cela signifie que le CPU est parfois en sommeil et qu’il ne fait rien.
Cela devrait également vous donner un indice de pourquoi de temps en temps la durée d’exécution d’un processus qui s’est exécuté pendant 10 secondes est plus grande ou plus petite qu’exactement 10 secondes.
Gentillesse et priorité d’un processus
Quand vous avez plus de tâches à exécuter que le nombre disponible de cœurs de CPU, vous devez d’une façon ou de l’autre décider quelle tâche sera la suivante à être exécutée et laquelle continuera d’attendre. C’est la tâche dont est responsable l’ordonnanceur (ndt : scheduler).
L’ordonnanceur du noyau Linux est responsable de quel devra être le prochain processus à prendre dans une file d’attente et cela dépend de l’algorithme de l’ordonnanceur utilisé par le noyau.
Vous ne pouvez généralement pas influer sur l’ordonnanceur mais vous pouvez lui faire savoir quels processus sont les plus importants pour vous et l’ordonnanceur peut prendre ce paramètre en compte.
La gentillesse (NI) est la priorité en espace utilisateur des processus, allant de -20 qui est la plus haute priorité à 19 qui est la plus basse. Cela peut être perturbant mais vous pouvez penser qu’un gentil processus cède la place à un processus moins gentil. Donc plus gentil est le processus, plus il cède sa place.
Des informations que j’ai réunies en lisant StackOverflow et d’autres sites, augmenter le niveau de gentillesse 1 devrait faire qu’un processus cède sa place de 10% de temps CPU à un autre processus.
La priorité (PRI) est en espace noyau la priorité utilisé par le noyau Linux. Les priorités vont de 0 à 139 et les valeurs de 0 à 99 sont pour le temps-réel et de 100 à 139 pour les utilisateurs.
Vous pouvez changer la gentillesse et le noyau le prend en compte mais vous ne pouvez pas changer la priorité.
La relation entre la valeur de la gentillesse et la priorité est :
PR = 20 + NI
Donc la valeur PR = 20 + (-20 to +19) est de 0 à 39 qui le fait correspondre aux valeurs entre 100 et 139.
Vous pouvez fixer la gentillesse d’un processus avant de le lancer.
nice -n niceness program
Changer la gentillesse d’un programme qui s’exécute déjà se fait avec renice.
renice -n niceness -p PID
Voici ce que la couleur de l’utilisation CPU signifie :
Bleu : processus de basse priorité (nice > 0)
Vert : processus de priorité normale
Rouge : processus noyau
Plus d’informations à http://askubuntu.com/questions/656771/process-niceness-vs-priority
J’espère que ces différentes parties sur les processus vous auront aidé à mieux comprendre le fonctionnement des processus. Nous continuerons dans un prochain article avec la mémoire.