Skip to content
Latchkey

CIにおけるCold Start vs Warm Start: 待ち時間はどこから来るのか

cold startとは、jobが始まる前にrunnerを作成して起動しなければならないことを意味し、warm startとは、すでに1つが待機していることを意味します。その違いは、どのstepが実行される前にも感じるキューから開始までの遅延です。

jobが1つのstepを実行する前に、runnerは存在し、起動し、登録され、割り当てられなければなりません。それがオンデマンド(cold)で行われるか、準備済みのpool(warm)から行われるかが、各jobの前にどれだけのアイドル待ち時間が置かれるかを決めます。

cold startに含まれるもの

  • 新しいインスタンスのプロビジョニング(VMの割り当て)。
  • runner imageの起動とエージェントの開始。
  • CIサービスへの登録とjobの割り当て。
  • そこで初めて - そのときになってようやく - 最初のstepが始まります。

warm startが省くもの

warm startは、あらかじめプロビジョニング、起動、登録されたrunnerのpoolから引き出します。jobはほぼ即座にそのうちの1つに引き渡され、プロビジョニングと起動の遅延を省きます。最初のstepは、jobを割り当てるのにかかる時間程度で始まります。

トレードオフ

warm runnerは、仕事を待ってアイドルしている間もお金がかかります。cold startは各jobにレイテンシのコストがかかりますが、アイドル中は何もかかりません。マネージドrunnerプラットフォームは、需要に合わせてサイズを調整したwarm poolでこれをバランスします。通常の負荷を吸収できるだけの準備済みrunnerを用意し、あふれた分はcold startのプロビジョニングで対応します。

コストと体感にとって重要な理由

cold startの時間は、依然として支払う可能性のあるデッドタイムであり(job内のセットアップは課金対象です)、特に短いjobが多いとCIを重く感じさせます。それを - warm poolと起動の速い無駄のないimageによって - 減らすことで、請求と開発者体験の両方が改善されます。長いキューの後の緑のチェックも、依然としてプロビジョニングの問題を隠しています。

重要なポイント

  • Cold start = jobが始まる前にプロビジョニング + 起動 + 登録。
  • Warm start = プロビジョニング済みのrunnerを再利用し、その遅延を省く。
  • warm poolはアイドルのコストがかかり、cold startはjobごとのレイテンシがかかる。
  • 起動の速いimageと適切なサイズのwarm poolはコストと体感を改善する。

関連ガイド