単一テナント VM の CPU のオーバーコミット


単一テナントノードでの CPU のオーバーコミットにより、予備の CPU サイクルを相互に共有できるインスタンスをスケジュールできます。これにより、単一テナントノードのリソースをオーバープロビジョニングし、単一テナントノードで VM CPU を通常より多くスケジュールできます。CPU のオーバーコミットは、十分に活用されていないワークロードで比較的相関性のないバーストが発生する可能性がある場合に特に役立ちます。

CPU のオーバーコミットにより、単一テナントノードのコストがより多くの VM に分散されるため、VM ごとのコストの削減に役立ちます。また、ソケット単位またはコア単位のライセンスを使用すると、VM ごとのライセンス費用を削減できる場合があります。

CPU がオーバーコミットされた VM では、未使用の CPU リソースを次のように利用できます。

  • 単一テナントノードがいっぱいでない場合、オーバーコミットされた VM は未割り当てのコアを利用できます。

  • 単一テナントノードの別の VM が CPU リソースを使用していない場合(CPU がアイドル状態など)、オーバーコミットされた VM はこれらの CPU リソースを使用できます。

オーバーコミット レベル

VM の作成時に、または VM の停止後に VM に割り当てられる最小 CPU 数の値を指定できます。オーバーコミット レベルは、基盤となる CPU スレッドで VM での使用が保証されるスレッドの最小数を表します。VM の vCPU が、基盤となる使用可能なスレッド数よりも多い場合、VM の vCPU は基盤となるコンピューティング リソースを共有し、パフォーマンスが低下した状態で実行されます。

各 VM にこの値を設定することで、1 つの単一テナントノードで CPU のオーバーコミットのさまざまな比率の VM をプロビジョニングできます。値を小さくすると、相関性のあるバーストが発生した場合にパフォーマンスが低下する可能性がありますが、容量要件を低くすることができます。最適な最小 CPU 数を決定するには、ワークロードの使用率を理解し、値を繰り返し変更する必要があります。

この値を設定する際は、次の点に注意してください。

  • CPU の最小数を設定しなかった場合、または VM のマシンタイプの CPU 数と同じ値を CPU の最小数に設定した場合、VM のオーバーコミット比は 1.0 になります。オーバーコミット比を 1.0 に設定すると、CPU がアクセスできる VM がこの VM のみになるため、他の VM にオーバーコミットできる CPU リソースはなくなります。

  • CPU の最小数には、VM のマシンタイプで指定された CPU 数を超える値を設定できません。

  • 単一テナントノードのすべての VM の最小 CPU 数の合計は、その単一テナントノード タイプの CPU 容量(n1-node-96-624 ノードタイプでは 96)を超えないようにする必要があります。

VM のマシンタイプが指定する CPU 数は静的な値で、VM が最小 CPU 数からバーストした場合に使用できる CPU 数の上限を表します。必要な CPU 数が事前定義されたマシンタイプの提供する CPU 数と異なる場合は、カスタム マシンタイプを使用できます。

考慮事項

VM の CPU のオーバーコミット レベルを構成する前に、ワークロードの重要度を考慮してください。開発ワークロードやテスト ワークロードなど、重要度の低いワークロードは、高いオーバーコミット レベルを許容できる可能性があります。本番環境の支払いシステムなど、より重要なワークロードは、同等のオーバーコミットが許容されないか、まったく許容されない可能性があります。

ワークロードの使用率も考慮してください。CPU 使用率が高いワークロードは、他のオーバーコミットされた VM が使用する予備の使用率サイクルがないため、CPU のオーバーコミットの適切な候補にはなりません。また、平均 CPU 使用率が低く、使用率のピークが低いワークロードでは、さまざまなサイズのマシンタイプによるメリットが得られる可能性があります。

CPU のオーバーコミットを使用すると、ピーク使用率が高く、平均使用率が低い無相関のバースト性のあるワークロードにメリットがあります。これらのワークロードには、一部の VM が使用率をバーストする必要がある場合に、VM 間で共有できる利用可能な CPU リソースがある可能性が高いためです。ホスト上のすべての VM が一度にバーストした場合、そのホストには VM に十分なリソースがありません。

制限事項

ワークロードの制限事項

CPU のオーバーコミットは、厳密なパフォーマンス要件のないワークロード(開発やテスト用のワークロード、仮想デスクトップ インフラストラクチャなど)に最適です。

高レベルの CPU のオーバーコミットは、パフォーマンスの影響を受けるワークロードに適さない場合があります。

平均使用率とピーク使用率が常に低いワークロードの場合は、サイズの適正化をおすすめします。CPU のオーバーコミットではなく、ワークロードのリソース要件を満たすように VM インスタンスのサイズを変更することをおすすめします。

インスタンスのオーバーコミットが高すぎる場合は、インスタンスを別の単一テナントノードに移動します

マシンタイプの制限

CPU のオーバーコミットは、次のものに対してのみ行うことができます。

オーバーコミット レベルの制限

各単一テナントノードの最小 CPU のみを VM の CPU の半分に構成できるため、最大単一テナントノードのオーバーコミット率は 2.0 になります。

VM スケジューリングの制限

CPU のオーバーコミット用に構成されていない単一テナントノード テンプレートに基づく単一テナントノード グループでは、CPU のオーバーコミットを有効にして VM をプロビジョニングすることはできません。CPU のオーバーコミットが構成されていない単一テナントノードの最小 CPU 数で VM のスケジューリングを行うことはできません。

割り当て

CPU 割り当ては、オーバーコミットで使用可能な vCPU の最大値ではなく、単一テナントノード タイプの vCPU の数に基づいて行われます。

費用

ノード テンプレートで CPU オーバーコミットが選択されている単一テナントノードには、25% の追加料金がかかります。この料金は、単一テナントノードで VM を実行する場合の 10% のプレミアムに追加されます。CPU のオーバーコミット プレミアムは、CPU のオーバーコミット レベルや、単一テナントノードでスケジュールされている VM の数に関係なく固定されています。

単一テナントノードでは、確約利用割引が提供されます。単一テナント プレミアムと CPU のオーバーコミット プレミアムでは、継続利用割引をご利用いただけます。

単一テナントノードで VM を実行するコストを見積もるには、料金計算ツールをご覧ください。

オーバーコミット用に単一テナント VM を構成する

単一テナント VM を構成して CPU リソースをオーバーコミットできるようにするには、次の手順を行います。

  1. CPU のオーバーコミットを有効にした単一テナントノード テンプレートを作成します。CPU のオーバーコミットは、ノード テンプレートの作成中に有効にする必要があります。ノード テンプレートの作成後に CPU のオーバーコミットを有効にすることはできません。

  2. CPU のオーバーコミットが有効になっている単一テナントノード テンプレートに基づいて、単一テナントノード グループを作成します。

  3. VM を作成し、次の手順を行います。

    1. VM のマシンタイプを選択します。最小 CPU 数がマシンタイプの指定する CPU 数より少ない場合、マシンタイプの CPU 数は VM が最小 CPU 数からバーストした場合に使用できる CPU 数の上限を表します。

      単一テナントノードの CPU とメモリ容量を超えない限り、単一テナントノードの VM にはそれぞれ異なるマシンタイプを選択できます。

    2. その単一の VM に割り当てる CPU の最小数を指定するか、マネージド インスタンス グループを使用して、同じ CPU のオーバーコミット レベルで複数の VM を作成します。

始める前に

  • 単一テナントノード テンプレートを作成し、--cpu-overcommit-type=enabled を指定します。
  • CPU のオーバーコミットを有効にした単一テナントノード テンプレートに基づいて、単一テナントノード グループを作成します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

CPU のオーバーコミット レベルを設定する

次の手順では、CPU リソースをオーバーコミットできる単一テナント VM を作成する方法を説明します。実行中の VM の CPU のオーバーコミット レベルを変更する必要がある場合は、まず VM を停止する必要があります。

コンソール

Google Cloud Console で、CPU オーバーコミットが有効になっている単一テナントノード テンプレートから作成された単一テナントノード グループに単一テナント VM を作成します。

  1. [単一テナントノード] ページに移動します。

    [単一テナントノード] ページに移動

  2. [ノードグループ] をクリックします。

  3. VM を作成する単一テナントノード グループをクリックします。

  4. [インスタンスを作成] をクリックします。

  5. VM の [名前]、[リージョン]、[ゾーン] を指定します。

  6. [マシンの構成] で、4 つ以上の vCPU を持つ固定またはカスタムの [マシンタイプ] を選択します。

  7. [CPU のオーバーコミット] で、[CPU のオーバーコミットを有効にする] を選択します。

  8. [割り当てられる最小 vCPU 数] でスライダーを調整するか、vCPU の数を手動で入力して、この VM の CPU のオーバーコミット レベルを指定します。

  9. [作成] をクリックして、CPU リソースをオーバーコミットできる VM インスタンスを作成します。

gcloud

次の例は、gcloud compute instances create コマンドを使用して、CPU リソースをオーバーコミットできる単一テナント VM を固定マシンタイプで作成する方法を示しています。

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --min-node-cpu=MIN_VCPUS \
    --node-group=GROUP_NAME

次のように置き換えます。

  • VM_NAME: CPU をオーバーコミットする VM の名前。

  • MACHINE_TYPE: 単一テナント VM をプロビジョニングするマシンタイプ。マシンタイプで指定される CPU の数は、VM が MIN_VCPUS からバーストできる CPU の最大数です。

  • MIN_VCPUS: この VM で使用できることが保証される vCPU の最小数。

  • GROUP_NAME: VM をプロビジョニングする単一テナントノード グループの名前。

カスタム マシンタイプのオーバーコミット レベルの設定

CPU リソースをオーバーコミットできる単一テナント VM をカスタム マシンタイプで作成するには、--machine-type フラグを省略し、代わりに --custom-cpu フラグと --custom-memory フラグを使用して、カスタムマシンの CPU 数とメモリ量(ギガバイト単位)を指定します。

REST

次の例は、instances.insert コマンドを使用して、CPU リソースをオーバーコミットできる単一テナント VM を固定マシンタイプで作成する方法を示しています。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "scheduling": {
    "minNodeCpus": MIN_VCPUS,
    "nodeAffinities": [
      {
        "key": "compute.googleapis.com/node-group-name",
        "operator": "IN",
        "values": [
          "GROUP_NAME"
        ]
      }
    ]
  },
  ...
}

次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID

  • ZONE: このリクエストのゾーン。

  • MACHINE_TYPE_ZONE: マシンタイプをホストするゾーン。

  • MACHINE_TYPE: 単一テナント VM をプロビジョニングするマシンタイプ。マシンタイプで指定される CPU の数は、VM が MIN_VCPUS からバーストできる CPU の最大数です。

  • VM_NAME: CPU をオーバーコミットする単一テナント VM の名前。

  • MIN_VCPUS: この VM で使用できることが保証される vCPU の最小数。

  • GROUP_NAME: VM をプロビジョニングする単一テナントノード グループの名前。

カスタム マシンタイプのオーバーコミット レベルの設定

CPU リソースをオーバーコミットできる単一テナント VM をカスタム マシンタイプで作成するには、machineType フィールドの値を zones/zone/machineTypes/custom-CPUS-MEMORY に置き換え、CPUS を CPU の数に、MEMORY をカスタム マシンタイプのメモリ量(ギガバイト単位)に置き換えます。

CPU のオーバーコミット レベルを更新する

次の手順では、単一テナント VM の CPU オーバーコミット レベルを更新する方法を示します。

gcloud

  1. 実行中の VM の CPU のオーバーコミット レベルを変更するには、まず VM を停止する必要があります。VM を停止するには、次のように gcloud compute instances stop コマンドを使用します。

    gcloud compute instances stop VM_NAME
    

    VM_NAME は、停止するインスタンスの名前に置き換えます。

  2. 単一テナント VM の CPU オーバーコミット レベルを更新するには、次のように gcloud compute instances set-scheduling コマンドを使用します。

    gcloud compute instances set-scheduling VM_NAME \
      --min-node-cpu=MIN_VCPUS
    

    次のように置き換えます。

    • VM_NAME: CPU のオーバーコミット レベルを変更する単一テナント VM の名前。

    • MIN_VCPUS: この VM で使用できることが保証される vCPU の最小数。

REST

  1. 実行中の VM の CPU のオーバーコミット レベルを変更するには、まず VM を停止する必要があります。VM を停止するには、次のように instances.stop メソッドを使用して POST リクエストを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

    次のように置き換えます。

    • PROJECT_ID: プロジェクトの ID

    • ZONE: このリクエストのゾーン。

    • VM_NAME: CPU のオーバーコミット レベルを変更する単一テナント VM の名前。

  2. 単一テナント VM の CPU オーバーコミット レベルを更新するには、次のように instances.setScheduling メソッドを使用します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
    {
    "minNodeCpus":MIN_VCPUS
    }
    

    次のように置き換えます。

    • PROJECT_ID: プロジェクトの ID

    • ZONE: このリクエストのゾーン。

    • VM_NAME: CPU のオーバーコミット レベルを変更する単一テナント VM の名前。

    • MIN_VCPUS: この VM で使用できることが保証される vCPU の最小数。

単一テナント VM の CPU のオーバーコミットを無効にする

次の手順では、単一テナント VM の CPU のオーバーコミットを無効にする方法を示します。

gcloud

次の例は、gcloud compute instances set-scheduling コマンドを使用して、単一テナント VM の CPU オーバーコミットを無効にする方法を示しています。

gcloud compute instances set-scheduling VM_NAME \
  --clear-min-node-cpu

次のように置き換えます。

  • VM_NAME: CPU のオーバーコミットを無効にする単一テナント VM の名前。

REST

次の例は、instances.setScheduling コマンドを使用して、単一テナント VM の CPU のオーバーコミットを無効にする方法を示しています。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
{
  "minNodeCpus":null
}

次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID

  • ZONE: このリクエストのゾーン。

  • VM_NAME: CPU のオーバーコミットを無効にする単一テナント VM の名前。

CPU 使用率を表示する

単一テナント ノード グループ内の単一テナント VM の CPU 使用率を確認するには、次の操作を行います。

  1. Google Cloud コンソールで、[単一テナントノード] ページに移動します。

    [単一テナントノード] ページに移動

  2. [ノードグループ] をクリックします。

  3. CPU がオーバーコミットされた VM がある単一テナントノードを含む単一テナントノード グループをクリックします。

  4. CPU がオーバーコミットされた VM がある単一テナントノードをクリックします。

  5. 単一テナントノードの名前の下に、[CPU 使用率]、[CPU オーバーコミット タイプ]、[最小の CPU 使用数] が表示されます。

    • [CPU 使用率] は、この単一テナントノード上のすべての VM の最大 CPU 数の合計を、単一テナントノード タイプで指定された CPU の数で割った値です。

      オーバーコミットに使用できるノード上の CPU の数は、分子から分母を差し引いた数です。オーバーコミット レベルは、分子と分母の商です。

    • [最小の CPU 使用数] は、単一テナントノード上のすべての VM に割り当てられた CPU の最小数の合計を、ノードタイプで指定された CPU の数で割った値です。

CPU のオーバーコミット レベルを最適化する

CPU のオーバーコミットを最適なレベルに調整できるように、Compute Engine ではスケジューラ待機時間の指標を提供しています。スケジューラ待機時間の指標は、VM 上のすべての vCPU の待機時間を示します。これは、CPU のオーバーコミットが VM のパフォーマンスに及ぼす影響を判断する際に役立ちます。

ワークロードの感度は一定ではありませんが、一般的に、各 vCPU の最大待機時間には 1 秒あたり 20 ミリ秒のスケジューラ待機時間(20 ms/s)を使用します。たとえば、VM で 8 vCPU が設定されている場合、おおまかなしきい値は 160 ms/秒で、許容されるスケジューラ待機時間の平均は vCPU あたり 20 ms/秒になります。ワークロードのパフォーマンス要件により、最終的な許容範囲が決まります。

  1. Google Cloud Console で、[Monitoring] ページに移動します。

    [Monitoring] に移動

  2. [Metrics Explorer] をクリックします。

  3. [Resource type] フィールドに「VM Instance」と入力します。

  4. [Metric] フィールドに「Scheduler Wait Time」と入力します。

  5. [アラート] をクリックして、VM の待機時間しきい値に達したときにトリガーされるアラートを設定します。

次のステップ