Lors de l'exécution de top
, je peux voir cet exemple de sortie (abrégé):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4586 ipc-adm+ 20 0 1303900 605152 92844 S 30,6 29,3 3:52.88 firefox
3985 ipc-adm+ 20 0 258588 124508 63072 S 12,2 6,0 0:40.04 compiz
3092 root 20 0 172392 56164 25980 S 6,1 2,7 0:30.13 Xorg
Je m'intéresse à deux valeurs: PR
(Priorité) et NI
(Niceness).
Si j'ai bien compris ce que j'ai déjà découvert, les deux déterminent le temps de traitement d'un processus par rapport à d'autres processus. Mais quelle est la différence entre ces valeurs alors?
Pourriez-vous également décrire comment manipuler ces valeurs d'un processus et dans quelles circonstances cela pourrait être utile?
La valeur intéressante est un espace utilisateur et la priorité PR est la priorité réelle du processus utilisée par le noyau Linux. Sur le système Linux, les priorités sont comprises entre 0 et 139, 0 à 99 pour le temps réel et 100 à 139 pour les utilisateurs. La plage de valeurs de Nice va de -20 à +19, où -20 est le plus élevé, 0 par défaut et +19, le plus bas. La relation entre la valeur de Nice et la priorité est:
PR = 20 + NI
donc, la valeur de PR = 20 + (-20 to +19)
est comprise entre 0 et 39 et correspond aux valeurs de 100 à 139.
Selon le manuel supérieur:
PR - Priorité Priorité de planification de la tâche. Si vous voyez "rt" dans ce champ, cela signifie que la tâche est exécutée avec une priorité de planification "temps réel".
NI est la valeur de Nice de la tâche.
NI - Valeur de Nice La valeur de Nice de la tâche. Une valeur de Nice négative signifie une priorité plus élevée, tandis qu'une valeur de Nice positive signifie une priorité plus basse. Zéro dans ce champ signifie simplement que la priorité ne sera pas ajustée lors de la détermination de la capacité d'envoi d'une tâche.
Edit: Par défaut, lorsqu'un programme est lancé sous Linux, il est lancé avec la priorité "0". Toutefois, vous pouvez modifier la priorité de vos programmes par l’une des méthodes suivantes.
Vous pouvez lancer un programme avec votre priorité requise en utilisant
Nice -n Nice_value program_name
vous pouvez également changer la priorité d'un processus déjà en cours en utilisant
renice -n Nice_value -p process_id
En matière de processus, la priorité est la gestion du temps processeur. Le processeur ou le processeur est comme un être humain jonglant avec plusieurs tâches en même temps. Parfois, nous pouvons avoir assez de place pour prendre en charge plusieurs projets. Parfois, nous ne pouvons nous concentrer que sur une chose à la fois. D'autres fois, quelque chose d'important apparaît et nous souhaitons consacrer toute notre énergie à la résolution de ce problème tout en mettant en veilleuse les tâches moins importantes.
Sous Linux, nous pouvons définir des directives à suivre par le processeur lorsqu'il examine toutes les tâches qu'il doit effectuer. Ces directives sont appelées gentillesse ou valeur agréable. L'échelle de gentillesse de Linux va de -20 à 19. Plus le nombre est bas, plus la tâche reçoit de priorité. Si la valeur de gentillesse est un nombre élevé, tel que 19, la tâche sera réglée sur la priorité la plus basse et le CPU la traitera chaque fois que cela sera possible. La valeur par défaut de Nice est zéro.
En utilisant cette échelle, nous pouvons allouer nos ressources en CPU de manière plus appropriée. Les programmes moins prioritaires qui ne sont pas importants peuvent être définis sur une valeur Nice supérieure, tandis que les programmes hautement prioritaires tels que les démons et les services peuvent être définis pour recevoir davantage d’attention de la CPU. Vous pouvez même attribuer à un utilisateur spécifique une valeur Nice inférieure pour tous ses processus, ce qui vous permet de limiter leur capacité à ralentir les services de base de l'ordinateur.
Définissez la priorité pour les nouveaux processus avec Nice
, par exemple
Nice -n 10 firefox
pour les processus existants
renice 10 -p $(pgrep firefox)
Pour définir la priorité <0
vous avez besoin de Sudo
, par exemple:
renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied
mais pas pour une priorité >=0
Exemple
% ps -o pid,comm,pri,Nice -p $(pgrep firefox)
PID COMMAND PRI NI
2769 firefox 19 0
% renice 10 -p 2769 # note, we don't need Sudo here
2769 (process ID) old priority 0, new priority 10
% ps -o pid,comm,pri,Nice -p $(pgrep firefox)
PID COMMAND PRI NI
2769 firefox 9 10
% Sudo renice -19 -p 2769
2769 (process ID) old priority 10, new priority -19
% ps -o pid,comm,pri,Nice -p $(pgrep firefox)
PID COMMAND PRI NI
2769 firefox 38 -19
Autre exemple
Pour renommer tous les processus en cours pour un utilisateur spécifique
renice 20 -u user_name
Réponse courte
PR est le niveau de priorité. Plus le PR est bas, plus la priorité du processus sera élevée.
Le PR est calculé comme suit:
Réponse longue
Il existe 2 types de processus, les processus normaux normaux et le temps réel . Pour les processus normaux (et uniquement pour ceux-ci), Nice est appliqué comme suit:
Nice
L'échelle de "gentillesse" va de -20 à 19, alors que -20 est la priorité la plus élevée et 19 la priorité la plus basse. Le niveau de priorité est calculé comme suit:
PR = 20 + NI
Où NI est le niveau de Nice et PR le niveau de priorité. Comme nous pouvons le constater, le -20 correspond en fait à 0, tandis que le 19 en correspond à 39.
Par défaut, une valeur de programme Nice est 0, mais l'utilisateur root peut lancer des programmes avec une valeur Nice spécifiée à l'aide de la commande suivante:
Nice -n <Nice_value> ./myProgram
Temps réel
Nous pourrions aller encore plus loin. La priorité de Nice est en réalité utilisée pour les programmes utilisateur. Alors que la priorité globale UNIX/LINUX a une plage de 140 valeurs, la valeur Nice permet au processus de mapper à la dernière partie de la plage (de 100 à 139). Cette équation laisse les valeurs de 0 à 99 inaccessibles, ce qui correspond à un niveau de PR négatif (de -100 à -1). Pour pouvoir accéder à ces valeurs, le processus doit être défini en "temps réel".
Il existe 5 politiques de planification dans un environnement LINUX qui peuvent être affichées à l'aide de la commande suivante:
chrt -m
Ce qui montrera la liste suivante:
1. SCHED_OTHER the standard round-robin time-sharing policy
2. SCHED_BATCH for "batch" style execution of processes
3. SCHED_IDLE for running very low priority background jobs.
4. SCHED_FIFO a first-in, first-out policy
5. SCHED_RR a round-robin policy
Les processus de planification peuvent être divisés en 2 groupes, les stratégies de planification normales (1 à 3) et les stratégies de planification en temps réel (4 et 5). Les processus en temps réel auront toujours la priorité sur les processus normaux. Un processus en temps réel peut être appelé à l'aide de la commande suivante (voici comment déclarer une règle SCHED_RR):
chrt --rr <priority between 1-99> ./myProgram
Pour obtenir la valeur PR d'un processus en temps réel, l'équation suivante est appliquée:
PR = -1 - rt_prior
Où rt_prior correspond à la priorité entre 1 et 99. Pour cette raison, le processus qui aura la priorité la plus élevée par rapport aux autres processus sera celui appelé avec le numéro 99.
Il est important de noter que pour les processus en temps réel, la valeur de Nice n'est pas utilisée.
Pour voir la "gentillesse" actuelle et la valeur PR d'un processus, la commande suivante peut être exécutée:
top
Ce qui montre la sortie suivante:
Dans la figure, les valeurs PR et NI sont affichées. Il est bon de noter le processus avec la valeur PR -51 qui correspond à une valeur temps réel. Il existe également des processus dont la valeur PR est indiquée par "rt". Cette valeur correspond en fait à une valeur PR de -100.