Tengo un proceso regular que no es tan importante pero que consumirá mucha energía de la CPU, y tengo otro proceso que es realmente importante, pero pasa la mayor parte del tiempo inactivo, pero cuando tiene un trabajo realmente necesita una gran potencia de cómputo
Intenté funcionar con nice -20 ./low_priority_process
y nice --20 ./high_priority_process
sin embargo sigue siendo la prioridad más baja consumir gran cantidad de CPU al proceso de alta prioridad está en la necesidad, ¿cómo puedo ejecutar un proceso que realmente va a producir o incluso se suspenderá automáticamente cuando otro proceso utilizando energía de la CPU
RR
programación para el proceso de alta prioridad.Respuestas:
Eche un vistazo a cgroups , debe proporcionar exactamente lo que necesita: reservas de CPU (y más). Sugeriría leer la prioridad de control de las aplicaciones que usan cgroups .
Dicho esto, coloque los procesos importantes pero a menudo inactivos en grupo con el 95% de la CPU asignada y sus otras aplicaciones en otra con el 5% asignado: obtendrá (casi) toda la potencia para sus trabajos cuando sea necesario, mientras que constantemente el proceso de hambre de energía solo obtendrá un 5% como máximo en esos momentos. Cuando desaparecen las sobretensiones computacionales, todo el rendimiento de la CPU se lanzará a los procesos restantes. Como beneficio, si crea un cgroup especial (con requisitos mínimos de rendimiento) para procesos como
sshd
, podrá iniciar sesión sin importar lo que intente obtener toda la CPU que pueda; se reservará un tiempo de CPUsshd
.fuente
cpulimit
onice
para modificar el cgroup de proceso? porque si cgroup es una llamada API, estoy en posición de no poder recompilar ninguna de esas aplicaciones para usar cgroupsystemd
, al menos en algunos casos) "roban" la interfaz cgroups de los usuarios que tienen que usar la interfaz del sistema init (generalmente un comando especial). Lea la respuesta vinculada y el artículo de Wikipedia. De Verdad. :)libcgroup
paquete, que viene con utilidades para trabajar con cgroups, incluido un daemon (cgrulesengd
) que en realidad puede ordenar los procesos en grupos según algunas condiciones.Si la prioridad del proceso (valor agradable) es baja, no interrumpirá un proceso de mayor prioridad. La razón por la que se está viendo el proceso de baja prioridad sigue siendo el consumo de una cantidad significativa de CPU cuando el proceso de mayor prioridad está en funcionamiento se debe a que el proceso de mayor prioridad no es que ocupados. Probablemente esperando a IO. Úselo
chrt -p -i 0 $PID
para ejecutar el proceso con una prioridad aún menor quenice 19 -p $PID
(suponiendo que estamos hablando de Linux aquí).chrt -p -i 0 $PID
pone el proceso en el planificador inactivo "verdadero".http://linux.die.net/man/1/chrt
fuente
Pruebe este ejemplo para ejecutar un proceso como un proceso bajo.
Si tu trabajo es bueno tar xvf asets.zip
Utilizar
bonito alquitrán xvf assets.zip
Después de eso, emitir
arriba para monitorear el proceso descomprimir con
ps aux | grep "alquitrán"
Prueba algo específico con cpulimit
cpulimit -l 50 python 0 9999999999> / dev / null &
fuente
-20
es de "baja prioridad" y--20
es de "alta prioridad". Mire el guión doble para elnice
comando. y sí, entiendo completamente sobre el buen valor, pero mi pregunta es, ¿hay alguna manera de decirle al planificador que no sea usar un buen valor-n -20
,-n 20
etc.htop
otop
ops
o lo que seaPara futuras llegados, aquí es un ejemplo completo de
nice
la tensión .stress
:apt-get install stress
nice -20 stress --cpu 2
top
:Esto muestra que ambas CPU están completamente ocupadas.
nice --20 stress --cpu 1
top
Esto muestra que el proceso de estrés de un solo núcleo obtiene su CPU completa, mientras que los procesos de menor prioridad comparten la 1 CPU restante
stress
llamadas anteriores y solo activar un solo proceso de 3stress --cpu 3
le daría un 66% de CPU a cada unofuente