- What the Forkは、C/C++/Rust など多様なビルド過程をリアルタイムで可視化するクロスプラットフォームツール
- 既存のビルドシステムにおける並列処理不足や非効率なプロセスなどの構造的問題を簡単に把握できる
- すべてのビルドシステムおよびプログラミング言語で動作し、make、ninja、gradle、zig、cargo など多様なビルドツールをサポート可能
- システムコール監視によって各プロセスの実行時間、コマンド、依存関係をボックス形式で可視化
- ビルド最適化、ボトルネック分析、CI パフォーマンス改善などに非常に有用なツール
紹介と背景
- What the Forkは、ビルドが遅くなる原因を視覚的に診断するために開発されたリアルタイムビルド可視化ツール
- LLVM プロジェクトのようにコード量そのものが多く、コンパイルが遅くなることもあるが、多くのビルドは非効率な設定のせいで不必要に長時間かかっている場合が多い
- 従来はビルドの問題点を直接確認したり、構造的な問題をひと目で把握したりするのが難しかったため、このようなツールが必要だった
- このツールはクロスプラットフォーム向けに設計されており、あらゆるビルドシステムと言語に適用できる
主な機能と使い方
- What the Forkは単なるシステムプロファイラではなく、ビルドに特化した問題を診断するツール
- 例として、make 使用時の
-j フラグ未使用、特定ファイルまたはコンパイル段階への時間偏重、並列実行可能なのに逐次実行されているコマンドの検出などがある
- 特に CI 環境における clean build の性能分析と最適化に効果的
- 使い方は
wtf コマンドをビルドコマンドの前に付けて実行するだけ(例: wtf make、wtf cargo build、wtf npm run build など)
- ビルドが始まると UI が起動し、各プロセスの進行状況をリアルタイムで更新する
UI と可視化の方式
- 各ビルドプロセスはボックス形式でタイムライン上に表示され、色で種類を区別
- プロセスの親子関係はネスト構造で表現
- 下部パネルでは、選択したプロセスの実行時間、作業ディレクトリ、完全なコマンド引数情報を表示
動作原理
- ビルドは複数のプロセス(例:
bash、clang、ld)の組み合わせで成り立つ
- 大規模ビルドでは
cargo、make、bazel、gradle、xcodebuild など多様なビルドツールが使われ、これらは実際には多数のコマンド、依存関係、キャッシュ、スケジューリング処理を実行している
- ターミナル出力だけでは、ネストされたプロセス(例: clang が内部で呼び出す ld など)や詳細なタイミング構造を把握できない
- そのため、OS ごとのプロセス開始・終了を検知するシステムコール(macOS: Endpoint Security API、Linux:
ptrace()、Windows: Event Tracing for Windows など)を活用する
- この方式により、ビルド全体の過程とタイムラインを復元し、各段階の実行経路と所要時間を識別できる
- ビルド以外にも、さまざまなサブプロセスのトラッキングに活用できる
実例と観察結果
- 複数のエンジニア(Delta、Mozilla、Apple 所属)が実際にプロジェクトへ適用した結果、予想外の問題を発見
- 例 1: Cargo を使うオープンソースプロジェクトで、ファイルが逐次的にコンパイルされており、並列性不足を確認(10 コア CPU で 10 倍以上の高速化可能性を確認)
- 例 2: Ninja を使った LLVM ビルドでは、すべての CPU コアが効率よく並列処理を実行し、理想的なビルド効率を達成
- 例 3: CMake ベースのプロジェクトで、cmake/make/clang のネスト実行と Xcode/OS バージョン再確認が 85 回も繰り返される非効率な構造を発見(実際の作業はごく一部のみ)
- 例 4: xcodebuild を使う大規模 Objective-C プロジェクトでは、ビルド後半の並列処理不足と、ビルド開始前に 6 秒間のアイドル状態が存在することを確認(対して ninja は 0.4 秒後にすぐコンパイル開始)
- 例 5: Zig が Orca Project をコンパイルする際、依存関係のビルド順序がランダムに決まり、運によって並列処理効率が変化。一部の依存関係が最後に実行され、並列性が低下する現象を観察
- 例 6: make/go を使う GitHub CLI プロジェクトでは依存関係のダウンロード時間が長い。依存関係を減らせばビルド速度の改善が期待できる
活用効果と限界
- 視覚的なタイムライン分析により、予想外のボトルネック、不必要な依存関係の繰り返し、並列性が不足している領域を確認できる
- 依存関係の問題、不必要な再作業、特定ツールの非効率性といった構造的な改善点を素早く把握し、ビルド性能の最適化に直接活用できる
- プロセスの完全なコマンドを確認することで、より詳細な分析が可能
ベータプログラム
- What the Forkは Windows、Linux、macOS で動作
- フィードバックを希望する個人およびチームは、プライベートベータに申し込み可能(Google フォームへのリンクあり)
まだコメントはありません。