Cómo detener un proceso de Linux para su posterior ejecución intercambiando su memoria

19

Quiero detener un proceso de larga ejecución para que no consuma recursos de CPU o memoria física, con la intención de reanudar el mismo proceso en el futuro.

Sé que la parte de la CPU se puede lograr usando señalesSIGSTOP y SIGCONT señales, pero ¿es posible extraer (intercambiar en el caso de páginas sucias del proceso) inmediatamente la memoria RSS privada de un proceso (detenido)?

idelvall
fuente
1
¿Cuál es la intención detrás de esto? ¿Desea asegurarse de que el proceso se reanude más rápidamente? ¿O desea evitar que se escriban datos confidenciales en el disco? ¿O algo mas? Si conocemos la intención, podríamos dar mejores respuestas.
Oliver
13
El sistema operativo lo hará automáticamente. Realmente no hay razón para hacer algo específico.
David Schwartz
@oliver Estoy creando un programador por lotes ( github.com/brutusin/wava ). La implementación actual ofrece una programación no preventiva, pero quiero pasar a una preventiva (poder dejar de ejecutar trabajos) para evitar algunas situaciones de bloqueo cuando todos los trabajos en ejecución dependen de trabajos en cola. Necesito exactamente el comportamiento solicitado, continuar los procesos detenidos (no crear nuevos desde un punto de control)
idelvall
1
@DavidSchwartz que es una afirmación arriesgada
idelvall
@idelvall Entonces parece que no quieres hacer nada especial para la memoria.
David Schwartz

Respuestas:

11

Puede buscar una técnica llamada punto de control / restauración. Esto le permitirá realizar un proceso en ejecución y guardar su estado en un conjunto de archivos, y luego restaurarlo en otro momento.
Para usarlo, comience instalando el programa criu [ git , wiki ] ( yum install criuo apt install criu).

Para verificar un proceso en ejecución, cree un directorio vacío para guardar sus archivos y cd en ese directorio.

mkdir /var/tmp/checkpoint
cd /var/tmp/checkpoint

Ahora revise el proceso de ejecución. En este caso, estoy usando --shell-job ya que tengo mi proceso ejecutándose en un shell con un tty asociado.

criu dump -t 404 --shell-job

404 es el pid del proceso que quiero verificar. Cuando hago esto, veo que mi proceso en ejecución se anula y mi directorio / var / tmp / checkpoint se llena con un conjunto de archivos necesarios para restaurarlo.

Para restaurar el proceso, me aseguro de estar en el directorio con los archivos de punto de control y hacer una restauración.

cd /var/tmp/checkpoint
criu restore --shell-job

El proceso continuará donde lo dejó en la terminal donde se ejecutó. Si elimino este proceso en ejecución y criu restore --shell-jobvuelvo a ejecutarlo , el proceso volverá al punto de control y se iniciará nuevamente.

Espero que esto ayude.

virtex
fuente
44
Esto no hace lo que el OP dice que quieren hacer. Pruébelo, no habrá reducción en la memoria utilizada. Simplemente cambiará de memoria privada de proceso a caché de disco (debido a la escritura del conjunto de archivos). Simplemente realiza un paso de guardado adicional y un paso de restauración adicional, y se usa la misma memoria (y expulsable) de la misma manera. De hecho, puede empeorar las cosas ya que parte de la memoria se duplica debido a la generación de todo lo nuevo para escribir.
David Schwartz
je, buen punto @David, especialmente si /tmpes tmpfs (respaldado por memoria / espacio de intercambio). Si selecciona un sistema de archivos con respaldo de disco normal, puede usarlo vmtouch -epara expulsar las páginas del caché de página, pero aún usa RAM adicional temporalmente. (A menos que criutenga una opción para hacer E / S directas (con O_DIRECT) ...)
Peter Cordes
1
Es difícil saber si esto es lo que el OP quiere o no porque el OP pide una solución específica en lugar de explicar qué problema está tratando de resolver. Esta podría ser la respuesta perfecta o podría ser inútil para él, no podemos decirlo.
David Schwartz
No he mirado en detalle todavía, pero, parece que el proceso restaurada es un nuevo proceso (PID diferente), y esto no es exactamente lo que necesito ...
idelvall
1
@idelvall: Así funciona la mayoría de los sabores de los puestos de control / restauración. Un caso de uso importante es guardar el progreso en un cálculo entre reinicios.
Peter Cordes