143 votes

Processus "gentillesse" ou "priorité" ?

En cours d'exécution top Je peux voir cet exemple (abrégé) de sortie :

  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

Il y a deux valeurs qui m'intéressent : PR (Priorité) et NI (Niceness).

Si j'ai bien compris ce que j'ai déjà découvert, les deux déterminent le temps CPU qu'un processus obtiendra par rapport aux autres processus. Mais quelle est alors la différence entre ces valeurs ?

Pourriez-vous également décrire comment manipuler ces valeurs d'un processus et dans quelles circonstances cela pourrait être utile ?

134voto

pl_rock Points 10309

La valeur Nice est un espace utilisateur et la priorité PR est la priorité réelle du processus qui est utilisée par le noyau Linux. Dans le système linux, les priorités vont de 0 à 139, dont 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 la valeur la plus élevée, 0 par défaut et +19 la plus basse. La relation entre la valeur de Nice et la priorité est :

PR = 20 + NI

Ainsi, la valeur de PR = 20 + (-20 to +19) est de 0 à 39, ce qui correspond à 100 à 139.

Selon le manuel du haut :

PR -- Priorité La priorité d'ordonnancement de la tâche. Si vous voyez Si vous voyez "rt" dans ce champ, cela signifie que la tâche est exécutée en "temps réel". priorité d'ordonnancement.

NI est une valeur sûre de la tâche.

NI -- Nice Value La valeur agréable de la tâche. Une nice négative négative signifie une priorité plus élevée, tandis qu'une valeur positive signifie une priorité plus faible. Un zéro dans ce champ signifie simplement que la priorité ne sera pas ajustée. dans la détermination de l'aptitude à la distribution d'une tâche.

Éditer : Par défaut, lorsqu'un programme est lancé sous Linux, il est lancé avec la priorité '0'. Cependant, vous pouvez changer la priorité de vos programmes par l'une des méthodes suivantes.

  1. Vous pouvez lancer un programme avec la priorité souhaitée en utilisant

    nice -n nice_value program_name
  2. vous pouvez également changer la priorité d'un processus déjà en cours d'exécution en utilisant

    renice -n nice_value -p process_id

37voto

A.B. Points 84870

Qu'est-ce qu'une priorité et pourquoi devrais-je m'en préoccuper ?

Lorsqu'on parle de processus, la priorité consiste à gérer le temps du processeur. Le processeur ou CPU est comme un humain qui jongle avec plusieurs tâches en même temps. Parfois, nous pouvons avoir assez de place pour nous occuper de plusieurs projets. Parfois, nous ne pouvons nous concentrer que sur une seule chose à la fois. D'autres fois, quelque chose d'important surgit et nous voulons consacrer toute notre énergie à résoudre ce problème tout en mettant les tâches moins importantes en veilleuse.

Sous Linux, nous pouvons définir des directives que le processeur doit suivre lorsqu'il examine toutes les tâches qu'il doit accomplir. Ces directives sont appelées "gentillesse" ou "valeur de gentillesse". L'échelle de gentillesse de Linux va de -20 à 19. Plus le chiffre est bas, plus la tâche est prioritaire. Si la valeur de gentillesse est élevée, comme 19, la tâche sera placée au niveau de priorité le plus bas et le CPU la traitera dès qu'il en aura l'occasion. La valeur par défaut est zéro.

En utilisant cette échelle, nous pouvons allouer nos ressources CPU de manière plus appropriée. Les programmes à faible priorité qui ne sont pas importants peuvent être réglés sur une valeur "nice" plus élevée, tandis que les programmes à haute priorité comme les démons et les services peuvent être réglés pour recevoir plus de concentration du CPU. Vous pouvez même donner à un utilisateur spécifique une valeur nice inférieure pour tous ses processus afin de limiter leur capacité à ralentir les services centraux de l'ordinateur.

<a href="http://www.nixtutor.com/linux/changing-priority-on-linux-processes/" rel="noreferrer">Fuente</a>

Définir la priorité des nouveaux processus avec nice , eg

nice -n 10 firefox

pour les processus existants

renice 10 -p $(pgrep firefox)

Pour définir la priorité <0 vous avez besoin 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 renier tous les processus en cours d'exécution pour un utilisateur spécifique

renice 20 -u user_name

30voto

ken2k Points 24640

Réponse courte

PR est le niveau de priorité. Plus le PR est faible, plus la priorité du processus sera élevée.

Le PR est calculé comme suit :

  • pour les processus normaux : PR = 20 + NI (NI est agréable et va de -20 à 19)
  • pour les processus en temps réel : PR = - 1 - real_time_priority (la priorité en temps réel va de 1 à 99).

Réponse longue

Il existe 2 types de processus, les normal et les en temps réel .

Pour les normaux (et seulement pour ceux-là), 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 agréable et PR est le niveau de priorité. Comme on peut le voir, le -20 correspond en fait à 0, tandis que le 19 correspond à 39.

Par défaut, la valeur nice d'un programme est 0, mais il est possible pour l'utilisateur root de lancer des programmes avec une valeur nice spécifiée en utilisant la commande suivante :

nice -n <nice_value> ./myProgram 

Temps réel

On pourrait même aller plus loin. La priorité nice est en fait utilisée pour les programmes utilisateurs. Alors que la priorité globale d'UNIX/LINUX a une plage de 140 valeurs, la valeur nice permet au processus de correspondre à la dernière partie de la plage (de 100 à 139). Cette équation laisse les valeurs de 0 à 99 inaccessibles ce qui correspondra à un niveau de PR négatif (de -100 à -1). Pour pouvoir accéder à ces valeurs, le processus doit être déclaré "temps réel".

Il y a 5 politiques d'ordonnancement dans un environnement LINUX qui peuvent être affichées avec la commande suivante :

chrt -m 

Qui affichera 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 d'ordonnancement peuvent être divisés en deux groupes, les politiques d'ordonnancement normal (1 à 3) et les politiques d'ordonnancement 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é en utilisant la commande suivante (l'exemple est comment déclarer une politique 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

rt_prior correspond à la priorité entre 1 et 99. C'est pourquoi le processus qui aura la priorité la plus élevée sur les autres processus sera celui qui sera appelé avec le numéro 99.

Il est important de noter que pour les processus en temps réel, la valeur agréable 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 :

top screenshot

Dans la figure, les valeurs PR et NI sont affichées. Il est intéressant de noter le processus dont la valeur PR est de -51, ce qui correspond à une valeur en temps réel. Il y a également quelques processus dont la valeur PR est indiquée comme "rt". Cette valeur correspond en fait à une valeur PR de -100.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X