GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Schnelleres Forken großer Prozesse unter Linux?

Unter Linux können Sie posix_spawn(2) verwenden mit der POSIX_SPAWN_USEVFORK -Flag, um den Overhead des Kopierens von Seitentabellen zu vermeiden, wenn von einem großen Prozess abgezweigt wird.

Siehe Speichernutzung zum Erstellen von Anwendungsunterprozessen minimieren für eine gute Zusammenfassung von posix_spawn(2) , seine Vorteile und einige Beispiele.

Um vfork(2) zu nutzen , vergewissern Sie sich, dass #define _GNU_SOURCE vor #include <spawn.h> und dann einfach posix_spawnattr_setflags(&attr, POSIX_SPAWN_USEVFORK)

Ich kann bestätigen, dass dies unter Debian Lenny funktioniert und eine massive Beschleunigung beim Forken aus einem großen Prozess bietet.

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)

Ergebnis :Ich wollte den früh gespawnten Hilfs-Unterprozessweg gehen, wie von anderen Antworten hier vorgeschlagen, aber dann stieß ich auf diese Re-Verwendung riesiger Seitenunterstützung, um die Fork-Leistung zu verbessern.

Nachdem ich es selbst mit libhugetlbfs versucht habe, um einfach alle Mallocs meiner App dazu zu bringen, riesige Seiten zuzuweisen, erhalte ich jetzt ungefähr 2400 Forks/s unabhängig von der Prozessgröße (Über den Bereich, der mich sowieso interessiert). Erstaunlich.


Linux
  1. Linux schneller booten

  2. So beenden Sie laufende Prozesse in Linux

  3. Linux-ps-Befehl

  4. Finden Sie verwaiste Linux-Prozesse heraus

  5. Sind Threads als Prozesse unter Linux implementiert?

So verschieben Sie eine große Anzahl von Dateien in Linux

So kopieren Sie eine große Anzahl von Dateien unter Linux

So können Sie große (100 GB+) Dateien unter Linux schneller komprimieren

Prozessüberwachung unter Linux

Prozesse unter Linux verstehen

Linux-PS-Befehl – ​​20 Beispiele aus dem wirklichen Leben