ネットワーク帯域幅

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Google Cloud では、ネットワーク インターフェース(NIC)や IP アドレスではなく、仮想マシン(VM)インスタンスごとの帯域幅を考慮します。VM のマシンタイプにより、許容される最大下り(外向き)レートが定義されていますが、最大下り(外向き)レートに達するのは特定の状況に限られます。

このページでは、デプロイ計画に役立つ想定値について説明します。帯域幅は、次の 2 つの基準で分類されます。

  • トラフィックの方向: このページの説明も同様ですが、トラフィックの方向は常に Google Cloud VM を基準に考えます。
    • Google Cloud VM から送信されるパケットは下り(外向き)トラフィックになります。
    • Google Cloud VM に送信されたパケットは上り(内向き)トラフィックになります。
  • 宛先 IP アドレスの種類: Google Cloud では IP アドレスを内部または外部のいずれかに分類します。

    • VPC ネットワーク内の IP アドレスは内部 IP アドレスになります。たとえば、各 VM の NIC には VPC ネットワーク内のプライマリ内部 IP アドレスが割り当てられています。内部 IP アドレスは、有効なプライベート IP アドレスまたはプライベートで再利用されるパブリック IP アドレスです。
    • インターネットからアクセス可能な IP アドレスは外部 IP アドレスになります。Google Cloud では、VM の NIC などに外部 IP アドレスが割り当てられています。外部 IP アドレスは常にパブリック IP アドレスになります。Google Cloud の外部にあるインターネット上のパブリック IP アドレスも外部 IP アドレスです。

    正確な定義については、VPC ドキュメントの IP アドレスをご覧ください。たとえば、VPC ネットワーク内でプライベートとしてパブリック IP アドレスを再利用すると、このアドレスは内部 IP アドレスになり、対応する外部 IP アドレスに到達できなくなります。

このページの説明は、Compute Engine VM と、Compute Engine VM に依存するプロダクトを対象としています。たとえば、Google Kubernetes Engine ノードは Compute Engine VM です。

ネットワーク インターフェース(NIC)や NIC ごとの IP アドレスを追加しても、VM の上り(内向き)または下り(外向き)の帯域幅は増加しません。たとえば、2 つの NIC を持つ n1-standard-8 VM では、NIC ごとの下り(外向き)帯域幅ではなく、下り(外向き)帯域幅の合計が 16 Gbps に制限されています。

帯域幅の概要表

次の表に、帯域幅の想定値の概要を示します。

パケットの宛先アドレス
トラフィックの方向 宛先が内部 IP アドレス 宛先が外部 IP アドレス
Google Cloud VM からの
下り(外向き)
  • 許容される下り(外向き)の最大量は、送信側の VM のマシンタイプによって異なります。VM ごとの Tier_1 ネットワーキング パフォーマンス構成では、最大 100 Gbps の下り(外向き)帯域幅の上限がサポートされています。Tier_1 ネットワーキングは、N2、N2D、C2、C2D のマシンシリーズで作成された一部の VM で使用されるオプションです。詳細については、VM ごとの Tier_1 ネットワーキング パフォーマンスを構成するをご覧ください。
  • 許容される最大下り(外向き)レートを実現するには、同じ VPC ネットワークまたは VPC ネットワーク ピアリングで接続している VPC ネットワークで、送信側の VM と同じゾーンにある別の Google Cloud VM の内部 IP アドレスにトラフィックを送信します。
1 つの VM からの下り(外向き)の最大値は、次の上限を超えることはできません。
  • 外部 IP アドレスへの下り(外向き)フロー全体で、合計 7 Gbps または合計 25 Gbps の Tier_1 ネットワーキング
  • 外部 IP アドレスに対する下り(外向き)フローごとに 3 Gbps
Google Cloud VM への
上り(内向き)
  • マシンタイプ、オペレーティング システム、ネットワーク条件によって制限されます。
  • Google Cloud では、内部 IP アドレスへの上り(内向き)に制限は適用されません。
Google Cloud では、VM の外部 IP アドレスに送信される上り(内向き)トラフィックを制限することで、VM を保護しています。トラフィック量は次のいずれかのレート(最初に到達したほう)で制限されます。
  • 1,800,000 pps(パケット/秒)
  • 30 Gbps

下り(外向き)帯域幅

Google Cloud では、VM およびプロジェクトごとに送信(下り)帯域幅を制限しています。送信帯域幅には、VM のすべての NIC から送信されたトラフィックと、VM に接続している永続ディスクに転送されるすべてのデータが含まれます。

標準の最大下り(外向き)帯域幅は、VM のマシンタイプによって異なります。下り(外向き)の最大帯域幅は、通常、vCPU あたり 2 Gbps ですが、マシンシリーズによっては違いと例外がいくつかあります。次の表に、VM Tier_1 ネットワーキングのパフォーマンスではなく、標準ネットワーク階層の下り(外向き)帯域幅の下限と上限を示します。

マシンシリーズ 標準の最小下り(外向き)上限 標準の最大下り(外向き)上限
E2 1 Gbps 16 Gbps
T2D 10 Gbps 32 Gbps
N2、C2、N2D、C2D 10 Gbps 32 Gbps
N1(1 vCPU の VM を除く) 10 Gbps Skylake CPU プラットフォームで 32 Gbps
Skylake より古い CPU プラットフォームで 16 Gbps
1 個の vCPU、f1-micro、g1-small を含む N1 マシンタイプ 2 Gbps 2 Gbps
A2 GPU ベース GPU ベース

たとえば、t2d-standard-6 マシンタイプに基づく VM の標準最大下り(外向き)帯域幅は 12 Gbps です。この値は 6 つの vCPU に基づいており、vCPU ごとに 2 Gbps となります。この結果、12 Gbps は、マシンシリーズの最小値より大きく、上限の 32 を超えていません。

すべてのマシンタイプの下り(外向き)帯域幅の上限は、特定のマシン ファミリーのページで確認できます。

許容される下り(外向き)帯域幅の最大量を常に使用できるとは限りません。マシンタイプに加えて、下り(外向き)帯域幅は次のような要因によって影響を受けます。

  • ゲスト イーサネット ドライバ - GVNIC は VirtIO ネットワーク インターフェースよりもパフォーマンスが優れている
  • パケットサイズ
  • プロトコルのオーバーヘッド
  • フロー数
  • VM のゲスト OS でのイーサネット ドライバの設定。たとえば、チェックサム オフロード、TCP セグメンテーション オフロード(TSO)など。
  • ネットワークの輻輳
  • パケットの宛先。Google Cloud は、送信パケットの宛先アドレスが内部 IP アドレスか外部 IP アドレスかによって、VM からの下り(外向き)トラフィックの処理が異なります。
  • 永続ディスクが他の下り(外向き)ネットワーク トラフィックと競合する状況では、最大ネットワーク帯域幅の 60% が永続ディスクの書き込みに割り当てられ、残りの 40% が他の下り(外向き)ネットワーク トラフィックに割り当てられます。詳細については、Persistent Disk に関するドキュメントのパフォーマンスに影響するその他の要因をご覧ください。

汎用マシンタイプやコンピューティング最適化マシンタイプを使用すると、VM ティア 1 のネットワーク パフォーマンスを有効にして、ネットワーク帯域幅を増やすことができます。

内部 IP アドレスへの下り(外向き)

送信側の VM からみると、Google Cloud は、送信側の VM のマシンタイプに応じて内部 IP アドレスへの下り(外向き)トラフィックの最大量を制限します。内部 IP アドレスは、VPC ネットワーク、VPC ネットワーク ピアリングで接続している別の VPC ネットワーク、Cloud VPN または Cloud Interconnect 経由で VPC に接続しているネットワークの IP アドレスです。

内部 IP アドレスの送信元と宛先で VM 間のトラフィックを分類し、許容される帯域幅が最も多いものから並べると次のようになります。

  • 同じゾーン内の VM 間
  • 同じリージョンの異なるゾーンの VM 間
  • リージョンとゾーンが異なる VM 間
  • Private Service Connect を使用した VM から Google API とサービスへの接続

VM から Cloud VPN トンネルで接続している別の VPC ネットワークの内部 IP アドレスにトラフィックを送信すると、下り(外向き)帯域幅は、Cloud VPN トンネルの最大データレートで制限されます。

複数のトンネルと ECMP ルーティングの帯域幅を最大限活用するには、複数の TCP 接続(一意の 5 タプル)を使用する必要があります。5 タプルは、プロトコル、送信元 IP アドレス、送信元ポート、宛先 IP アドレス、宛先ポートで構成されます。

外部 IP アドレスへの下り(外向き)

送信側の VM から見ると、Google Cloud はパブリック IP アドレスまたは外部 IP アドレスの宛先に送信されるトラフィックを次のいずれかのレート(最初に到達した方)で制限します。外部 IP アドレスは、一般公開され、ルーティング可能なアドレスです。Google Cloud リソースの外部 IP アドレスか、インターネット上のアドレスのいずれかになります。

  • Tier_1 ネットワーキングが有効になっている VM 上のすべてのパケットフローと接続については、合計 25 Gbps
  • Tier_1 ネットワーキングが有効になっていない VM 上のすべてのパケットフローと接続については、合計 7 Gbps
  • フローごとに 3 Gbps(一意の 5 タプルハッシュ)

Google Cloud VM には外部 IP アドレスを関連付けることができます。

  • VM のネットワーク インターフェースに外部 IP アドレスを割り当てることができます。
  • プロトコル転送に使用される外部転送ルールには外部 IP アドレスが必要です。
  • ネットワーク TCP / UDP ロードバランサの転送ルールには外部 IP アドレスを指定する必要があります。
  • 外部 IP アドレスは Cloud NAT ゲートウェイに関連付けられています。

たとえば、n2-standard-16 インスタンスの下り(外向き)帯域幅の上限は 32 Gbps ですが、インターネットへの下り(外向き)帯域幅の合計は 7 Gbps になります。

プロジェクトごとの下り(外向き)の割り当てと上限

Google Cloud はプロジェクトに以下も適用します。

  • 各リージョンのすべての VM から Google Cloud 外部にある外部 IP アドレスへのインターネット下り(外向き)帯域幅の上限: この上限は各リージョンのインターネット下り(外向き)帯域幅の割り当てで定義されます。

  • 特定のリージョンにあるすべての VM から、他のすべての Google Cloud リージョンへの下り(外向き)帯域幅の上限: 内部 IP アドレスと外部 IP アドレスの両方に送信されるトラフィックに適用されます。この上限は内部テレメトリーを使用して計算されますが、ほとんどのプロジェクトでリージョン間の帯域幅が制限されることはありません。必要なリージョン間の帯域幅を確保する方法については、営業チームにお問い合わせください。

上り(内向き)帯域幅

Google Cloud は、パケットの宛先が内部 IP アドレスか外部 IP アドレスかによって、VM への受信トラフィックを異なる方法で処理します。

内部 IP アドレスへの上り(内向き)

Google Cloud では、関連付けられた内部 IP アドレスへの受信トラフィックに制限を設けていません。VM は、マシンタイプ、オペレーティング システム、その他のネットワーク条件やリソースで許容されている範囲内で内部トラフィックを受信できます。関連付けられた内部 IP アドレスは次のいずれかです。

  • VM のネットワーク インターフェースに割り当てられたプライマリ内部 IP アドレス
  • VM のネットワーク インターフェースに割り当てられたエイリアス IP 範囲内のエイリアス IP アドレス
  • 内部プロトコル転送に使用される内部転送ルールの IP アドレス
  • 内部 TCP / UDP ロードバランサの転送ルールの IP アドレス

外部 IP アドレスへの上り(内向き)

Google Cloud は、VM に関連付けられている外部 IP アドレスに送信されるトラフィックを次のいずれかのレート(最初に到達したほう)で制限します。

  • 1 秒あたり 1,800,000 パケット
  • 20 Gbps

この制限において、関連付けられた外部 IP アドレスは次のいずれかです。

  • VM のネットワーク インターフェースに割り当てられた外部 IP アドレス
  • 外部プロトコル転送に使用される外部転送ルールの IP アドレス
  • ネットワーク TCP / UDP ロードバランサの転送ルールの IP アドレス
  • Cloud NAT によって処理される確立済みの受信レスポンス

関連付けられた外部 IP アドレスの最後の 2 つの定義の場合、外部 IP アドレスは複数の VM で共有され、Google Cloud は各バックエンド VM の受信トラフィックを個別に制限します。

受信キューと送信キュー

各 VM NIC には、ネットワークからパケットを処理するいくつかの受信キューと送信キューが割り当てられます。

  • 受信キュー(RX): パケットを受信するキュー。NIC は、ネットワークからパケットを受信すると、受信パケットの記述子をキューから選択し、処理を行い、interrupt により vCPU コアに接続しているパケットキューを介してゲスト OS にパケットを渡します。RX キューがいっぱいで、パケットの配置に利用できるバッファがない場合、パケットは破棄されます。これは通常、選択したパケットキューに接続されている vCPU コアをアプリケーションが過剰に使用している場合に発生することがあります。
  • 送信キュー(TX): パケットを送信するためのキュー。ゲスト OS がパケットを送信すると、記述子が割り当てられて TX キューに配置されます。NIC は記述子を処理し、パケットを送信します。

デフォルト キューの割り当て

明示的に NIC のキュー数を割り当てていない限り、NIC ごとに固定数の RX キューと TX キューを割り当てる Google Cloud のアルゴリズムをモデル化できます。

  1. ネットワーク インターリーブのタイプに応じて、次のいずれかの方法を使用します。

    • VirtIO: vCPU の数を NIC の数で割り、残りの量(number of vCPUs/number of NICs)を破棄します。
    • GVNIC: vCPU の数を NIC の数で割り、結果を 2 で割って残りの値 [number of vCPUs/number of NICs/2] を破棄します。

    この計算結果は小数ではなく、必ず整数になります。

  2. 計算された数値が 1 未満の場合は、それぞれの NIC に 1 個のキューが割り当てられます。

  3. 計算された数が各 NIC の最大キュー数より大きいことを確認します。NIC の最大キュー数はドライバの種類によって異なります。

    • virtIO またはカスタム ドライバを使用する場合、NIC あたりの最大キュー数は 32 になります。計算された数値が 32 より大きい場合: 計算結果の数値は無視され、それぞれの NIC に 32 個のキューが割り当てられます。
    • gvNIC を使用する場合、NIC あたりのキューの最大数は 16 です。計算された数値が 16 より大きい場合: 計算結果の数値は無視され、それぞれの NIC に 16 個のキューが割り当てられます。

次の例は、デフォルトのキュー数を計算する方法を示しています。

  • VM が VirtIO を使用していて、16 個の vCPU と 4 個の NIC を使用している場合、計算される数値は [16/4] = 4 です。Google Cloud は、各 NIC に 4 つのキューを割り当てます。

  • GVNIC を使用し、vCPU が 128 個と NIC が 2 つある VM の場合、計算される数値は [128/2/2] = 32 です。Google Cloud では、NIC あたりの最大数に到達するまで、NIC ごとに最大数を割り当てます。Google Cloud は、NIC ごとに 16 キューを割り当てます。

Linux システムでは、ethtool を使用して、Google Cloud によって NIC ごとに割り当てられるキューの数より少ない NIC を構成できます。

カスタムキューの割り当て

デフォルトのキュー割り当ての代わりに、Compute Engine API を使用して新しい VM を作成するときに、各 NIC にカスタムキュー数(RX と TX の合計)を割り当てることができます。

指定するカスタムキューの数は、次のルールに従う必要があります。

  • NIC ごとに割り当て可能な最小キュー数は 1 です。

  • 割り当て可能な最大キュー数は、ドライバタイプに応じて、vCPU 数または NIC ごとの最大キュー数のうち少ない方になります。

    • virtIO またはカスタム ドライバを使用する場合、最大キュー数は 32 です。
    • gvNIC を使用する場合、最大キュー数は 16 です。
  • カスタムキューの数を VM のすべての NIC に割り当てる場合、キューの数の割り当て合計は、VM インスタンスに割り当てられた vCPU の数以下であることが必要です。

次のような例が挙げられます。

  • VM に 8 個の vCPU と 3 個の NIC がある場合、VM の最大キュー数は vCPU の数、8 になります。1 つのキューを nic0 に、4 つのキューを nic1 に、3 つのキューを nic2 に割り当てることができます。この例では、その後に 4 つのキューを nic2 に割り当てても、他の 2 つの NIC キューの割り当ては維持されません。割り当てられたキューの合計が vCPU の数(8 つ)を超えることはないためです。

  • VM に 96 個の vCPU と 2 つの NIC があるときに、virtIO ドライバを使用すると、それぞれの NIC に最大 32 個のキューを割り当てることができます。また、gvNIC ドライバを使用する場合は、それぞれに最大 16 個のキューが割り当てられます。この例では、割り当てられているキューの合計は常に vCPU の数より少なくなります。

また、一部の NIC にのみカスタムキュー数を割り当てて、Google Cloud が残りの NIC にキューを割り当てることもできます。NIC ごとに割り当て可能なキューの数には、引き続き上記のルールが適用されます。構成の実現可能性をモデル化できます。構成が可能な場合は、このプロセスで Google Cloud が残りの NIC に割り当てるキューの数も設定できます。

  1. カスタムキューの割り当てを使用して、NIC のキューの合計を計算します。20 個の vCPU と 6 個の NIC を持つ VM の例では、nic0 に 5 つのキュー、nic1 に 6 つのキュー、nic2 に 4 つのキューを割り当て、Google Cloud で nic3nic4nic5 のキューを割り当てるとします。この例では、カスタム割り当てキューの合計は 5+6+4 = 15 になります。

  2. vCPU の数からカスタム割り当てキューの合計を引きます。この差が、Google Cloud がキューを割り当てる残りの NIC の数と一致していない場合、Google Cloud はエラーを返します。20 個の vCPU と合計 15 のカスタム割り当てキューという VM の例では、Google Cloud で残りの NIC (nic3nic4nic5)に割り当てる 20-15 = 5 キューが残っています。

  3. 前の手順との整合性を取るため、この差を前の手順で残った NIC の数で割り、余りの ⌊(number of vCPUs - sum of assigned queues)/(number of remaining NICs)⌋ を破棄します。この計算の結果は常に小数ではなく、整数になります。Google Cloud は、計算した数が NIC ごとの最大キュー数を超えない限り、計算した数に一致する数を残りの NIC に割り当てます。NIC の最大キュー数はドライバの種類によって異なります。

    • virtIO またはカスタム ドライバを使用して、残りの NIC ごとに計算されたキューの数が 32 より大きい場合、Google Cloud は残りの NIC のそれぞれに 32 キューを割り当てます。
    • gvNIC を使用して、残りの NIC ごとに計算されたキューの数が 16 より大きい場合、Google Cloud は残りの NIC のそれぞれに 16 キューを割り当てます。

API

instances.insert メソッドを使用して、NIC に特定のキュー数を持つ VM を作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  "name": "VM_NAME",
  "machineType": "machineTypes/MACHINE_TYPE"
  "networkInterfaces": [
      {
        "network": string,
        "subnetwork": string,
        "networkIP": string,
        "name": string,
        "queueCount": "QUEUE_SIZE",
        ....
      ],
      } ],
 }
 

以下を置き換えます。

  • PROJECT_ID: VM を作成するプロジェクトの ID
  • ZONE: VM を作成するゾーン
  • MACHINE_TYPE: 新しい VM のマシンタイプ(事前定義またはカスタム
  • VM_NAME: 新しい VM の名前
  • QUEUE_SIZE: このセクションで説明するルールが適用される NIC のキュー数。

キューの割り当てとマシンタイプの変更

VM インスタンスを停止してマシンタイプを変更し、新しいマシンタイプの vCPU の数が変更前と異なる場合、Google Cloud の NIC ごとのキューの割り当ては変更されません。デフォルトの NIC キューやカスタム NIC キューの割り当ては、VM を作成する場合にのみ設定されます。

次のステップ