domingo, 18 de diciembre de 2011

Cambiar la prioridad de los procesos

Cuando se habla de procesos, prioridad tiene que ver con el manejo del tiempo del procesador. El procesador o CPU es como un juego de malabares múltiples al mismo tiempo. A veces podemos tener suficiente espacio para tomar en varios proyectos. A veces sólo puede centrarse en una cosa a la vez. Veces que algo importante otra aparece y queremos dedicar toda nuestra energía en la solución de ese problema, mientras que poniendo las tareas menos importantes en un segundo plano.

En Linux se puede establecer directrices para la CPU a seguir cuando se está mirando a todas las tareas que tiene que hacer. Estas directrices se llaman niceless o nice value. La escala de niceness Linux va desde -20 hasta 19. Cuanto menor sea el número, mas prioridad consigue la tarea. Si el valor de niceless es un número tan alto como 19 la tarea se establecerá como la prioridad más baja. El valor predeterminado para nice value es cero.

Mediante el uso de esta escala, podemos asignar nuestros recursos del CPU de una forma más adecuada. Bajando la prioridad de los programas que no son importantes se puede ajustar a un niceless superior mientras que los programas de alta prioridad, como los demonios y los servicios se puede configurar para recibir más atención de la CPU. Incluso se puede dar a un usuario específico en un niceless inferior para todos los de su / procesos para que pueda limitar su capacidad para frenar los servicios de la computadora central.

La forma mas fácil de saber la prioridad de los procesos que están ejecutándose en estos momentos es con el comando top:

Tasks: 159 total, 3 running, 156 sleeping, 0 stopped, 0 zombie
Cpu(s): 10.6%us, 4.6%sy, 0.8%ni, 81.6%id, 1.7%wa, 0.3%hi, 0.4%si, 0.0%st
Mem: 2065484k total, 2008036k used, 57448k free, 67172k buffers
Swap: 4034552k total, 0k used, 4034552k free, 1380152k cached

  PID USER  
PR  NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19722 perd  
20   0   162m 74m 18m S 35 3.7 5:19.46 operapluginwrap
2554   perd  
20   0   476m 307m 23m R 21 15.2 22:48.24 opera
1499   root  
20   0   77204 31m 16m S 2 1.6 4:49.55 Xorg
<...>


Otra forma de ver la prioridad de los procesos es:



~$ ps -o pid,comm,nice -p 2554
  PID      COMMAND NI
2554      opera           0

Como podemos ver el proceso 2554 referente a opera tiene una prioridad de 0. Ahora si queremos darle mas prioridad podemos hacerlo con el comando nice. En este caso le vamos a dar prioridad -1:


~# nice -n -1 opera
NOTA: Poner  una prioridad negativa a un proceso es algo que solo root puede hacer. Los usuarios no root pueden cambiar la prioridad de un proceso pero solo de 0 a 19.
Con este comando ejecutamos opera con prioridad -1, es decir, tendrá mas prioridad que antes. En otra consola podemos comprobarlo.



~$ ps -o pid,comm,nice -p 20974 (20974 es el PID del proceso)
  PID      COMMAND   NI
20974    opera            -1



CAMBIANDO LA PRIORIDAD A UN PROCESO YA EN EJECUCIÓN



Si por el contrario queremos cambiar la prioridad a un proceso ya en ejecución, podemos hacerlo con el comando renice (como usuario root). Para este ejemplo seguimos usando opera (en mi caso, se puede usar cualquier otro).
Como indica la salida del comando TOP el PID de opera sigue siendo el 2554.



~# renice -1 -p 2554


Ahora comprobamos si el proceso con el PID 2554 , es decir Opera tiene la nueva prioridad: 



~$ ps -o pid,comm,nice -p 2554
  PID    COMMAND      NI
 2554   opera               -1





Fuente: http://www.nixtutor.com/linux/changing-priority-on-linux-processes/


2 comentarios:

  1. Hola, tengo problemas con pulseaudio (de repente se deforma el audio y me cuelga el radit que es un reproductor)en mi radio usando radit y butt, si le doy una prioridad de -20 a pulseaudio pensaba que quizas solucione el problema? como deberia hacer para que cuando arranque la maquina automaticamentre pulseaudio tenga la mayor prioridad? Gracias

    ResponderEliminar
  2. Me olvidaba de comentar que uso debian 8 (gnome) y un procesador apu8 con 4 gb ram dd3

    ResponderEliminar