Al ejecutar top
, puedo ver este resultado de ejemplo (acortado):
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
(Prioridad) y NI
(Bondad).
Si entendí lo que ya descubrí correctamente, ambos determinan cuánto tiempo de CPU tendrá un proceso en contraste con otros procesos. Pero, ¿cuál es la diferencia entre esos valores entonces?
¿Podría también describir cómo manipular esos valores de un proceso y en qué circunstancias esto podría ser útil?
fuente
niceness
se pueden usar para dar una prioridad negativa para que la tareaniceness
se salga del camino de las tareas de alta prioridad? (es decir, ¿esnice
y permite que otros recursos de acceso? ¿O esto me confundió?pr
20, por lo tanto, la tarea uno tiene unni
0 y la tarea dos tiene unni
20, entonces, esto significaría que la tarea dos cedería recursos para la tarea uno porque esnicer
¿Qué es prioridad y por qué debería importarme?
Cuando se habla de procesos, la prioridad se trata de administrar el tiempo del procesador. El procesador o CPU es como un humano haciendo malabares con múltiples tareas al mismo tiempo. A veces podemos tener suficiente espacio para asumir múltiples proyectos. A veces solo podemos enfocarnos en una cosa a la vez. Otras veces aparece algo importante y queremos dedicar toda nuestra energía a resolver ese problema mientras ponemos las tareas menos importantes en un segundo plano.
En Linux podemos establecer pautas para que la CPU siga cuando está mirando todas las tareas que tiene que hacer. Estas pautas se llaman amabilidad o buen valor. La escala de simplicidad de Linux va de -20 a 19. Cuanto menor sea el número, más prioridad tendrá esa tarea. Si el valor de niceness es un número alto como 19, la tarea se establecerá en la prioridad más baja y la CPU la procesará cada vez que tenga la oportunidad. El buen valor predeterminado es cero.
Al usar esta escala, podemos asignar nuestros recursos de CPU de manera más adecuada. Los programas de menor prioridad que no son importantes se pueden establecer en un valor agradable más alto, mientras que los programas de alta prioridad como demonios y servicios se pueden configurar para recibir más atención de la CPU. Incluso puede darle a un usuario específico un valor agradable más bajo para todos sus procesos para que pueda limitar su capacidad de ralentizar los servicios centrales de la computadora.
Fuente
Establecer la prioridad para nuevos procesos con
nice
, p. Ej.para procesos existentes
Para establecer la prioridad
<0
que necesitasudo
, por ejemplo:pero no por prioridad
>=0
Ejemplo
Otro ejemplo
Para renice todos los procesos en ejecución para un usuario específico
fuente
renice 10
también funcionaría sinsudo
, ¿verdad? ¿Y podría agregar un ejemplo para que todos los procesos de un usuario específico sean más agradables? Eso sería realmente bastante útil si alguien más inicia sesión al mismo tiempo y tiene algunos procesos innecesarios pero que consumen recursos (como un juego flash en pausa en Firefox, los hermanos pequeños hacen esas cosas ...: - /)0
o ... ahí está el problema;)ps
es:PRI: 38, NI: -19
sin embargo, contop
eso esPR:1, NI -19
¿por qué?Respuesta corta
PR es el nivel de prioridad. Cuanto menor sea el PR, mayor será la prioridad del proceso.
PR se calcula de la siguiente manera:
Respuesta larga
Hay 2 tipos de procesos, los normales y el tiempo real. Para los normales (y solo para esos), nice se aplica de la siguiente manera:
agradable
La escala de "amabilidad" va de -20 a 19, mientras que -20 es la prioridad más alta y 19 la prioridad más baja. El nivel de prioridad se calcula de la siguiente manera:
PR = 20 + NI
Donde NI es el nivel agradable y PR es el nivel de prioridad. Como podemos ver, el -20 en realidad se asigna a 0, mientras que el 19 se asigna a 39.
De forma predeterminada, el valor agradable de un programa es 0, pero es posible que el usuario root inicie programas con un valor agradable especificado utilizando el siguiente comando:
Tiempo real
Podríamos ir aún más lejos. La buena prioridad se usa realmente para los programas de usuario. Mientras que la prioridad general de UNIX / LINUX tiene un rango de 140 valores, el valor agradable permite que el proceso se asigne a la última parte del rango (de 100 a 139). Esta ecuación deja inalcanzables los valores de 0 a 99, lo que corresponderá a un nivel PR negativo (de -100 a -1). Para poder acceder a esos valores, el proceso debe establecerse como "en tiempo real".
Hay 5 políticas de programación en un entorno LINUX que se pueden mostrar con el siguiente comando:
Que mostrará la siguiente lista:
Los procesos de programación podrían dividirse en 2 grupos, las políticas de programación normales (1 a 3) y las políticas de programación en tiempo real (4 y 5). Los procesos en tiempo real siempre tendrán prioridad sobre los procesos normales. Se puede llamar a un proceso en tiempo real utilizando el siguiente comando (el ejemplo es cómo declarar una política SCHED_RR):
Para obtener el valor PR para un proceso en tiempo real, se aplica la siguiente ecuación:
PR = -1 - rt_prior
Donde rt_prior corresponde a la prioridad entre 1 y 99. Por esa razón, el proceso que tendrá mayor prioridad sobre otros procesos será el llamado con el número 99.
Es importante tener en cuenta que para los procesos en tiempo real, no se utiliza el valor agradable.
Para ver la "simpatía" actual y el valor de PR de un proceso, se puede ejecutar el siguiente comando:
Que muestra el siguiente resultado:
En la figura se muestran los valores PR y NI. Es bueno observar el proceso con el valor PR -51 que corresponde a un valor en tiempo real. También hay algunos procesos cuyo valor PR se indica como "rt". Este valor en realidad corresponde a un valor PR de -100.
fuente