ULL Compute Engine インスタンスを作成する

このページでは、U4 マシン ファミリーの U4P または U4C マシンタイプを使用して、Ultra Low Latency(ULL)Compute Engine インスタンスを作成する方法について説明します。

ULL インフラストラクチャの構成プロセスの概要については、 ULL ソリューションの構成の概要をご覧ください。

始める前に

ULL コンピューティング インスタンスを作成する前に、次のセクションをご覧ください。

VPC ネットワークを作成する

まだ作成していない場合は、ULL Solution の構成の概要の説明に従って、インスタンスのネットワーク インターフェースごとに VPC ネットワークを作成します。

プレースメント ポリシーの作成

必要に応じて、スプレッド プレースメント ポリシー を ULL インスタンスに適用して、復元性を高めることができます。詳細については、Compute Engine ドキュメントの スプレッド プレースメント ポリシーを作成して適用する をご覧ください。

プロジェクトを設定する

プロジェクトを使用するように gcloud CLI を設定します。次の手順で各コマンドに --project=PROJECT_ID フラグを含めることもできます。

gcloud config set project PROJECT_ID

PROJECT_ID は、実際のプロジェクトの ID に置き換えます。

必要なロール

Compute Engine インスタンスを作成するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。

  • コンピューティング インスタンスを作成して管理する: プロジェクトに対する Compute インスタンス管理者(compute.instanceAdmin

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタム ロールや他の事前定義 ロールから取得することもできます。

ULL インスタンス構成の概要

ULL コンピューティング インスタンスを作成し、ULL ユニキャスト トラフィックとマルチキャスト トラフィックを送受信するようにインスタンスを構成するには、次の操作を行います。

ステップ 説明
ULL インスタンスを作成する U4P または U4C マシンタイプを使用してインスタンスを作成し、そのネットワーク インターフェースを汎用 VPC ネットワークと ULL VPC ネットワークに接続します。インスタンスをマルチキャスト コンシューマーとして使用する場合は、igmp-query フラグを IGMP_QUERY_V2 に設定します。
ULL ユニキャスト トラフィックの nic0 以外のインターフェースのルーティングを構成する 下り(外向き)パケットが正しいインターフェースを経由し、非対称ルーティングを防ぐように、ゲスト OS でソースベースのポリシー ルーティングを構成します。
ULL マルチキャスト コンシューマーになるようにインスタンスを構成する ULL ネットワーク インターフェースでマルチキャスト トラフィックを受信するには、次の操作を行います。
パフォーマンスをさらに最適化するには、 ビジーポーリングを有効にすることをおすすめします。 Onload を使用するで説明されています。

また、このページのコマンド例を使用して、マルチキャスト接続をテストすることもできます。

ULL インスタンスを作成する

このセクションでは、ULL ユニキャストとマルチキャストに使用する新しいインスタンスを作成する方法について説明します。

追加の 構成オプションなど、コンピューティング インスタンスの作成に関する一般的な情報については、Compute Engine インスタンスを作成して起動するをご覧ください。

gcloud

ULL インスタンスを作成するには、 compute instances create コマンドを使用します。

ULL VPC ネットワークに接続するネットワーク インターフェースには、no-address を指定する必要があります。

また、次のコマンドには、インスタンスをマルチキャスト コンシューマーとして有効にする igmp-query フラグが含まれています。インスタンスがマルチキャスト プロデューサーのみの場合、またはインスタンスがユニキャストのみを送受信する場合は、このフラグは必要ありません。

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image=IMAGE_NAME \
    --maintenance-policy=TERMINATE \
    --network-interface=nic-type=NIC_TYPE,queue-count=QUEUES,network=GENERAL_PURPOSE_VPC_NETWORK,subnet=GENERAL_PURPOSE_SUBNET \
    --network-interface=nic-type=NIC_TYPE,queue-count=QUEUES,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_1,no-address,igmp-query=IGMP_QUERY_V2 \
    --network-interface=nic-type=NIC_TYPE,queue-count=QUEUES,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_2,no-address,igmp-query=IGMP_QUERY_V2

次の値を置き換えます。

  • ZONE: インスタンスを作成するゾーン
  • INSTANCE_NAME: インスタンスの名前
  • MACHINE_TYPE: インスタンスの U4P または U4C マシンタイプ
  • IMAGE_PROJECT: イメージ プロジェクト。 プレビュー期間中のテストでは、Google が提供するイメージ プロジェクトを使用します。 U4 マシンタイプのオペレーティング システムのサポートをご覧ください
  • IMAGE_NAME: イメージ名。プレビュー期間中のテストでは、 Google が提供するイメージを使用します。U4 マシンタイプのオペレーティング システムのサポートをご覧ください

  • NIC_TYPE: 使用するネットワーク インターフェース タイプ。 インスタンスを作成する特定のゾーンでサポートされているネットワーク インターフェース タイプを使用します:

    • us-south1-d の場合は、IDPF を指定します。
    • us-south1-e の場合は、GVNIC を指定します。
  • QUEUES: ネットワークからパケットを処理するための 受信キューと送信キュー の数。

    • GVNIC の場合は、queue-count フィールドを含め、XDP サポートに 32 の値を指定する必要があります。
    • IDPF の場合は、コマンドから queue-count=QUEUES を省略します。
  • GENERAL_PURPOSE_VPC_NETWORKGENERAL_PURPOSE_SUBNET: インスタンスの nic0 インターフェースを接続する VPC ネットワークとサブネット

  • ULL_VPC_NETWORK: nic0 以外のインターフェースを接続する ULL VPC ネットワーク

    • ULL_SUBNET_1: nic1 インターフェースを接続する ULL VPC ネットワーク内のサブネット

    • ULL_SUBNET_2: nic2 インターフェースを接続する ULL VPC ネットワーク内のサブネット

ULL ユニキャスト トラフィックの nic0 以外のインターフェースのルーティングを構成する

デフォルトでは、インスタンスは nic0 インターフェースに関連付けられたデフォルト ルートを使用して、直接接続されたサブネット以外の宛先にトラフィックを送信します。詳細については、複数のネットワーク インターフェースの概要をご覧ください。

インスタンスの nic1 インターフェースと nic2 インターフェースが ULL ユニキャスト トラフィックを正常に送受信するには、ゲスト OS でソースベースのポリシー ルーティングを構成する必要があります。この構成により、下り(外向き)パケットが正しいインターフェースを経由し、トラフィックが 1 つのインターフェースに入り、nic0 から出ようとする非対称ルーティングを防ぐことができます。

ポリシー ルーティングを構成する方法の例については、 ポリシー ルーティングを構成する チュートリアルの追加のネットワーク インターフェースのルーティングを構成するをご覧ください。

ULL マルチキャスト コンシューマーになるようにインスタンスを構成する

このセクションでは、既存の ULL インスタンスをマルチキャスト コンシューマーとして構成する方法について説明します。

既存の ULL インスタンスで IGMP クエリを有効にする

インスタンスの作成時に IGMP を有効にしなかった場合は、このセクションの説明に従って、既存のインスタンスで有効にできます。

gcloud

既存の ULL インスタンスで IGMP クエリを有効にするには、 compute instances network-interfaces update コマンドを使用します。

マルチキャスト トラフィックを受信するネットワーク インターフェースごとに、次のコマンドを繰り返します。

gcloud compute instances network-interfaces update INSTANCE_NAME \
    --zone=ZONE \
    --network-interface=NETWORK_INTERFACE_NAME \
    --igmp-query=IGMP_QUERY_V2

次の値を置き換えます。

  • INSTANCE_NAME: インスタンスの名前
  • ZONE: インスタンスのゾーン
  • NETWORK_INTERFACE_NAME: IGMP クエリを有効にするネットワーク インターフェースの名前。では Google Cloud、形式はnicNUMBERnic0nic1nic2など)です。

ゲスト OS で IGMPv2 を設定する

インスタンスのゲスト OS で IGMPv2 を設定するには、次の操作を行います。

  1. インスタンスに接続します SSH を使用して。

  2. 次のコマンドを実行して、マルチキャスト トラフィックを受信するネットワーク インターフェースのデバイス名を確認します。

    sudo ifconfig
    
  3. 該当するネットワーク インターフェースごとに、次のコマンドを実行して IGMPv2 を強制的に適用します。

    sudo -i
    echo "2" > /proc/sys/net/ipv4/conf/NETWORK_INTERFACE_DEVICE_NAME/force_igmp_version
    

    NETWORK_INTERFACE_DEVICE_NAME は、ネットワーク インターフェースのデバイス名(eth0eth1eth2 など)に置き換えます。

リバースパス フィルタリング(rp_filter)を構成する

マルチ NIC インスタンスなど、リバースパス フィルタリング(rp-filter)による厳格なソース検証により、正当なマルチキャスト パケットが破棄されることがあります。これを防ぐには、リバースパス フィルタリングを構成して、マルチキャスト トラフィックを受信する nic0 以外のネットワーク インターフェースでソース検証を緩めるか無効にします。 たとえば、次のコマンドは、rp_filter0 に設定して、eth1eth2 のソース検証を無効にするようにリバースパス フィルタリングを構成します。

sudo sysctl -w net.ipv4.conf.all.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth1.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth2.rp_filter=0

rp_filter の詳細については、Linux カーネル ドキュメントの IP Sysctl をご覧ください。

ネットワーク ドライバのリング バッファサイズを増やす

このセクションでは、インスタンスのネットワーク ドライバのリング バッファサイズを増やす方法について説明します。

大量のトラフィックを受信するマルチキャスト コンシューマーの場合は、パケットロスを防ぐため、ネットワーク ドライバのリング バッファサイズを 2048 に増やします。マルチキャスト トラフィックを受信するネットワーク インターフェースごとにこれを行います。

次のコマンド例では、nic1nic2 を構成しています。

sudo ethtool -G eth1 rx 2048 tx 2048
sudo ethtool -G eth2 rx 2048 tx 2048

ULL マルチキャスト接続をテストするコマンドの例

このセクションでは、 アプリケーション ワークロードを開始せずにマルチキャスト トラフィックをテストするコマンドの例を、 iperf ツールを使用して示します。このセクションの手順 では、ULL ソリューションの構成の概要で説明されているマルチキャスト構成が 完了している必要があります。

マルチキャスト プロデューサーから ULL マルチキャスト トラフィックを送信する

  1. インスタンスに接続します SSH を使用して。

  2. まだインストールしていない場合は、iperf をインストールします。iperf3 はマルチキャストをサポートしていません。 次のコマンドでは、iperf を使用して iperf2 をインストールします。

    sudo yum install iperf
    
  3. マルチキャスト トラフィックをマルチキャスト グループの IP アドレスに送信するには、次のコマンドを実行します。

    iperf -c MULTICAST_GROUP_ADDRESS%NIC -p 1234 -l 512 -i 1 -u -b 1000pps -t 999999 -B NIC_IP_ADDRESS
    

    次の値を置き換えます。

    • MULTICAST_GROUP_ADDRESS: マルチキャスト グループの IP アドレス
    • NIC ネットワーク インターフェースのデバイス名(eth1eth2 など)
    • NIC_IP_ADDRESS 指定した NIC に割り当てられた IP アドレス

グループに参加して、マルチキャスト コンシューマーから ULL マルチキャスト トラフィックを受信する

  1. インスタンスに接続します SSH を使用して。

  2. まだインストールしていない場合は、iperf をインストールします。

    sudo yum install iperf
    
  3. マルチキャスト グループに参加して、受信したトラフィックをログに記録するには、次のコマンドを実行します。

    iperf -s -p 1234 -B MULTICAST_GROUP_ADDRESS%NIC -l 512 -u -i 1
    

    次の値を置き換えます。

    • MULTICAST_GROUP_ADDRESS マルチキャスト グループの IP アドレス
    • NIC ネットワーク インターフェースのデバイス名(eth1eth2 など)

    たとえば、次のコマンドは、IP アドレス 224.1.0.176 のグループに参加して、最大 512 バイトのパケットを受信し、受信したトラフィックをログに記録します。

    iperf -s -p 1234 -B 224.1.0.176%eth1 -l 512 -u -i 1
    

次のステップ

  • ビジーポーリングを有効にして、ULL コンピューティング インスタンスの Onload 機能をテストするには、 Onload を使用するをご覧ください。
  • インスタンスのシステム クロックをホストサーバーの物理 NIC クロックと同期するには、正確な時刻を構成するをご覧ください。