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>
|
renice +19 <PID> |
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>
|
snice -v <PID>
|