Garantizar la capacidad de respuesta de Shell en un sistema vinculado

Garantizar la capacidad de respuesta de Shell en un sistema vinculado

Entonces mi sistema está recibiendo DOS, o acabo de abrir un archivo bastante grande (openstreetmaps planet.osm). El sistema deja de responder por completo... tan insensible que me tomará unos 10 minutos ingresar a mi shell, ejecutar top y finalizar el proceso ofensivo. Estoy listo para presionar el botón de reinicio.

Pregunta: ¿es posible reservar una cierta cantidad mínima de recursos del sistema de modo que, si mi sistema se bloquea, todavía tenga un 2 % de CPU (sistema de 2 GHz ~ 40 mhz! - debería ser suficiente para el shell, ¿verdad? Quiero decir, funcionó a principios de los 90) ¿reservado en algún lugar? ¿O alguna forma de acelerar los procesos infractores?

Me aparecen estas situaciones en las que desearía que el sistema operativo frenara los procesos fuera de control para poder seguir usando el sistema, incluso si eso significara una caída general del 10% en el rendimiento. La capacidad de actuar en situaciones como esta en lugar de estar completamente indefenso sería... agradable.

Respuesta1

Es curioso que digas "agradable". Una solución es "renovar" el proceso ofensivo para que no acapare la CPU (esencialmente reduciendo la prioridad de la aplicación).

Para iniciar un proceso con menor prioridad:

nice <program> &

Para cambiar la prioridad de un proceso en ejecución:

renice 4 <program>

La escala de prioridades va de -20 a 20. 0 es el valor predeterminado, 20 es la prioridad más baja y -20 es la prioridad más alta.

Respuesta2

Puede escribir un script para buscar procesos que se ejecutan en tty0 o ttyS0 o donde desee un inicio de sesión raíz prioritario, y configurar esos procesos con una prioridad de programación en tiempo real. El script en sí debe iniciarse con prioridad en tiempo real.

Obtener acceso a la memoria durante una tormenta de intercambio es una tarea más difícil. Puede utilizar cgroups de Linux. Puede escribir un programa en C en lugar de un script y usar mlockall para bloquear su memoria en la RAM. Entonces ese programa puede usar ptrace para hurgar en otros procesos y obligarlos a llamar a mlockall. Puede usarlo para obtener un shell bash que no se verá afectado por el intercambio.

A menos que sea programador o pueda encontrar a alguien que ya haya escrito esto (yo no lo hice), cgroups es probablemente una forma más fácil de reservar memoria de alta prioridad.

información relacionada