GNU/Linux >> Belajar Linux >  >> Linux

Forking proses besar yang lebih cepat di Linux?

Di Linux, Anda dapat menggunakan posix_spawn(2) dengan POSIX_SPAWN_USEVFORK flag untuk menghindari overhead menyalin tabel halaman saat bercabang dari proses besar.

Lihat Meminimalkan Penggunaan Memori untuk Membuat Subproses Aplikasi untuk ringkasan yang baik dari posix_spawn(2) , kelebihannya dan beberapa contohnya.

Untuk memanfaatkan vfork(2) , pastikan Anda #define _GNU_SOURCE sebelum #include <spawn.h> lalu cukup posix_spawnattr_setflags(&attr, POSIX_SPAWN_USEVFORK)

Saya dapat mengonfirmasi bahwa ini berfungsi pada Debian Lenny, dan memberikan percepatan besar-besaran saat melakukan fork dari proses besar.

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)

Hasil :Saya akan pergi ke rute subproses pembantu yang muncul lebih awal seperti yang disarankan oleh jawaban lain di sini, tetapi kemudian saya menemukan ini menggunakan dukungan halaman yang sangat besar untuk meningkatkan kinerja garpu.

Setelah mencobanya sendiri menggunakan libhugetlbfs untuk membuat semua mallocs aplikasi saya mengalokasikan halaman yang sangat besar, saya sekarang mendapatkan sekitar 2400 forks/s terlepas dari ukuran prosesnya (di atas rentang yang saya minati). Luar biasa.


Linux
  1. Memboot Linux lebih cepat

  2. Perintah Linux ps

  3. Temukan Proses Orphan Linux

  1. Cara Mendaftar Proses yang Berjalan di Linux

  2. Cara Membunuh Proses yang Berjalan di Linux

  3. Apakah utas diimplementasikan sebagai proses di Linux?

  1. Contoh Perintah 20 ps untuk Memantau Proses Linux

  2. Temukan File Besar di Linux

  3. Perintah Ps di Linux (Mendaftar Proses)