GNU/Linux >> Znalost Linux >  >> Linux

Rychlejší rozvětvení velkých procesů na Linuxu?

V systému Linux můžete použít posix_spawn(2) s POSIX_SPAWN_USEVFORK příznak, abyste se vyhnuli režii kopírování tabulek stránek při větvení z velkého procesu.

Viz Minimalizace využití paměti pro vytváření aplikačních dílčích procesů pro dobré shrnutí posix_spawn(2) , jeho výhody a některé příklady.

Chcete-li využít výhod vfork(2) , ujistěte se, že máte #define _GNU_SOURCE před #include <spawn.h> a pak jednoduše posix_spawnattr_setflags(&attr, POSIX_SPAWN_USEVFORK)

Mohu potvrdit, že to funguje na Debianu Lenny a poskytuje obrovské zrychlení při vytváření větví z velkého procesu.

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)

Výsledek :Chtěl jsem jít cestou brzy vytvořeného pomocného subprocesu, jak navrhovaly jiné odpovědi zde, ale pak jsem narazil na to, že používám obrovskou podporu stránek ke zlepšení výkonu rozvětvení.

Když jsem to sám vyzkoušel pomocí libhugetlbfs, abych jednoduše přinutil všechny malloc mé aplikace alokovat velké stránky, dostávám se nyní kolem 2400 forků/s bez ohledu na velikost procesu (přes rozsah, který mě každopádně zajímá). Úžasné.


Linux
  1. Rychlejší spouštění Linuxu

  2. Jak zabít běžící procesy v Linuxu

  3. Jsou vlákna implementována jako procesy v Linuxu?

  1. Jak vypsat běžící procesy v Linuxu

  2. Linuxový příkaz ps

  3. Zjistěte osiřelé procesy Linuxu

  1. Příklady příkazů 20 ps pro monitorování procesů Linuxu

  2. Najděte velké soubory v Linuxu

  3. Příkaz Ps v Linuxu (seznam procesů)