next up previous contents Next: Consommation mémoire et CPU: Up: Processus et variables d'environnement. Previous: Liste des signaux courants.   Table des matières  


10.7 Nice et renice: programmer les priorités.

Tous les processus se voient allouer une durée d'exécution par le noyau. Si tous les processus avait la même durée allouée, les performances se dégraderaient à mesure que le nombre de processus augmenterait. Le noyau utilise un jeu de règles heuristiques pour estimer la durée à allouer à un processus. Le noyau essaie d'être équitable -deux utilisateurs requérant le même usage de la CPU devrait obtenir la même priorité, donc la même durée.

La plupart des processus sont en attente d'une frappe de touche, d'un envoi de données via réseau ou via un prériphérique, etc. Ces processus ne consomment donc pas de CPU.

En revanche, quand plusieurs processus travaillent normalement, le noyau doit décider s'il faut donner une priorité plus grande à tel ou tel autre processus. Que se passe-t-il si un processus est en train de faire certaines opérations plus consommatrices de CPU que celles d'un autre processus? Comment réagit le noyau? La réponse tient dans une caractéristique d'UNIX appelée programme de priorité (ou niceness). La gamme de programmation des priorités s'étend de -20 à +20. Vous pouvez fixer la priorité d'un processus par la commande renice:

renice <priorite> <PID>

renice <priorite> -u <utilisateur>

renice <priorite> -g <groupe> 



Un exemple typique concerne le programme SETI. [SETI signifie Search for Extraterrestrial Intelligence. SETI est une initiative basée sur des divers fonds d'origines variées pour balayer le ciel à la recherche de signaux radios en provenance d'autres civilisations. Les données que SETI recueille doivent être traitées de manière intensive. SETI distribue une partie de ses données à qui veut exécuter le programme seti en arrière-plan de manière à tirer parti de l'inactivité de millions de machine. Il y a même un économiseur d'écran devenu populaire. Malheureusement, le collègue qui partage mon bureau exécute seti à la priorité -19 au lieu de +19, de sorte que rien ne fonctionne correctement sur sa machine...]. Mettez la priorité à +19 à l'aide de la commande:

renice +19 <PID>


pour éviter autant que possible de faire planter votre machine.

Notez que les valeurs de nice présente un ordre inverse à ce qui est souvent attendu: +19 signifie qu'un processus aura peu de CPU, tandis que -19 donne à un processus beaucoup de CPU. Seul le super-utilisateur peut fixer des valeurs négatives au processus. [NdT: cette échelle est assez logique, si on admet que le terme niceness désigne la douceur d'un processus. Un processus doux possède bien évidemment une douceur plus grande (jusqu'à +20) qu'un processus agressif en terme de consommation de la CPU.]

Essentiellement, les applications multimédia ainsi que quelques autres utilitaires sont les seuls processus qui nécessitent un adoucissement négatif et la plupart de ceux-ci ont leurs propres options en ligne de commandes pour fixer des valeurs de douceur adéquates. Voyez, par exemple, cdrecord(1) et mikmod(1) -une valeur négative vous prémunira contre les sauts de lecture. [LINUX disposera bientôt d'un programme de priorité de processus en temps réel. C'est une caractéristique du noyau pour réduire la latence (les temps morts entre les moments durant lesquels un processus est exécuté par la CPU et aussi la durée requise pour qu'un processus se réveille). Il y déjà des correctifs pour réaliser cet objectif]. [NdT: au moment où le noyau 2.6 sortait, cette fonctionnalité n'était pas encore incorporée.]

Par ailleurs, les options -u et -g sont utiles, elles fixent la priorité de tous les processus d'un utilisateur ou d'un groupe.

De plus, nous disposons de la commande nice qui démarre un programme sous une douceur donnée par rapport à la valeur de douceur courante employée par un utilisateur. Par exemple:

nice +<priorite> <PID>

nice -<priorite> <PID> 



Finalement, la commande snice peut à la fois afficher et modifier la douceur courante d'un processus. Cette commande purrait ne pas fonctionner sur certaines machines:

snice -v <PID> 


next up previous contents Next: Consommation mémoire et CPU: Up: Processus et variables d'environnement. Previous: Liste des signaux courants.   Table des matières  
1-01-2006