GNU/Linux >> Tutoriels Linux >  >> Linux

Forkation plus rapide des gros processus sous Linux ?

Sous Linux, vous pouvez utiliser posix_spawn(2) avec le POSIX_SPAWN_USEVFORK flag pour éviter la surcharge de copie des tables de pages lors de la dérivation d'un processus volumineux.

Voir Minimiser l'utilisation de la mémoire pour créer des sous-processus d'application pour un bon résumé de posix_spawn(2) , ses avantages et quelques exemples.

Pour profiter de vfork(2) , assurez-vous d'avoir #define _GNU_SOURCE avant #include <spawn.h> puis simplement posix_spawnattr_setflags(&attr, POSIX_SPAWN_USEVFORK)

Je peux confirmer que cela fonctionne sur Debian Lenny et fournit une accélération massive lors de la dérivation d'un processus volumineux.

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)

Résultat  :J'allais emprunter la voie du sous-processus d'assistance créée au début, comme suggéré par d'autres réponses ici, mais je suis ensuite tombé sur cette réutilisation d'un énorme support de page pour améliorer les performances de la fourche.

Après avoir essayé moi-même en utilisant libhugetlbfs pour que tous les mallocs de mon application allouent simplement des pages énormes, j'obtiens maintenant environ 2400 forks/s quelle que soit la taille du processus (sur la gamme qui m'intéresse de toute façon). Incroyable.


Linux
  1. Démarrer Linux plus rapidement

  2. Comment tuer les processus en cours d'exécution sous Linux

  3. Commande Linux ps

  4. Découvrez les processus orphelins de Linux

  5. Les threads sont-ils implémentés en tant que processus sous Linux ?

Comment déplacer un grand nombre de fichiers sous Linux

Comment copier un grand nombre de fichiers sous Linux

Comment compresser des fichiers volumineux (100 Go +) plus rapidement sous Linux

Surveillance des processus sous Linux

Comprendre les processus sous Linux

Commande Linux ps - 20 exemples concrets