Los comandos nice y renice nos permiten cambiar las prioridades de los procesos. Las prioridades van en un rango entre el -20..0 y el 0..19. El -20 es máxima prioridad y por tanto máxima apropiación de la CPU y el 19 es la mínima apropiación de la CPU. El 0 es la prioridad que se da por defecto a todos los usuarios del sistema. Otra cosa muy importante es que solo root puede dar prioridades negativas.
Para ser más correcto lo que estamos cambiando no es exactamente la prioridad sino "el valor de nice". Como hemos explicado anteriormente la apropiación y tiempo de uso de una CPU se calcula en base a uno o varios algoritmos de planificación y en base a muchos parámetros entre ellos, el valor de nice.
Para lanzar un nuevo proceso con un valor de nice haremos lo siguiente:
# nice -n -15 xeyes (lanzamos xeyes con una prioridad alta)
Si por el contrario queremos cambiar la prioridad a un proceso ya en ejecución, utilizaremos el comando renice:
# renice 10 -p 1967 (lanzamos el proceso con PID 1967 con una prioridad baja)
Para ver que nice tiene asignado cada proceso hay que consultar la columna NI que muestra el comando top:
top - 23:18:30 up 10:52, 5 users, load average: 0.00, 0.31, 0.40
top - 23:25:57 up 10:59, 5 users, load average: 0.28, 0.19, 0.28
Tasks: 139 total, 3 running, 136 sleeping, 0 stopped, 0 zombie
Cpu(s): 11.3%us, 3.7%sy, 1.0%ni, 84.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3989648k total, 3425068k used, 564580k free, 97340k buffers
Swap: 4000176k total, 0k used, 4000176k free, 2796996k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3035 root 20 0 495m 60m 15m R 7.0 1.6 9:37.19 Xorg
3638 amperis 20 -20 317m 49m 17m S 4.3 1.3 2:42.72 bucle.sh
17023 amperis 39 19 578m 122m 27m S 2.0 3.1 1:05.72 bucle.sh
17067 amperis 20 -15 199m 20m 10m R 1.7 0.5 0:58.31 xeyes
17959 root 20 0 19116 1344 988 R 0.3 0.0 0:02.62 top
...
Como regla general Linux por si mismo ya es lo suficiente eficiente para mantener el buen uso de la CPU, por tanto, no es necesario ir cambiando los nice. Si este no fuera tú caso, lo normal es cambiarlo o jugar con ellos en aplicaciones como audio, video, diseño, donde los retardos en los resultados es muy apreciable.
Para los que le gusta tunear su Kernel existen parches para compilarlo utilizando opciones de tuning y real-time. Existen proyectos dedicados al real-time del Kernel.
Para hacer notar el poder del nice podéis crear un script con un bucle infinito que vaya mostrando números por pantalla. Lo lanzáis dos veces en dos terminales diferentes. Por defecto, los dos procesos entraran en ejecución con un nice 0. Ahora a uno le ponéis un -20 y al otro un 19. Veréis como uno incrementará su velocidad y el otro irá más lento. En verdad no va más lento, sino que recibe la CPU menos veces por unidad de tiempo.
#!/bin/bash while [ 1 ] do echo $RANDOM done
0 comentarios:
hacer un comentario en esta entrada