GNU/Linux >> Linux の 問題 >  >> Linux

Linux での大規模なプロセスのより高速なフォーク?

Linux では、posix_spawn(2) を使用できます。 POSIX_SPAWN_USEVFORK で 大きなプロセスから fork するときにページ テーブルをコピーするオーバーヘッドを回避するためのフラグ。

アプリケーション サブプロセスを作成するためのメモリ使用量の最小化を参照してください。 posix_spawn(2) の概要 、その利点といくつかの例。

vfork(2) を活用するには 、あなたが #define _GNU_SOURCE であることを確認してください #include <spawn.h> より前 そして単純に posix_spawnattr_setflags(&attr, POSIX_SPAWN_USEVFORK)

これが Debian Lenny で動作することを確認でき、大規模なプロセスから fork するときに大幅なスピードアップを実現します。

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)

結果 :ここでの他の回答で示唆されているように、初期に生成されたヘルパー サブプロセス ルートをたどるつもりでしたが、フォークのパフォーマンスを向上させるために巨大なページのサポートを使用しているのに出会いました。

libhugetlbfs を使用して、自分のアプリのすべての malloc に巨大なページを割り当てさせるだけで試してみたところ、プロセス サイズに関係なく、約 2400 フォーク/秒になりました。 (とにかく興味のある範囲で)。すごい。


Linux
  1. Linuxをより速く起動する

  2. Linuxで実行中のプロセスを強制終了する方法

  3. Linux の孤立したプロセスを見つける

  1. Linuxで実行中のプロセスを一覧表示する方法

  2. Linuxpsコマンド

  3. スレッドは Linux でプロセスとして実装されますか?

  1. Linuxプロセスを監視するための20psのコマンド例

  2. Linuxで大きなファイルを探す

  3. LinuxのPsコマンド(プロセスのリスト)