Que signifie une valeur de gentillesse de (-)?


19

Selon la page de manuel et wikipedia; nicevarie de -20 à 20.

Pourtant, lorsque j'exécute la commande suivante, je trouve que certains processus ont une valeur non numérique telle que (-). Voir la sixième colonne de gauche avec le titre «NI».

Qu'est-ce qu'une gentillesse de (-) indique?

 ps axl 
 F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0     1     0  20   0  19356  1548 poll_s Ss   ?          0:00 /sbin/init
1     0     2     0  20   0      0     0 kthrea S    ?          0:00 [kthreadd]
1     0     3     2 -100  -      0     0 migrat S    ?          0:03 [migration/0]
1     0     4     2  20   0      0     0 ksofti S    ?          0:51 [ksoftirqd/0]
1     0     5     2 -100  -      0     0 cpu_st S    ?          0:00 [migration/0]
5     0     6     2 -100  -      0     0 watchd S    ?          0:09 [watchdog/0]
1     0     7     2 -100  -      0     0 migrat S    ?          0:08 [migration/1]
1     0     8     2 -100  -      0     0 cpu_st S    ?          0:00 [migration/1]
1     0     9     2  20   0      0     0 ksofti S    ?          1:03 [ksoftirqd/1]
5     0    10     2 -100  -      0     0 watchd S    ?          0:09 [watchdog/1]
1     0    11     2 -100  -      0     0 migrat S    ?          0:05 [migration/2]

J'ai vérifié 3 serveurs en cours d'exécution: Ubuntu 12.04 et CentOs 6.5 et Mac OsX 10.9. Seules les machines Ubuntu et CentOs ont des valeurs de gentillesse non numériques.


FYI: Tous ces processus dont les noms sont en [brackets]sont en fait kthreads (threads du noyau).
Jonathon Reinhart

Réponses:


18

Qu'est-ce qu'une gentillesse de (-) indique?

Notez que ceux-ci ont également un score PRI de -100; cela indique que le processus est planifié en tant que processus en temps réel . Les processus en temps réel n'utilisent pas de bons scores et ont toujours une priorité plus élevée que les scores normaux, mais diffèrent toujours les uns par rapport aux autres.

Vous pouvez afficher les détails par processus avec la chrtcommande (par exemple chrt -p 3). L'un de vos -100 rapportera probablement une "priorité de planification actuelle" de 99 - contrairement à niceici, les valeurs élevées ont une priorité plus élevée, qui est probablement l'endroit où le -100numéro le plus élevé a été créé . Les processus non en temps réel afficheront toujours une "priorité de planification actuelle" de 0, chrtquelle que soit la valeur, et sous linux une "politique de planification actuelle" de SCHED_OTHER.

Seules les machines Ubuntu et CentOs ont des valeurs de gentillesse non numériques.

Certaines versions de topsemblent signaler des processus en temps réel avec rtsous PRI puis 0sous NI .


Magnifique réponse. Je savais que cela avait quelque chose à voir -100mais je ne pouvais pas le comprendre :)
Ramesh

6

@ La réponse de Goldlilock m'a incité à faire des recherches dans la bonne direction. Voici mes détails de recherche.

Algorithmes de planification disponibles pour les processus

Linux prend en charge 3 politiques de planification. SCHED_FIFO,, SCHED_RRet SCHED_OTHER. SCHED_OTHERest la stratégie d'ordonnanceur universel à temps partagé par défaut utilisée par la plupart des processus; SCHED_FIFOet SCHED_RRsont destinés aux applications spéciales à temps critique qui nécessitent un contrôle précis de la manière dont les processus exécutables sont sélectionnés pour exécution.

Priorités disponibles

Afin de sélectionner un processus à exécuter, le planificateur Linux doit considérer la priorité de chaque processus. En fait, il existe deux types de priorité.

Une valeur de priorité statique est affectée à chaque processus et la planification dépend de cette priorité statique. Les processus planifiés avec SCHED_OTHERont la priorité statique 0; les processus planifiés sous SCHED_FIFOou SCHED_RRpeuvent avoir une priorité statique dans la plage 1de 99(99 est le plus élevé).

La sys_sched_get_priority_max( )routine renvoie la priorité statique du processus, elle renvoie 0pour les processus non temps réel.

La priorité dynamique est utilisée pour les applications en temps non réel.

Tous les processus en temps réel ont une priorité plus élevée que les processus normaux. Linux implémente les priorités en temps réel conformément à POSIX. Le graphique ci-dessous peut donner un aperçu de la façon dont les processus sont planifiés avec leurs priorités.

HIGH PRIORITY – - – - – > – - – - – > – - – - – > – - – - – > – - – – LEAST PRIORITY
……..real time priority (static priority)…….| …. nice value (dynamic priority) …..
99 ……………………….. 50 ……………………… 1 | -20 …….. -10 …….. 0 …….. 10 ……. 19

Maintenant, nous pouvons émettre la commande ci-dessous pour vérifier la priorité en temps réel d'un processus. Ici, j'utilise watchdog car il avait une belle valeur répertoriée comme -.

ps -e -o class,rtprio,pri,nice,cmd | grep watchdog

Il s'agit de la sortie de la commande ci-dessus. Comme nous pouvons le voir, la priorité en temps réel est 99, ce qui est la priorité la plus élevée possible.

FF      99 139   - [watchdog/0]
FF      99 139   - [watchdog/1]
TS       -  21   0 grep watchdog

Donc, selon ma compréhension, la priorité en temps réel peut prendre une valeur maximale de 99 et il ne peut donc y avoir aucune valeur intéressante par-dessus. C'est la raison pour laquelle nous obtenons la bonne sortie en tant que - pour le chien de garde et d'autres processus système.

Les références

http://oreilly.com/catalog/linuxkernel/chapter/ch10.html http://atipaday.wordpress.com/2008/08/19/atad-21-linux-process-priority-range/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.