De acuerdo con la página del manual y wikipedia; nice
oscila 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.
[brackets]
realidad sonkthread
s (hilos de kernel).Respuestas:
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
chrt
comando (por ejemplochrt -p 3
). Uno de sus -100 probablemente informará una "prioridad de programación actual" de 99, a diferencia denice
aquí, los valores altos son de mayor prioridad, que es probablemente desde donde se creó el-100
número. Los procesos que no son en tiempo real siempre mostrarán una "prioridad de programación actual" de 0chrt
independientemente del valor agradable, y bajo Linux una "política de programación actual" deSCHED_OTHER
.Algunas versiones de
top
parecen informar procesos en tiempo real conrt
bajo PRI y luego0
bajo NI .fuente
-100
pero no podía resolverlo :)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_RR
YSCHED_OTHER
.SCHED_OTHER
es la política predeterminada del planificador universal de tiempo compartido utilizada por la mayoría de los procesos;SCHED_FIFO
ySCHED_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_OTHER
prioridad estática 0; procesos programados bajoSCHED_FIFO
oSCHED_RR
pueden tener una prioridad estática en el rango1
de99
(99 es el más alto).La
sys_sched_get_priority_max( )
rutina devuelve la prioridad estática del proceso, regresa0
para 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.
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 -.
Esta es la salida del comando anterior. Como podemos ver, la prioridad en tiempo real es 99, que es la máxima prioridad posible.
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/
fuente