GNU/Linux >> Tutoriales Linux >  >> Linux

¿Bifurcación más rápida de grandes procesos en Linux?

En Linux, puede usar posix_spawn(2) con el POSIX_SPAWN_USEVFORK marca para evitar la sobrecarga de copiar tablas de páginas cuando se bifurca de un proceso grande.

Consulte Minimización del uso de memoria para crear subprocesos de aplicaciones para un buen resumen de posix_spawn(2) , sus ventajas y algunos ejemplos.

Para aprovechar vfork(2) , asegúrese de #define _GNU_SOURCE antes de #include <spawn.h> y luego simplemente posix_spawnattr_setflags(&attr, POSIX_SPAWN_USEVFORK)

Puedo confirmar que esto funciona en Debian Lenny y proporciona una aceleración masiva cuando se bifurca desde un proceso grande.

benchmarking the various spawns over 1000 runs at 100M RSS
                            user     system      total        real
fspawn (fork/exec):     0.100000  15.460000  40.570000 ( 41.366389)
pspawn (posix_spawn):   0.010000   0.010000   0.540000 (  0.970577)

Resultado :Iba a ir por la ruta del subproceso de ayuda generado temprano como lo sugieren otras respuestas aquí, pero luego me encontré con esta reutilización de soporte de página enorme para mejorar el rendimiento de la bifurcación.

Después de haberlo probado yo mismo usando libhugetlbfs para simplemente hacer que todos los mallocs de mi aplicación asignen páginas grandes, ahora obtengo alrededor de 2400 bifurcaciones/s independientemente del tamaño del proceso (sobre el rango que me interesa de todos modos). Increíble.


Linux
  1. Arrancar Linux más rápido

  2. Cómo matar procesos en ejecución en Linux

  3. comando linux ps

  4. Descubra los procesos huérfanos de Linux

  5. ¿Se implementan los subprocesos como procesos en Linux?

Cómo mover una gran cantidad de archivos en Linux

Cómo copiar una gran cantidad de archivos en Linux

Cómo Gzip archivos grandes (100GB+) más rápido en Linux

Supervisión de procesos en Linux

Comprender los procesos en Linux

Comando ps de Linux:20 ejemplos de la vida real