Google Virtual NIC の使用


Google Virtual NIC(gVNIC)は、Compute Engine 専用の仮想ネットワーク インターフェースです。gVNIC は、virtIO ベースのイーサネット ドライバに代わるものです。

VirtIO に続く次世代のネットワーク インターフェースとして、gVNIC は、すべての新しいマシンタイプ(第 3 世代以降)の Compute Engine でサポートされている唯一のネットワーク インターフェースとして VirtIO-Net に代わるものです。新しいマシンシリーズとネットワーク機能には、VirtIO ではなく gVNIC が必要です。Compute Engine VM の最新の I/O インターフェースとして gVNIC を使用すると、次のメリットがあります。

  • パフォーマンスが向上します。
  • ノイジー ネイバーの問題が軽減することで整合性が向上します。
  • VirtIO の能力を超える新しいネットワーク機能が導入されます。

gVNIC は、すべてのマシン ファミリー、マシンタイプ、世代でサポートおよび推奨されています。

gVNIC は、次の最大帯域幅を実現するために必要です。

Confidential VM インスタンス、第 3 世代以降のマシンシリーズの VM、Arm CPU プラットフォームで実行される VM のネットワーク インターフェースとして gVNIC を使用する必要があります。

始める前に

  • Windows Server 2022 または Windows 11 VM で gVNIC を使用する場合は、ネットワーキング スループットを向上させるために、gVNIC ドライバを GooGet パッケージ バージョン 1.0.0@45 以降に更新してください。詳細については、既知の問題をご覧ください。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

料金

Tier_1 ネットワーキングの最新料金については、VM インスタンスの料金ページをご覧ください。

料金情報の確認に使用できるその他の方法の一覧については、Compute Engine の料金をご覧ください。

オペレーティング システムのサポート

Compute Engine では、サポートされている公開オペレーティング システム(OS)イメージで gVNIC を使用できます。次の場合、gVNIC ドライバを手動でインストールできます。

  • OS イメージに gVNIC ドライバが含まれていない
  • OS イメージに最新の gVNIC ドライバ バージョンがない

サポートされているオペレーティング システムについては、オペレーティング システムの [インターフェース] タブをご覧ください。ネットワーク機能のサポートについては、[ネットワーキング機能] タブもご確認ください。

サポートされていないオペレーティング システムでの使用

gVNIC をサポートしているが、最新バージョンの gVNIC ドライバが含まれていない OS イメージの場合は、GitHub から最新のドライバ バージョンをダウンロードできます。

Linux または Windows VM で最新バージョンの gVNIC ドライバを手動で構成してインストールできます。

gVNIC を使用するように VM でオペレーティング システムを更新したら、その OS イメージに基づいてカスタム OS イメージを作成します。その後、カスタム OS イメージを使用して、そのオペレーティング システムで gVNIC を使用する追加の VM を作成できます。カスタム OS イメージを使用した VM の作成の詳細については、このページの gVNIC をサポートするカスタム OS イメージを作成するをご覧ください。

最新バージョンの gVNIC ドライバを手動で構成してインストールするには、次の操作を行います。

Windows 用の最新の gVNIC ドライバに更新する

Windows 用の最新バージョンの gVNIC ドライバを使用すると、ネットワーク パフォーマンスが向上します。第 3 世代以降のマシンシリーズ(N4 を除く)を使用するコンピューティング インスタンスにこのドライバをインストールすると、次のメリットがあります。

  • 最大 200 Gbps のネットワーク帯域幅(Tier_1 ネットワーキングと gVNIC を使用するように構成された Windows インスタンスにインストールされる場合)。
  • ジャンボ フレームのサポート。

最新バージョンの gVNIC ドライバを使用する手順は次のとおりです。

  1. まだリクエストしていない場合は、ドライバのプレビュー版へのアクセスをリクエストします
  2. PowerShell を使用して次の操作を行います。

    1. 次のコマンドを実行して、gvnic リポジトリを googet に追加します。

      googet addrepo gvnic-preview https://packages.cloud.google.com/yuck/repos/google-compute-engine-driver-gvnic-preview
      
    2. googet を使用して gVNIC ドライバを更新します。次のコマンドを実行すると、利用可能なすべてのアップデートが一覧表示されます。gVNIC ドライバの入力を求めるメッセージが表示されたら、y と入力します。

      googet update
      
    3. 大規模な送信オフロード(LSO)を有効にします。

      Set-NetAdapterAdvancedProperty -InterfaceDescription 'Google Ethernet   Adapter' -RegistryKeyword '*LSOV2Ipv4' -RegistryValue 1
      
      Set-NetAdapterAdvancedProperty -InterfaceDescription 'Google Ethernet Adapter' -RegistryKeyword '*LSOV2Ipv6' -RegistryValue 1
      
    4. 現在の状態を出力して、LSO が有効になっていることを確認します。

      Get-NetAdapterAdvancedProperty -InterfaceDescription 'Google Ethernet Adapter'
      

最新バージョンの gVNIC ドライバをインストールして、このドライバを使用するように Windows を構成したら、ジャンボ フレームを構成して最適なスループットを実現できます。詳細については、最大伝送単位をご覧ください。

最新の gVNIC ドライバのパフォーマンスをテストする

最新の gVNIC ドライバによって実現するネットワーク帯域幅をテストするには、iPerf2 または Windows NT Test TCP(ntttcp)ユーティリティを使用します。次のオプションのいずれかを選択します。

iPerf2

次のいずれかを行います。

  • Windows Server を実行しているコンピューティング インスタンスで、次のコマンドを実行します。
iperf-2.1.1-Feb_27_2021-win.exe -s -w 131072 -l 128K -t 70
  • Windows クライアントを実行しているコンピューティング インスタンスで、次のコマンドを実行します。
iperf-2.1.1-Feb_27_2021-win.exe -c 192.168.100.2 -P 64 -y C -w 131072 -l 128K -N -t 60

NTTTCP

受信側で次のコマンドを実行します。

ntttcp.exe -m 200,*,192.168.100.2 -r -t 60

送信側で次のコマンドを実行します。

ntttcp.exe -m 200,*,192.168.100.2 -s -l 4M -a 2 -t 60

制限事項

  • 大規模な受信オフロード(LRO)はサポートされていません。gVNIC を使用する VM では、汎用受信オフロード(GRO)がデフォルトで有効になっています。最新の gVNIC ドライバ(プレビュー)を使用する場合は、LRO がサポートされます。
  • 大規模な送信オフロード バージョン 2(LSOV2)は、Windows 11 または Windows Server 2022 VM ではサポートされていません。gVNIC ドライバのバージョン 1.0.0@45 以降では LSOV2 は無効になります。Microsoft Windows で VM の gVNIC ドライバを確認して更新する方法については、既知の問題をご覧ください。

    最新の gVNIC ドライバ(プレビュー)を使用する場合は、LSOV2 がサポートされます。

Compute Engine VM での gVNIC の使用の概要

gVNIC を使用する VM を作成するには、次の操作を行います。

  1. gVNIC をサポートする公開 OS イメージを選択するか、gVNIC を使用するようにタグ付けされたカスタム OS イメージを作成します。
  2. 公開 OS イメージまたはカスタム OS イメージを使用して VM を作成します。VM の作成中に、gVNIC を使用するようにネットワーク インターフェースを構成します。
  3. gVNIC が有効であることを確認します。

問題が発生した場合は、Google Virtual NIC のトラブルシューティングをご覧ください。

gVNIC をサポートするカスタム OS イメージを作成する

Google Cloud CLI または REST を使用して、OS イメージを作成できます。カスタム OS イメージの作成の詳細とベスト プラクティスについては、カスタム OS イメージを作成するをご覧ください。

gcloud

  1. gVNIC をサポートする OS イメージまたはイメージ ファミリーを選択します。詳しくは、オペレーティング システムの詳細をご覧ください。

  2. 前の手順で選択した OS イメージまたはイメージ ファミリーを使用して、カスタム OS イメージを作成し、この OS イメージに GVNIC をタグ付けします。カスタム OS イメージを作成するには、gcloud compute images create コマンドを使用します。たとえば、次のコマンドは、gVNIC をサポートし、特定の OS イメージに基づいたカスタム OS イメージを作成します。

    gcloud compute images create IMAGE_NAME \
        --source-image=SOURCE_IMAGE \
        --source-image-project=SOURCE_IMAGE_PROJECT \
        --guest-os-features=GVNIC
    

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

    • IMAGE_NAME: 作成するイメージの名前
    • SOURCE_IMAGE: gVNIC をサポートする特定の OS イメージ。例: rocky-linux-8-optimized-gcp-v20220719

      イメージ ファミリーの最新の OS イメージを使用する場合は、--source-image フラグを --source-image-family フラグに置き換え、その値を gVNIC をサポートするイメージ ファミリーに設定します。例: --source-image-family=rocky-linux-8-optimized-gcp

    • SOURCE_IMAGE_PROJECT: ソース OS イメージまたはイメージ ファミリーを含むプロジェクトの名前

    Compute Engine rocky-linux-8-optimized-gcp イメージ ファミリーの最新の OS イメージを使用して、Google Cloud OS イメージに最適化された Rocky Linux 8 を作成するには、次のコマンドを実行します。

    gcloud compute images create IMAGE_NAME \
        --source-image-family=rocky-linux-8-optimized-gcp \
        --source-image-project=rocky-linux-cloud \
        --guest-os-features=GVNIC
    

    イメージ ファミリーを使用するタイミングについて詳しくは、イメージ ファミリーのベスト プラクティスをご覧ください。

REST

  1. gVNIC をサポートする OS イメージまたはイメージ ファミリーを選択します。詳細については、オペレーティング システムの詳細をご覧ください。

  2. 前の手順で選択した OS イメージまたはイメージ ファミリーを使用して、OS イメージを作成し、この OS イメージに GVNIC をタグ付けします。OS イメージを作成するには、images.insert メソッドを使用します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images
    {
      "name":"IMAGE_NAME",
      "sourceImage":"SOURCE_IMAGE_URI",
      "guestOsFeatures":[
        {
          "type":"GVNIC"
        }
      ]
    }
    

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

    • PROJECT_ID: 新しいイメージを作成するプロジェクトの ID
    • IMAGE_NAME: カスタム イメージの名前
    • SOURCE_IMAGE_URI: 使用する特定の OS イメージまたはイメージ ファミリーの URI

      次に例を示します。

      • 特定の OS イメージ: "sourceImage": "projects/rocky-linux-cloud/global/images/rocky-linux-8-optimized-gcp-v20220719"
      • イメージ ファミリー: "sourceImage": "projects/rocky-linux-cloud/global/images/family/rocky-linux-8-optimized-gcp"

      イメージ ファミリーを指定すると、Compute Engine はそのファミリー内のサポート対象の最新の OS イメージから VM を作成します。イメージ ファミリーを使用するタイミングについて詳しくは、イメージ ファミリーのベスト プラクティスをご覧ください。

gVNIC をサポートする VM を作成する

VM は、サポートされている公開 OS イメージのいずれかを使用して、または、gVNIC をサポートするカスタム OS イメージを作成するの手順で作成したカスタム OS イメージを使用して作成できます。

必要に応じて、VM で DPDK を有効にして、ネットワーク パケット処理の高速化、低レイテンシ、一貫したパフォーマンスを実現できます。

複数のネットワーク インターフェース(NIC)をサポートする VM の場合、インターフェースのサポートは NIC ごとに構成されるため、異なるタイプの NIC を VM にアタッチできます。この設定はサポートされていますが、おすすめしません。複数の NIC をサポートする VM の場合、VM の作成時にネットワーク インターフェースごとに nic-type=GVNIC を指定してください。

公開 OS イメージを使用して VM を作成する

gVNIC をサポートする公開 OS イメージを使用して VM を作成するには、高帯域幅構成で VM とコンテナを作成するの手順に沿って操作します。

カスタム OS イメージを使用して VM を作成する

gVNIC をサポートする公開 OS イメージを使用していない場合は、まず gVNIC をサポートするカスタム OS イメージを作成する必要があります。次に、そのカスタム OS イメージを使用して、Google Cloud コンソールGoogle Cloud CLI、または REST を使用して VM を作成します。

コンソール

  1. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

  2. VM インスタンスの [名前] を入力します。

  3. VM を作成する [ゾーン] を選択します。

  4. [ブートディスク] セクションで、[変更] をクリックします。

  5. [ブートディスク] パネルの [カスタム イメージ] タブで、次の操作を行います。

    1. 以前に作成した OS イメージを含む [ソース プロジェクト] を選択します。
    2. [イメージ] プルダウンからイメージを選択します。
    3. [選択] をクリックします。
  6. gVNIC をネットワーク インターフェースとして設定するには、[詳細オプション] セクションを開いて次の操作を行います。

    1. [ネットワーキング] セクションを開きます。
    2. [ネットワーク インターフェース カード] で gVNIC を選択します。
  7. 必要に応じて、VM をさらにカスタマイズします。

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

gcloud

  1. gcloud compute instances create コマンドを使用して VM を作成します。ブートディスクには、先ほど作成したカスタム OS イメージを指定します。ネットワーク インターフェースについては、nic-type フラグの値を GVNIC に設定します。

    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --machine-type=MACHINE_TYPE \
        --image=IMAGE_NAME \
        --image-project=YOUR_IMAGE_PROJECT \
        --network-interface=nic-type=GVNIC
    

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

    • VM_NAME: 新しい VM の名前。
    • ZONE: VM を作成するゾーン。
    • MACHINE_TYPE: VM インスタンスを作成するときに使用するマシンタイプ。マシンタイプを指定しない場合、デフォルトは n1-standard-1 です。
    • IMAGE_NAME: 前の手順で作成した OS イメージ。
    • YOUR_IMAGE_PROJECT: OS イメージを含むプロジェクトの名前。
  2. 省略可: Compute Engine によって VM が作成され、nicTypeGVNIC に設定されていることを確認します。

    gcloud compute instances describe VM_NAME \
       --zone=ZONE
    

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

    • VM_NAME: VM の名前。
    • ZONE: VM を作成したゾーン。

    プロジェクト my-project-12345 にある my-gvnic-rocky8 という名前の OS イメージを使用して、ゾーン us-west1-bn1-standard-1 マシンタイプの Rocky Linux 8 VM を作成するには、次のコマンドを実行します。

    gcloud compute instances create my-rocky-linux-vm \
        --zone=us-west1-b \
        --image=my-gvnic-rocky8 \
        --image-project=my-project-12345 \
        --network-interface=nic-type=GVNIC
    

    注意点

    --network-interface フラグには、次のようなサブレベルのフラグがあります。

    • --address: VM に IP アドレスを割り当てます。
    • --network: インターフェースが属するネットワーク
    • --network-tier: インターフェースのネットワーク ティア
    • --subnet: インターフェースが属するサブネット。--network も指定する場合、サブネットは指定したネットワークの一部であることが必要です。
    • --private-network-ip: VM に割り当てる RFC 1918 IP を指定します。

    完全な一覧については、--network-interface のフラグをご覧ください。

REST

instances.insert メソッドを使用して VM を作成します。

  • ブートディスクには、先ほど作成したカスタム OS イメージを指定します。
  • ネットワーク インターフェースについては、nicType フィールドの値を GVNIC に設定します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  "name":"VM_NAME",
  "networkInterfaces":[
    {
      "network":"NETWORK",
      "nicType":"GVNIC",
      "subnet":"SUBNET_NAME"
    }
  ],
  "disks":[
    {
      "initializeParams":{
        "sourceImage":"projects/YOUR_IMAGE_PROJECT/global/images/IMAGE_NAME"
      },
      "boot":true
    }
  ]
}

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

  • PROJECT_ID: VM を作成するプロジェクトの ID。
  • ZONE: VM を作成するゾーン。
  • VM_NAME: 新しい VM の名前。
  • NETWORK: この VM のネットワーク リソースの URL。ネットワークもサブネットワークも指定しない場合、デフォルトのネットワーク global/networks/default が使用されます。
  • SUBNET_NAME: サブネットの名前。ネットワークは指定したサブネットから推測されます。このフィールドは省略できます。
  • YOUR_IMAGE_PROJECT: OS イメージを含むプロジェクトの名前。
  • IMAGE_NAME: 前の手順で作成した OS イメージ。

gVNIC が有効であることを確認する

Linux

lshw ツールを使用すると、仮想マシンのハードウェア構成に関する詳細情報を抽出できます。

Linux VM インスタンスに lshw ツールをインストールするには、VM に SSH 経由で接続し、次のコマンドを実行します。

sudo apt-get install lshw -y

VM が gVNIC ネットワーク インターフェースを使用しているかどうかを確認するには、次のコマンドを実行します。

sudo lshw -class network

出力は次のようになります。

*-network
   description: Ethernet interface
   product: Compute Engine Virtual Ethernet [gVNIC]
   vendor: Google, Inc.
   physical id: 3
   bus info: pci@0000:00:03.0
   logical name: ens3
   version: 00
   serial: 42:01:0a:80:00:6f
   width: 32 bits
   clock: 33MHz
   capabilities: msix bus_master cap_list ethernet physical
   configuration: autonegotiation=off broadcast=yes driver=gve driverversion=1.0.0
    duplex=full ip=10.128.0.111 latency=0 link=yes multicast=yes port=twisted pair
   resources: irq:11 memory:c0203000-c0203fff memory:c0200000-c02000ff memory:c0100000-c01fffff

Windows

  1. Windows VM インスタンスで、デバイス マネージャーを開きます。
  2. [ネットワーク アダプター] に、"Google Ethernet Adapter" と表示されます。

トラブルシューティング

gVNIC のトラブルシューティングについては、Google Virtual NIC のトラブルシューティングをご覧ください。

次のステップ