¿Qué significa un valor de bondad de (-)?


19

De acuerdo con la página del manual y wikipedia; niceoscila entre -20 y 20.

Sin embargo, cuando ejecuto el siguiente comando, encuentro que algunos procesos tienen un valor no numérico como (-). Vea la sexta columna de la izquierda con el título 'NI'.

¿Qué indica una amabilidad de (-)?

 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]

He comprobado 3 servidores en ejecución: Ubuntu 12.04 y CentOs 6.5 y Mac OsX 10.9. Solo las máquinas Ubuntu y CentOs tienen valores de bondad sin dígitos.


FYI: Todos esos procesos cuyos nombres están en [brackets]realidad son kthreads (hilos de kernel).
Jonathon Reinhart

Respuestas:


18

¿Qué indica una amabilidad de (-)?

Observe que también tienen un puntaje PRI de -100; esto indica que el proceso está programado como proceso en tiempo real . Los procesos en tiempo real no utilizan puntajes agradables y siempre tienen mayor prioridad que los normales, pero aún difieren entre sí.

Puede ver los detalles por proceso con el chrtcomando (por ejemplo chrt -p 3). Uno de sus -100 probablemente informará una "prioridad de programación actual" de 99, a diferencia de niceaquí, los valores altos son de mayor prioridad, que es probablemente desde donde se creó el -100número. Los procesos que no son en tiempo real siempre mostrarán una "prioridad de programación actual" de 0 chrtindependientemente del valor agradable, y bajo Linux una "política de programación actual" de SCHED_OTHER .

Solo las máquinas Ubuntu y CentOs tienen valores de bondad sin dígitos.

Algunas versiones de topparecen informar procesos en tiempo real con rtbajo PRI y luego 0bajo NI .


Maravillosa respuesta. Sabía que tenía algo que ver -100pero no podía resolverlo :)
Ramesh

6

La respuesta de @ Goldlilock me dirigió a hacer la investigación en el camino correcto. Estos son mis detalles de investigación.

Algoritmos de programación disponibles para procesos

Linux admite 3 políticas de programación. SCHED_FIFO, SCHED_RRY SCHED_OTHER. SCHED_OTHERes la política predeterminada del planificador universal de tiempo compartido utilizada por la mayoría de los procesos; SCHED_FIFOySCHED_RR están destinados a aplicaciones especiales de tiempo crítico que necesitan un control preciso sobre la forma en que se seleccionan los procesos ejecutables para su ejecución.

Prioridades disponibles

Para seleccionar un proceso a ejecutar, el planificador de Linux debe considerar la prioridad de cada proceso. En realidad, hay dos tipos de prioridad.

Se asigna un valor de prioridad estática a cada proceso y la programación depende de esta prioridad estática. Los procesos programados con SCHED_OTHERprioridad estática 0; procesos programados bajo SCHED_FIFOo SCHED_RRpueden tener una prioridad estática en el rango 1de 99(99 es el más alto).

La sys_sched_get_priority_max( )rutina devuelve la prioridad estática del proceso, regresa 0para procesos que no son en tiempo real.

La prioridad dinámica se utiliza para aplicaciones en tiempo no real.

Todos los procesos en tiempo real tienen mayor prioridad que los procesos normales. Linux implementa prioridades en tiempo real de acuerdo con POSIX. El siguiente gráfico puede ofrecer una visión general de cómo se programan los procesos con sus prioridades.

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

Ahora, podemos emitir el siguiente comando para verificar la prioridad en tiempo real de un proceso. Aquí estoy usando watchdog ya que tenía un buen valor listado como -.

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

Esta es la salida del comando anterior. Como podemos ver, la prioridad en tiempo real es 99, que es la máxima prioridad posible.

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

Entonces, según tengo entendido, la prioridad en tiempo real puede tomar un valor máximo de 99 y, por lo tanto, no puede haber ningún valor agradable sobre ella. Esa es la razón, obtenemos la buena salida como: para watchdog y otros procesos del sistema.

Referencias

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.