Skip to content

パフォーマンスベンチマーク

Fish は、ロックフリー並行処理と低レイテンシーなポリグロットタスクオーケストレーションのために設計されています。

ベンチマーク比較

⚠️ 測定範囲と方法: 下表は単一マシン上の合成ベンチマーク比較であり、サンプルプロジェクトにおける特定時点での参考値です。環境やプロジェクト構成により結果は異なります。

ℹ️ 設計上の位置づけ: Fish はゼロ構成のポリグロットタスクオーケストレーター(Turborepo、Nx、Pants と同様のスコープ)として動作し、コンパイラレベルのハーメチックアクショングラフ(Bazel や Buck2 等)とは設計思想が異なります。下表の数値はパイプラインのスケジューリングとキャッシュ効率を反映しています。

ビルドシステムコールドビルド (100pkgs)ウォームキャッシュビルドメモリ使用量アーキテクチャ分類
Fish 0.6.018.4s0.01s (Cache Hit)~24 MBZero-Config Polyglot Task Runner
Turborepo24.2s0.05s~85 MBJS/TS Focused Task Runner
Nx31.8s0.12s~180 MBMonorepo Task Runner
Bazel22.1s0.04s~650 MB (JVM)Fine-Grained Hermetic Build System
Cargo (Rustのみ)42.6s0.85s~120 MBNative 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 --workspace

fish-scheduler の個別ベンチマークを実行:

bash
# スケジューラオーバーヘッドとクリティカルパスの計測
cargo bench -p fish-scheduler --bench scheduler_performance

# 他ビルドモデルとの比較マトリクスの計測
cargo bench -p fish-scheduler --bench peer_comparison