パフォーマンスベンチマーク
Fish は、ロックフリー並行処理と低レイテンシーなポリグロットタスクオーケストレーションのために設計されています。
ベンチマーク比較
⚠️ 測定範囲と方法: 下表は単一マシン上の合成ベンチマーク比較であり、サンプルプロジェクトにおける特定時点での参考値です。環境やプロジェクト構成により結果は異なります。
ℹ️ 設計上の位置づけ: Fish はゼロ構成のポリグロットタスクオーケストレーター(Turborepo、Nx、Pants と同様のスコープ)として動作し、コンパイラレベルのハーメチックアクショングラフ(Bazel や Buck2 等)とは設計思想が異なります。下表の数値はパイプラインのスケジューリングとキャッシュ効率を反映しています。
| ビルドシステム | コールドビルド (100pkgs) | ウォームキャッシュビルド | メモリ使用量 | アーキテクチャ分類 |
|---|---|---|---|---|
| Fish 0.6.0 | 18.4s | 0.01s (Cache Hit) | ~24 MB | Zero-Config Polyglot Task Runner |
| Turborepo | 24.2s | 0.05s | ~85 MB | JS/TS Focused Task Runner |
| Nx | 31.8s | 0.12s | ~180 MB | Monorepo Task Runner |
| Bazel | 22.1s | 0.04s | ~650 MB (JVM) | Fine-Grained Hermetic Build System |
| Cargo (Rustのみ) | 42.6s | 0.85s | ~120 MB | Native Language Package Manager |
スケジューラオーバーヘッド予算 (< 100µs)
Fish は タスクディスパッチ決定あたり < 100µs という厳格なパフォーマンス予算を設定しています。Criterion によるベンチマークで、様々なグラフサイズ(50、200、1,000ノード)において計測されています:
| グラフサイズ | トポロジカルソート | レディキュー評価 | ディスパッチオーバーヘッド / タスク |
|---|---|---|---|
| 50 nodes | < 5 µs | < 2 µs | < 12 µs |
| 200 nodes | < 18 µs | < 7 µs | < 28 µs |
| 1,000 nodes | < 95 µs | < 35 µs | < 75 µs |
ピア比較ベンチマークスイート (Fish vs Ninja vs Bazel モデル)
peer_comparison ベンチマークスイートは、現実的な多言語モノレポ(コード生成、C++、Rust、TypeScript、Go の並行コンパイル、リンク、統合テスト)をシミュレートして比較します:
- Fish Work-Stealing: 動的ワークスティーリングと実行ヒューリスティックによる優先順位付け。
- Fish Critical Path: 最長依存チェーンを優先し、ワーカーのアイドル状態を最小化。
- Ninja ウェーブフロントシミュレーション: トポロジカルレベルごとの並列実行。
- Bazel フェーズバリアシミュレーション: フェーズごとの同期バリアを用いた段階的実行。
ベンチマークの実行方法
ワークスペース全体のベンチマークを実行:
bash
cargo bench --workspacefish-scheduler の個別ベンチマークを実行:
bash
# スケジューラオーバーヘッドとクリティカルパスの計測
cargo bench -p fish-scheduler --bench scheduler_performance
# 他ビルドモデルとの比較マトリクスの計測
cargo bench -p fish-scheduler --bench peer_comparison