Proceso 'niceness' vs. 'priority'

72

Cuando ejecuto top , puedo ver este resultado de ejemplo (abreviado):

  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

Hay dos valores que me interesan: PR (Priority) y NI (Niceness).

Si entendí lo que ya descubrí correctamente, ambos determinan cuánto tiempo de CPU obtendrá un proceso en contraste con otros procesos. ¿Pero cuál es la diferencia entre esos valores?

¿Podría describir también cómo manipular esos valores de un proceso y bajo qué circunstancias esto podría ser útil?

    
pregunta Byte Commander 05.08.2015 - 11:17

2 respuestas

72

buen valor es un espacio de usuario y PR de prioridad es la prioridad real del proceso que usa el kernel de Linux. En Linux, las prioridades del sistema son 0 a 139 en las cuales 0 a 99 en tiempo real y 100 a 139 para los usuarios. un buen rango de valores es de -20 a +19 donde -20 es más alto, 0 predeterminado y +19 es el más bajo. relación entre buen valor y prioridad es:

PR = 20 + NI

entonces, el valor de PR = 20 + (-20 to +19) es 0 a 39 que mapea de 100 a 139.

Según el manual superior:

  

PR - Prioridad La prioridad de programación de la tarea. Si tú ves   'rt' en este campo, significa que la tarea se ejecuta en 'tiempo real'   prioridad de programación.

NI es un buen valor para la tarea.

  

NI - Buen valor El buen valor de la tarea. Un negativo agradable   valor significa mayor prioridad, mientras que un valor agradable positivo significa menor   priority.Zero en este campo simplemente significa que la prioridad no se ajustará   para determinar la capacidad de despacho de una tarea

Editar: De forma predeterminada, cuando un programa se inicia en Linux, se inicia con la prioridad de '0'. Sin embargo, puede cambiar la prioridad de sus programas por cualquiera de los siguientes métodos.

  1. Puede iniciar un programa con su prioridad requerida usando

    nice -n nice_value program_name
    
  2. también puede cambiar la prioridad de un proceso en ejecución utilizando

    renice -n nice_value -p process_id
    
respondido por el pl_rock 05.08.2015 - 11:51
19

¿Qué es prioridad y por qué debería importarme?

Cuando se habla de la prioridad de los procesos, se trata de administrar el tiempo del procesador. El procesador o la CPU es como un humano haciendo malabares con múltiples tareas al mismo tiempo. A veces podemos tener suficiente espacio para emprender proyectos múltiples. A veces solo podemos enfocarnos en una cosa a la vez. En otras ocasiones, surge algo importante y queremos dedicar toda nuestra energía a resolver ese problema al mismo tiempo que olvidamos tareas menos importantes.

En Linux podemos establecer pautas para que la CPU las siga cuando vea todas las tareas que tiene que hacer. Estas pautas se llaman amabilidad o buen valor. La escala de bondad de Linux va de -20 a 19. Cuanto menor sea el número, más prioridad tendrá la tarea. Si el valor de bondad es un número alto como 19, la tarea se configurará con la prioridad más baja y la CPU la procesará cada vez que tenga oportunidad. El valor agradable predeterminado es cero.

Al usar esta escala, podemos asignar nuestros recursos de CPU de forma más adecuada. Los programas de menor prioridad que no son importantes se pueden configurar con un valor más alto, mientras que los programas de alta prioridad como los daemons y los servicios se pueden configurar para recibir más atención de la CPU. Incluso puede darle a un usuario específico un valor más bajo para todos sus procesos, de modo que pueda limitar su capacidad de ralentizar los servicios principales de la computadora.

Fuente

Establece la prioridad para nuevos procesos con nice , por ejemplo

nice -n 10 firefox

para procesos existentes

renice 10 -p $(pgrep firefox)

Para establecer la prioridad <0 necesita sudo , por ejemplo:

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

pero no para una prioridad >=0

Ejemplo

% 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

Otro ejemplo

Para renizar todos los procesos en ejecución para un usuario específico

renice 20 -u user_name
    
respondido por el A.B. 05.08.2015 - 13:06

Lea otras preguntas en las etiquetas