Comment définir les priorités de processus avec nice et renice sous Linux



Les commandes nice et renice offrent la possibilité d’ajuster la manière dont le noyau de votre système d’exploitation gère les processus, en modifiant leurs niveaux de priorité. Ce guide explique comment les utiliser dans les environnements Linux et Unix, y compris macOS.

Gestion des processus : un équilibre délicat

Au sein d’un système Linux ou Unix, une multitude de processus s’exécutent en arrière-plan, bien avant que vous ne lanciez une application. Bon nombre de ces processus sont des éléments essentiels de Linux lui-même ou des outils de support pour votre interface graphique. Ces opérations en coulisses consomment des ressources système, notamment le temps processeur. Le noyau Linux est le chef d’orchestre de ces processus.

Le noyau détermine quels processus reçoivent de l’attention et des ressources immédiates, et lesquels doivent patienter. Il ajuste constamment les priorités pour optimiser les performances du système et assurer une répartition équitable des ressources. Certains processus bénéficient d’une priorité plus élevée, car leur bon fonctionnement est essentiel à la stabilité du système, par exemple, les processus système par rapport à votre navigateur web.

Le concept de « nice value »

La « nice value » est un critère clé utilisé par le noyau pour gérer les priorités des processus. Chaque processus se voit attribuer une valeur « nice », un entier compris entre -19 et 20. Par défaut, tous les processus sont lancés avec une valeur « nice » de 0.

Plus la valeur « nice » est élevée, plus le processus est « gentil » envers les autres. En d’autres termes, une valeur « nice » élevée indique au noyau que ce processus accepte de patienter et consommera moins de ressources. Une valeur négative indique le contraire, plus elle est négative, plus le processus se montre gourmand en ressources et tente d’obtenir le maximum de temps processeur, potentiellement au détriment des autres processus.

La commande nice sert à définir la valeur « nice » lors du lancement d’un processus. La commande renice permet, quant à elle, d’ajuster la valeur « nice » d’un processus en cours d’exécution.

Utilisation de la commande « nice »

La commande nice permet de modifier la priorité d’un programme au moment de son lancement. Cela nous donne le contrôle sur l’importance que le noyau accordera à ce processus comparé aux autres.

Imaginons qu’un développeur ait créé un programme nommé « ackermann », destiné à calculer la fonction d’Ackermann, une opération gourmande en ressources. Pour lancer ce programme, il utiliserait la commande suivante :

./ackermann

Pour observer le programme en action, on peut utiliser la commande top :

top

Dans l’affichage de top, on peut voir les détails du processus « ackermann ». La colonne « NI » affiche sa valeur « nice », qui est de 0 par défaut.

Relançons « ackermann », mais cette fois, rendons-le moins gourmand. Nous allons lui attribuer une valeur « nice » de 15. La syntaxe est la suivante : nice, un espace, -15, un espace, puis le nom du programme à lancer :

nice -15 ./ackermann

Il est important de noter que le -15 n’indique pas une valeur négative de quinze, mais plutôt une valeur positive de quinze. Le tiret - est utilisé pour signaler que nous passons une option à la commande nice. Pour définir une valeur « nice » négative, il faudra utiliser deux tirets --.

Si l’on relance la commande top, on observe les modifications apportées à l’utilisation des ressources par « ackermann ».

top

Avec une valeur « nice » de 15, « ackermann » n’est plus le processus qui consomme le plus de temps processeur. D’autres, comme GNOME et Rhythmbox, sont maintenant plus actifs. La commande nice a donc permis de réduire l’activité de « ackermann ».

Inversement, on peut donner à « ackermann » une valeur « nice » négative, en utilisant deux tirets --. Pour rendre un processus plus égoïste, il est nécessaire d’utiliser sudo. Tout utilisateur peut rendre ses processus plus « gentils », mais seuls les administrateurs peuvent les rendre plus « égoïstes ».

sudo nice --10 ./ackermann

Observons à nouveau l’effet dans top :

top

Cette fois, « ackermann » a une valeur « nice » de -10. Il est revenu en tête de liste et utilise une part plus importante du temps processeur.

Utilisation de la commande « renice »

La commande renice permet d’ajuster la valeur « nice » d’un processus déjà en cours d’exécution, sans avoir à l’arrêter et le relancer avec nice. Il est possible de modifier cette valeur à la volée.

renice prend comme argument l’ID de processus (PID) du processus concerné. On peut obtenir ce PID soit depuis la colonne « PID » de top, soit en utilisant ps et grep, comme suit (en remplaçant « dave » par votre nom d’utilisateur et « ackermann » par le nom du processus):

ps -eu dave | grep ackermann

Une fois le PID obtenu, on peut l’utiliser avec renice. Ramenons « ackermann » à un comportement plus « gentil » avec une valeur « nice » de 5. Pour modifier la priorité d’un processus en cours d’exécution, il faut utiliser sudo. On notera l’absence du tiret - pour la valeur positive « 5 » :

sudo renice -n 5 2339

La commande confirme que renice a bien modifié la valeur « nice », en affichant l’ancienne et la nouvelle valeur.

Le noyau gère habituellement les priorités et la répartition des ressources de manière efficace. Cependant, si vous avez une tâche longue et gourmande en ressources à effectuer et que son temps d’exécution n’est pas une priorité, il peut être judicieux de lui assigner une valeur « nice » élevée. Cela permettra d’optimiser la fluidité du système, ce qui sera bénéfique pour tous.