ファンアウトビルドとは何か?作業を多数のジョブに分割する
ファンアウトビルドは、1つのまとまった作業を同時に実行される多数の並列jobに分割し、実時間を削減します。
テストスイートが1台のマシンで30分かかるなら、10台のマシンに分割すればおよそ3分で終わります。それがファンアウトです。分割可能なワークロードを取り、多数の並列jobに広げ、それらを同時に実行します。その後ファンインstepが結果を収集します。ファンアウトは、遅いパイプラインを速くする最も効果的な方法の1つです。
ファンアウトの仕組み
作業をshard(テストのスライス、matrixのサブセット)に分割し、shardごとにjobを起動します。jobは別々のエージェント上で並列に実行されます。それらは独立しているため、合計実時間は合計ではなく、最も遅い単一のshardに近づきます。
ファンアウトからファンインへ
- ファンアウト: 作業をN個の並列jobに分割する。
- 各jobが自分のスライスを独立して処理する。
- ファンイン: 1つのjobが結果を収集してマージする。
簡単な例
テストのshardingはスイートをファンアウトします。shard 1はテスト1-100を実行し、shard 2は101-200を実行し、10個のjobにわたって以下同様です。最後のjobが各shardのreportをダウンロードし、それらを1つの結果にマージします。
ファンアウトが報われる時
ファンアウトは、作業が大きく分割可能で、jobごとのオーバーヘッドが少ない時に役立ちます。各jobが作業よりもセットアップに多くの時間を費やす時には害になります。固定コストが倍増するからです。shard数をjobごとのstartupとバランスさせましょう。
ファンアウトとランナーのキャパシティ
ファンアウトは、十分なエージェントが一度にshardを実行できる空きがある場合にのみ高速化します。そうでなければ、余ったjobはただキューに入るだけです。マネージドランナー(Latchkey)はオンデマンドの並列キャパシティを提供するので、ファンアウトは列で待つのではなく実際に並列で実行されます。
重要なポイント
- ファンアウトビルドは、分割可能な作業を多数の並列jobに分けます。
- その後ファンインstepが結果を再びまとめます。
- 十分なエージェントが一度にshardを実行する場合にのみ高速化します。
関連ガイド
What Is Pipeline Parallelism? Running Jobs at the Same TimePipeline parallelism runs independent jobs at the same time instead of one after another, cutting wall-clock…
What Is a Parent-Child Pipeline? Splitting a Big PipelineA parent-child pipeline splits a large pipeline into a parent that triggers smaller child pipelines, often pe…
What Is a Build Fingerprint? Identifying Inputs and OutputsA build fingerprint is a hash that uniquely identifies a build by its inputs, used for caching and skipping u…