it.xnews.jp
出典: LWN.net 生成: 2026-06-06 読了 約 3 分 model: claude-haiku-4-5 原文: https://lwn.net/SubscriberLink/1076018/16f01bbbb8e0d1f0/ raw.md

Linux カーネルの fork()/exec() パターン、新しい実装方針へ

LWN.net は 2026年6月5日、Linux カーネルのプロセス作成システムコールの最適化を巡る議論を報じた。Li Chen が提案した「spawn templates」は改善されず、代わりに pidfd を基盤とした posix_spawn() の実装へ向かう方針が示唆された。

LWN.net のレポートによると、Li Chen はプロセス作成の fork() と exec() パターンを最適化する「spawn templates」のパッチセットを提案した。fork() はプロセスをコピーして子プロセスを作成し、exec() は現在のプロセスに新しいプログラムを実行する。Linux カーネルでは fork() は clone() として、exec() は execve() として実装されている。

fork() は親プロセスの状態をメモリ含めて全てコピーする比較的コストの高いシステムコールである。問題は、fork() の直後にほぼ常に exec() が呼ばれ、コピーされたメモリが破棄されることにある。vfork() はこのパターンを最適化する試みであったが、spawn templates はプロセスを繰り返し起動するアプリケーション向けの新しいアプローチを提案している。

spawn templates の仕様

Chen が提案したシステムコール spawn_template_create() は、実行ファイル用のテンプレートを表すファイルディスクリプタを返す。テンプレートはファイルディスクリプタ (execfd) またはパス (filename) のいずれかで指定されるが、両方の同時指定はできない。spawn_template_spawn() はテンプレートを使用して新しいプロセスを実行する。新しいファイルを実行する場合のすべての通常チェックが spawn templates でも適用される。

ベンチマーク結果は従来の fork()/exec() パターンに比べ約 2% の改善を示した。この改善が予想パターンに当てはまるアプリケーションに対し有意義である可能性がある。

カーネル開発者による別案提示

Mateusz Guzik は「このテーマは自分の心の奥底にあり、ずっと折に触れて考えている。fork + exec のイディオム全体は悲劇的であり、廃止される必要がある」と述べ、「pristine プロセスを作成することが進むべき道である」と主張した。

Christian Brauner は「exec 用のビルダー API を持つという考えはそこまで狂ったものではない」とコメントし、「正しいアプローチは pidfd_open() にオプションを追加して空のプロセスを作成することだ」と提案した。新しい pidfs_config() システムコールは空のプロセスを設定し、fsconfig() に類似するものになるという。Brauner は「posix_spawn() は fork()/exec() パターンの置換として適切であり、開発者は (現在の実装のように fork() と exec() を隠すのではなく) ネイティブ実装を歓迎するだろう」と述べた。

Chen は Brauner が広く描き出した API 案の方が優れていることに同意し、将来の取り組みはその方向に進むと述べた。spawn templates パッチは現在の形では受け入れられないと報じられているが、この議論は Linux カーネルで pidfd 抽象化を基盤とした posix_spawn() のネイティブ実装へ向かう可能性のある方向性を示唆している。

筆者の見立て

この記事は元記事の事実のみに基づいて自動生成されました。

出典

LWN.net「Moving beyond fork() + exec()」https://lwn.net/SubscriberLink/1076018/16f01bbbb8e0d1f0/

この記事をシェア