Question Processus 'gentillesse' vs 'priorité'


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

  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 (Finesse).

Si j'ai bien compris ce que j'ai déjà découvert, les deux déterminent la quantité de temps processeur qu'un processus aura par rapport aux 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?


72
2017-08-05 09:17


origine




Réponses:


nice value est un espace utilisateur et la priorité PR est la priorité réelle du processus qui est utilisée par le noyau Linux. Dans Linux, les priorités du système vont de 0 à 139, de 0 à 99 pour le temps réel et de 100 à 139 pour les utilisateurs. La plage de valeurs gentilles est de -20 à +19, -20 étant la plus élevée, 0 la plus faible et +19 la plus faible. la relation entre la bonne valeur et la priorité est la suivante:

PR = 20 + NI

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

Selon top manuel:

PR - Priorité Priorité d'ordonnancement de la tâche. Si tu vois   «rt» dans ce champ, cela signifie que la tâche est exécutée sous «temps réel»   priorité de planification.

NI est une belle valeur de tâche.

NI - Nice Value La valeur intéressante de la tâche. Un négatif sympa   valeur signifie une priorité plus élevée, alors qu'une valeur positive signifie   priority.Zero dans ce champ signifie simplement que la priorité ne sera pas ajustée   dans la détermination de la capacité de répartition d'une tâche

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

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

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

    renice -n nice_value -p process_id
    

72
2017-08-05 09:51



Dites-vous, ils sont presque la même chose en sens inverse (les deux représentent la priorité) MAIS niceness peut être utilisé pour donner une priorité négative afin que la tâche avec le niceness se dégage de tâches prioritaires? (c'est à dire qu'il est nice et laisser d'autres ressources d'accès? Ou est-ce que ça m'a juste dérouté? - Mark Kirby
Un exemple de ce que je veux dire, deux tâches, les deux ont pr de 20, si égal, la première tâche a un ni de 0 et la tâche deux a un ni de 20, donc, cela signifierait que la tâche deux céderait des ressources pour la première tâche nicer - Mark Kirby
Comme je le sais, la priorité est la suivante: PR = 20 + NI. alors la tâche une priorité = 20 +0. valeur maximale de belle volonté +19 - pl_rock
PR = 20 + La valeur maximale de NI peut être 39. en fait, dans le système Linux, il y a 139 priorités dans lesquelles 0 à 99 est une priorité en temps réel et pour l'utilisateur, il y en a 100 à 139. Ainsi, la valeur NI de -20 à +19 correspond à la priorité 100 à 139. que vous pouvez ajuster mais toujours le noyau pas sûr si vous modifiez la valeur de NI alors il changera la priorité, la valeur de NI est une suggestion juste au noyau. le noyau l'ignore quelque temps - pl_rock
Alors, est-ce que PR et NI sont en réalité équivalents, car ils ont juste un décalage différent? Pourquoi avons-nous les deux valeurs alors? Et vous pouvez ajouter que définir la finesse d'un processus <0 nécessite des droits root. - Byte Commander


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

Lorsque vous parlez de processus, la priorité est la gestion du temps du processeur. Le processeur ou le processeur est comme un être humain jonglant avec plusieurs tâches en même temps. Parfois, nous pouvons avoir suffisamment de place pour entreprendre 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 voulons consacrer toute notre énergie à résoudre ce problème tout en mettant de côté des tâches moins importantes.

Sous Linux, nous pouvons définir des directives à suivre par le processeur lorsqu'il examine toutes les tâches à effectuer. Ces directives sont appelées gentillesse ou valeur agréable. 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 définie sur la priorité la plus basse et le processeur le traitera chaque fois qu'il aura une chance. La valeur de 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 de priorité inférieure qui ne sont pas importants peuvent être réglés sur une valeur supérieure, tandis que les programmes hautement prioritaires comme les démons et les services peuvent être configurés pour recevoir davantage le focus du processeur. Vous pouvez même donner à un utilisateur spécifique une valeur inférieure pour tous ses processus afin de limiter sa capacité à ralentir les principaux services de l’ordinateur.

La source

Définir la priorité pour les nouveaux processus avec nice, par exemple

nice -n 10 firefox

pour les processus existants

renice 10 -p $(pgrep firefox)

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

Renommer tous les processus en cours pour un utilisateur spécifique

renice 20 -u user_name

19
2017-08-05 11:06



Dans votre exemple, le renice 10 travaillerait aussi sans sudo, droite? Et pourriez-vous s'il vous plaît ajouter un exemple pour rendre tous les processus d'un utilisateur spécifique plus agréables? Ce serait en fait très utile si quelqu'un d'autre est connecté en même temps et a des processus inutiles mais en cours d'utilisation (comme un jeu flash en pause dans Firefox, les petits frères font ce genre de choses ...: - /) - Byte Commander
@ByteCommander done =) - A.B.
Comment restaurer les anciennes valeurs de gentillesse de cet utilisateur après un certain temps? Le remettre à 0? Cela ne tiendra pas compte du fait que certains processus ont pu avoir une valeur de gentillesse différente auparavant. Y a-t-il une possibilité simple de le faire? - Byte Commander
@ByteCommander Non, ce n'est pas simple. Soit vous utilisez 0 ou… il y a le problème;) - A.B.
@ByteCommander mais je pourrais écrire un script pour cela;) - A.B.