Unix系OSでfork()とexec()を超える新プロセス生成手法の提案

原題: Moving beyond fork() + exec()

なぜ重要か

Linuxカーネルのプロセス生成効率化により、高頻度でプロセスを起動するアプリケーションの性能向上が期待される

LWN.netによると、LinuxカーネルでLi ChenがUnixの伝統的なfork()とexec()システムコールの代替として「spawn templates」を提案した。この手法は同じ実行ファイルを繰り返し起動するアプリケーションでプロセス生成コストを削減し、テンプレート作成で設定コストを複数操作に分散させる仕組み。

Unixの初期から使われているfork()とexec()システムコールは、子プロセス作成と新プログラム実行の基本機能を担ってきた。Linuxカーネルではclone()とexecve()として実装されているが、基本機能は同じである。しかし、このプロセス生成モデルには優雅さがある一方で欠点もある。fork()は比較的コストが高いシステムコールで、子プロセス用にメモリを含むプロセス状態全体をコピーする必要がある。長年にわたり多くの最適化が行われたが、fork()は依然として根本的にコストの高い操作である。さらに悪いことに、fork()の呼び出しは即座にexec()が続くことが多く、子プロセス用に慎重にコピーされたメモリがすべて破棄される。vfork()などの最適化の試みもあったが、このパターンは依然として必要以上にコストが高い。Li Chenの提案するspawn templatesは、fork()とexec()パターンを最適化する興味深いアプローチを取っている。同じ実行ファイルを実行するプロセスを繰り返し起動するアプリケーションに焦点を当てており、例えばリポジトリの内容に関する情報を取得するためにGitを繰り返し実行するプログラムなどが想定される。このようなケースでは、プログラムはそれらの呼び出しを加速するためのテンプレートを確立し、設定コストを複数の操作に分散させることができる。

出典

lwn.net — 元記事を読む →