Solución:
Eche un vistazo a cgroups, debería proporcionarle 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 un grupo con el 95% de CPU asignado y sus otras aplicaciones en otro con el 5% asignado; obtendrá (casi) toda la potencia para sus trabajos cuando sea necesario, mientras que el El proceso que consume mucha energía solo obtendrá un 5% como máximo en esos momentos. Cuando desaparezcan las sobretensiones computacionales, todo el rendimiento de la CPU se concentrará en 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 esté tratando de obtener toda la CPU que pueda; se reservará algo de tiempo de CPU para sshd
.
Si la prioridad del proceso (valor agradable) es baja, no interrumpirá un proceso de mayor prioridad. La razón por la que ve que el proceso de baja prioridad sigue consumiendo una cantidad significativa de CPU cuando se está ejecutando el proceso de mayor prioridad es porque el proceso de mayor prioridad no lo está. ese ocupado. Probablemente esperando a IO. Usar chrt -p -i 0 $PID
para ejecutar el proceso con una prioridad incluso menor que nice 19 -p $PID
(asumiendo que estamos hablando de Linux aquí).
chrt -p -i 0 $PID
coloca el proceso en el programador inactivo “verdadero”.
http://linux.die.net/man/1/chrt