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_processy nice --20 ./high_priority_processsin 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

RRprogramació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
cpulimitonicepara 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. :)libcgrouppaquete, 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 $PIDpara ejecutar el proceso con una prioridad aún menor quenice 19 -p $PID(suponiendo que estamos hablando de Linux aquí).chrt -p -i 0 $PIDpone 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
-20es de "baja prioridad" y--20es de "alta prioridad". Mire el guión doble para elnicecomando. 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 20etc.htopotopopso lo que seaPara futuras llegados, aquí es un ejemplo completo de
nicela tensión .stress:apt-get install stressnice -20 stress --cpu 2top:Esto muestra que ambas CPU están completamente ocupadas.
nice --20 stress --cpu 1topEsto 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
stressllamadas anteriores y solo activar un solo proceso de 3stress --cpu 3le daría un 66% de CPU a cada unofuente