このドキュメントでは、仮想マシン(VM)インスタンスでデータプレーン開発キット(DPDK)を有効にして、ネットワーク パケット処理を高速化する方法について説明します。
DPDK は、高速パケット処理、低レイテンシ、一貫性のあるパフォーマンスを必要とするパフォーマンス重視のアプリケーションに対応したフレームワークです。DPDK は、カーネル ネットワークをバイパスし、ユーザー空間で直接実行するデータプレーン ライブラリとネットワーク インターフェース コントローラ(NIC)のセットを提供します。たとえば、VM で DPDK を有効にすると、次のものを実行する際に便利です。
ネットワーク機能の仮想化(NFV)のデプロイ
ソフトウェア定義ネットワーキング(SDN)アプリケーション
動画ストリーミングや Voice over IP アプリケーション
VM では、次のいずれかの仮想 NIC(vNIC)タイプを使用して DPDK を実行できます。
推奨: gVNIC
virtIO の後継となる次世代の vNIC として、Compute Engine に特化して設計された、高パフォーマンス、安全、スケーラブルな仮想ネットワーク インターフェース。
-
ブロック ストレージやネットワーク アダプタなどの物理ハードウェアに VM が効率的にアクセスできるようにするオープンソースのイーサネット ドライバ。
DPDK を物理ハードウェアではなく仮想環境で実行する場合の問題のひとつとして、仮想環境では高パフォーマンスのアプリケーションに対して SR-IOV と I/O メモリ管理ユニット(IOMMU)がサポートされていないことが挙げられます。この制限を回避するには、次のいずれかのドライバを使用して、ホスト仮想アドレスではなくゲスト物理アドレスで DPDK を実行する必要があります。
IOMMU-less 仮想関数 I/O(VFIO)
準備
-
まだ設定していない場合は、認証を設定します。認証とは、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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
アプリケーションの実行時にネットワーク接続が失われる状況を回避するには、次の 2 つの Virtual Private Cloud ネットワークを使用します。
コントロール プレーン用の VPC ネットワーク
データプレーン用の VPC ネットワーク
2 つの VPC ネットワークの両方で、次の項目を指定する必要があります。
一意の IP アドレス範囲を持つサブネット
サブネットと同じリージョン
同じタイプの VNIC(gVNIC または VirtIO-Net)
VM の作成時は、次の点に留意します。
2 つの VPC ネットワークのサブネットと同じリージョンを指定する必要があります。
DPDK で使用する vNIC タイプを指定する必要があります。
gVNIC または VirtIO-Net に対してサポートされているマシンシリーズを指定する必要があります。
VM で使用されている 2 つの VPC ネットワークに対しては、シングル スタック サブネットのみを使用できます。
2 つの VPC ネットワークの vNIC タイプとして gVNIC を使用する場合は、次の点を確認してください。
DPDK バージョン 22.11 以降を使用する必要があります。
サポートされているディスク イメージのみを使用できます。
ネットワーク パフォーマンスを高めるために、VM の作成時に VM ごとの Tier_1 ネットワーキング パフォーマンスを有効にするには、次の項目を指定する必要があります。
vNIC タイプとしての gVNIC
30 以上の vCPU を備えたサポートされているマシンタイプ
データプレーン用の VPC ネットワークを作成します。
Google Cloud コンソールで、[VPC ネットワーク] に移動します。
[VPC ネットワーク] ページが開きます。
[
VPC ネットワークを作成] をクリックします。[VPC ネットワークの作成] ページが開きます。
[名前] フィールドに、ネットワークの名前を入力します。
[新しいサブネット] セクションで、次の操作を行います。
[名前] フィールドに、サブネットの名前を入力します。
[リージョン] メニューで、サブネットのリージョンを選択します。
[IPv4(シングルスタック)](デフォルト)を選択します。
[IPv4 範囲] に、CIDR 表記の有効な IPv4 範囲のアドレスを入力します。
[完了] をクリックします。
[作成] をクリックします。
[VPC ネットワーク] ページが開きます。VPC ネットワークの作成が完了するまでに 1 分ほどかかることがあります。
VM への SSH 接続を許可するファイアウォール ルールを設定して、コントロール プレーン用の VPC ネットワークを作成します。
もう一度 [
VPC ネットワークを作成] をクリックします。[VPC ネットワークの作成] ページが開きます。
[名前] フィールドに、ネットワークの名前を入力します。
[新しいサブネット] セクションで、次の操作を行います。
[名前] フィールドに、サブネットの名前を入力します。
[リージョン] メニューで、データプレーン ネットワークのサブネットに指定したものと同じリージョンを選択します。
[IPv4(シングルスタック)](デフォルト)を選択します。
[IPv4 範囲] に、CIDR 表記の有効な IPv4 範囲のアドレスを入力します。
[完了] をクリックします。
[IPv4 ファイアウォール ルール] タブで、[NETWORK_NAME-allow-ssh] チェックボックスをオンにします。
NETWORK_NAME は、前の手順で指定したネットワーク名です。
[作成] をクリックします。
[VPC ネットワーク] ページが開きます。VPC ネットワークの作成が完了するまでに 1 分ほどかかることがあります。
データプレーン用の VPC ネットワークを作成する手順は次のとおりです。
--subnet-mode
フラグをcustom
に設定してgcloud compute networks create
コマンドを使用し、手動で作成したサブネットで VPC ネットワークを作成します。gcloud compute networks create DATA_PLANE_NETWORK_NAME \ --bgp-routing-mode=regional \ --mtu=MTU \ --subnet-mode=custom
次のように置き換えます。
DATA_PLANE_NETWORK_NAME
: データプレーンの VPC ネットワークの名前。MTU
: ネットワークの最大パケットサイズである最大伝送単位(MTU)。値は1300
~8896
の範囲で指定する必要があります。デフォルト値は1460
です。MTU を1460
より大きい値に設定する前に、最大伝送単位を確認してください。
gcloud compute networks subnets create
コマンドを使用して、作成した VPC データプレーン ネットワークのサブネットを作成します。gcloud compute networks subnets create DATA_PLANE_SUBNET_NAME \ --network=DATA_PLANE_NETWORK_NAME \ --range=DATA_PRIMARY_RANGE \ --region=REGION
次のように置き換えます。
DATA_PLANE_SUBNET_NAME
: データプレーン ネットワークのサブネットの名前。DATA_PLANE_NETWORK_NAME
: 前の手順で指定したデータプレーン ネットワークの名前。DATA_PRIMARY_RANGE
: CIDR 表記のサブネットの有効な IPv4 範囲。REGION
: サブネットを作成するリージョン。
VM への SSH 接続を許可するファイアウォール ルールを持つコントロール プレーン用の VPC ネットワークを作成するには、次の操作を行います。
--subnet-mode
フラグをcustom
に設定してgcloud compute networks create
コマンドを使用し、手動で作成したサブネットで VPC ネットワークを作成します。gcloud compute networks create CONTROL_PLANE_NETWORK_NAME \ --bgp-routing-mode=regional \ --mtu=MTU \ --subnet-mode=custom
次のように置き換えます。
CONTROL_PLANE_NETWORK_NAME
: コントロール プレーンの VPC ネットワークの名前。MTU
: ネットワークの最大パケットサイズである MTU。値は1300
~8896
の範囲で指定する必要があります。デフォルト値は1460
です。MTU を1460
より大きい値に設定する前に、最大伝送単位を確認してください。
gcloud compute networks subnets create
コマンドを使用して、作成した VPC コントロール プレーン ネットワークのサブネットを作成します。gcloud compute networks subnets create CONTROL_PLANE_SUBNET_NAME \ --network=CONTROL_PLANE_NETWORK_NAME \ --range=CONTROL_PRIMARY_RANGE \ --region=REGION
次のように置き換えます。
CONTROL_PLANE_SUBNET_NAME
: コントロール プレーン ネットワークのサブネットの名前。CONTROL_PLANE_NETWORK_NAME
: 前の手順で指定したコントロール プレーン ネットワークの名前。CONTROL_PRIMARY_RANGE
: CIDR 表記のサブネットの有効な IPv4 範囲。REGION
: サブネットを作成するリージョン。データプレーン ネットワークのサブネットで指定したリージョンと一致している必要があります。
--allow
フラグをtcp:22
に設定してgcloud compute firewall-rules create
コマンドを使用し、コントロール プレーン ネットワークへの SSH 接続を許可する VPC ファイアウォール ルールを作成します。gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --action=allow \ --network=CONTROL_PLANE_NETWORK_NAME \ --rules=tcp:22
次のように置き換えます。
FIREWALL_RULE_NAME
: ファイアウォール ルールの名前。CONTROL_PLANE_NETWORK_NAME
: 前の手順で作成したコントロール プレーン ネットワークの名前。
データプレーン用の VPC ネットワークを作成する手順は次のとおりです。
autoCreateSubnetworks
フィールドをfalse
に設定してnetworks.insert
メソッドに対しPOST
リクエストを発行し、手動で作成したサブネットを持つ VPC ネットワークを作成します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "DATA_PLANE_NETWORK_NAME", "mtu": MTU }
次のように置き換えます。
PROJECT_ID
: 現在のプロジェクトのプロジェクト ID。DATA_PLANE_NETWORK_NAME
: データプレーンのネットワークの名前。MTU
: ネットワークの最大パケットサイズである最大伝送単位(MTU)。値は1300
~8896
の範囲で指定する必要があります。デフォルト値は1460
です。MTU を1460
より大きい値に設定する前に、最大伝送単位を確認してください。
subnetworks.insert
メソッドに対してPOST
リクエストを発行し、VPC データプレーン ネットワークのサブネットを作成します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "DATA_PRIMARY_RANGE", "name": "DATA_PLANE_SUBNET_NAME", "network": "projects/PROJECT_ID/global/networks/DATA_PLANE_NETWORK_NAME" }
次のように置き換えます。
PROJECT_ID
: データプレーン ネットワークが配置されているプロジェクトのプロジェクト ID。REGION
: サブネットを作成するリージョン。DATA_PRIMARY_RANGE
: 新しいサブネットのプライマリ IPv4 範囲(CIDR 表記)。DATA_PLANE_SUBNET_NAME
: 前の手順で作成したデータプレーン ネットワークのサブネットの名前。DATA_PLANE_NETWORK_NAME
: 前の手順で作成したデータプレーン ネットワークの名前。
VM への SSH 接続を許可するファイアウォール ルールを持つコントロール プレーン用の VPC ネットワークを作成するには、次の操作を行います。
autoCreateSubnetworks
フィールドをfalse
に設定してnetworks.insert
メソッドに対しPOST
リクエストを発行し、手動で作成したサブネットを持つ VPC ネットワークを作成します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "CONTROL_PLANE_NETWORK_NAME", "mtu": MTU }
次のように置き換えます。
PROJECT_ID
: 現在のプロジェクトのプロジェクト ID。CONTROL_PLANE_NETWORK_NAME
: コントロール プレーンのネットワークの名前。MTU
: ネットワークの最大パケットサイズである MTU。値は1300
~8896
の範囲で指定する必要があります。デフォルト値は1460
です。MTU を1460
より大きい値に設定する前に、最大伝送単位を確認してください。
subnetworks.insert
メソッドに対してPOST
リクエストを発行し、VPC データ管理ネットワークのサブネットを作成します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "CONTROL_PRIMARY_RANGE", "name": "CONTROL_PLANE_SUBNET_NAME", "network": "projects/PROJECT_ID/global/networks/CONTROL_PLANE_NETWORK_NAME" }
次のように置き換えます。
PROJECT_ID
: コントロール プレーン ネットワークが配置されているプロジェクトのプロジェクト ID。REGION
: サブネットを作成するリージョン。CONTROL_PRIMARY_RANGE
: 新しいサブネットのプライマリ IPv4 範囲(CIDR 表記)。CONTROL_PLANE_SUBNET_NAME
: 前の手順で作成したコントロール プレーン ネットワークのサブネットの名前。CONTROL_PLANE_NETWORK_NAME
: 前の手順で作成したコントロール プレーン ネットワークの名前。
firewalls.insert
メソッドに対してPOST
リクエストを発行し、コントロール プレーン ネットワークへの SSH 接続を許可する VPC ファイアウォール ルールを作成します。リクエストでは、IPProtocol
フィールドをtcp
に設定し、ports
フィールドを22
に設定します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "network": "projects/PROJECT_ID/global/networks/CONTROL_PLANE_NETWORK_NAME" }
次のように置き換えます。
PROJECT_ID
: コントロール プレーン ネットワークが配置されているプロジェクトのプロジェクト ID。CONTROL_PLANE_NETWORK_NAME
: 前の手順で作成したコントロール プレーン ネットワークの名前。
Google Cloud コンソールで、[VM インスタンス] に移動します。
[VM インスタンス] ページが開きます。
[
インスタンスを作成] をクリックします。[インスタンスの作成] ページが開きます。
[名前] フィールドに、VM の名前を入力します。
[リージョン] メニューで、前の手順でネットワークを作成したリージョンと同じリージョンを選択します。
[ゾーン] メニューで、VM のゾーンを選択します。
[マシンの構成] セクションで、次の操作を行います。
次のオプションのいずれかを選択します。
一般的なワークロードの場合は、[汎用] タブを選択します(デフォルト)。
高いパフォーマンスが要求されるワークロードの場合は、[コンピューティング最適化] タブを選択します。
メモリ対 vCPU 比が高いワークロードの場合は、[メモリ最適化] タブを選択します。
画像処理装置(GPU)を使用するワークロードの場合は、[GPU] タブを選択します。
(省略可)前の手順で GPU を指定し、VM にアタッチする GPU を変更する場合は、次のいずれかまたは両方を行います。
[GPU のタイプ] メニューで、GPU のタイプを選択します。
[GPU の数] メニューで、GPU の数を選択します。
[シリーズ] メニューで、マシンシリーズを選択します。
[マシンタイプ] メニューでマシンタイプを選択します。
省略可: [高度な構成] を開き、画面の指示に沿って、この VM のマシンをさらにカスタマイズします。
省略可: [ブートディスク] セクションで [変更] をクリックし、画面の指示に沿ってディスク イメージを変更します。
[詳細オプション] セクションを開きます。
[ネットワーキング] セクションを開きます。
[ネットワーク パフォーマンスの構成] セクションで、次の操作を行います。
[ネットワーク インターフェース カード] メニューで、次のいずれかを選択します。
gVNIC を使用するには、[gVNIC] を選択します。
VirtIO-Net を使用するには、[VirtIO] を選択します。
省略可: ネットワーク パフォーマンスを向上させ、レイテンシを短縮するには、[VM ごとの Tier_1 ネットワーキング パフォーマンスを有効にする] チェックボックスをオンにします。
[ネットワーク インターフェース] セクションで、次の操作を行います。
default 行で、[
「default」を削除します] をクリックします。[ネットワーク インターフェースを追加] をクリックします。
[新しいネットワーク インターフェース] セクションが表示されます。
[ネットワーク] メニューで、前の手順で作成したコントロール プレーン ネットワークを選択します。
[完了] をクリックします。
もう一度 [ネットワーク インターフェースを追加] をクリックします。
[新しいネットワーク インターフェース] セクションが表示されます。
[ネットワーク] メニューで、前の手順で作成したデータプレーン ネットワークを選択します。
[完了] をクリックします。
[作成] をクリックします。
[VM インスタンス] ページが開きます。VM の作成が完了するまでに 1 分ほどかかることがあります。
VM_NAME
: VM の名前。IMAGE_FAMILY
: ブートディスクの初期化に使用されるオペレーティング システムのイメージ ファミリー。また、--image=IMAGE
フラグを指定することもできます(IMAGE
の部分を特定のバージョンのイメージに置き換えます)。Compute Engine イメージ プロジェクトで使用可能なイメージのリストを表示する方法をご覧ください。IMAGE_PROJECT
: ディスク イメージを含むイメージ プロジェクトの名前。VNIC_TYPE
: コントロール プレーンとデータプレーン ネットワークに使用する vNIC タイプ。値は次のいずれかにする必要があります。gVNIC を使用するには、
GVNIC
を指定します。VirtIO-Net を使用するには、
VIRTIO_NET
を指定します。
CONTROL_PLANE_NETWORK_NAME
: 前の手順で作成したコントロール プレーン ネットワークの名前。CONTROL_PLANE_SUBNET_NAME
: 前の手順で作成したコントロール プレーン ネットワークのサブネットの名前。DATA_PLANE_NETWORK_NAME
: 前の手順で作成したデータプレーン ネットワークの名前。DATA_PLANE_SUBNET_NAME
: 前の手順で自動的に作成したコントロール プレーン ネットワークのサブネットの名前。ZONE
: VM を作成するゾーン。前の手順で作成したサブネットと同じリージョン内のゾーンを指定します。PROJECT_ID
: コントロール プレーン VPC ネットワークとデータプレーン VPC ネットワークが配置されているプロジェクトのプロジェクト ID。ZONE
: VM を作成するゾーン。VM_NAME
: VM の名前。IMAGE_PROJECT
: ディスク イメージを含むイメージ プロジェクトの名前。IMAGE_FAMILY
: ブートディスクの初期化に使用されるオペレーティング システムのイメージ ファミリー。また、特定のバージョンのイメージを指定することもできます。Compute Engine イメージ プロジェクトのイメージのリストを表示する方法をご覧ください。CONTROL_PLANE_NETWORK_NAME
: 前の手順で作成したコントロール プレーン ネットワークの名前。REGION
: コントロール プレーンとデータプレーンのネットワークのサブネットが存在するリージョン。CONTROL_PLANE_SUBNET_NAME
: 前の手順で作成したコントロール プレーン ネットワークのサブネットの名前。VNIC_TYPE
: コントロール プレーンとデータプレーン ネットワークに使用する vNIC タイプ。値は次のいずれかにする必要があります。gVNIC を使用するには、
GVNIC
を指定します。VirtIO-Net を使用するには、
VIRTIO_NET
を指定します。
DATA_PLANE_NETWORK_NAME
: 前の手順で作成したデータプレーン ネットワークの名前。DATA_PLANE_SUBNET_NAME
: 前の手順で作成したコントロール プレーン ネットワークのサブネットの名前。SSH を使用して、前のセクションで作成した VM に接続します。
DPDK インストールの依存関係を構成します。
sudo apt-get update && sudo apt-get upgrade -yq sudo apt-get install -yq build-essential ninja-build python3-pip \ linux-headers-$(uname -r) pkg-config libnuma-dev sudo pip install pyelftools meson
DPDK をインストールします。
wget https://fast.dpdk.org/rel/dpdk-23.07.tar.xz tar xvf dpdk-23.07.tar.xz cd dpdk-23.07
サンプルを使用して DPDK をビルドするには:
meson setup -Dexamples=all build sudo ninja -C build install; sudo ldconfig
VFIO が有効になっているかどうかを確認します。
cat /boot/config-$(uname -r) | grep NOIOMMU
VFIO が有効になっていない場合は、UIO をインストールするの手順を実施します。
VFIO で No-IOMMU モードを有効にします。
sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
VM 内のディスクに
igb_uio
Git リポジトリのクローンを作成します。git clone https://dpdk.org/git/dpdk-kmods
クローンの Git リポジトリの親ディレクトリからモジュールをビルドし、DPDK に UIO ドライバをインストールします。
pushd dpdk-kmods/linux/igb_uio sudo make sudo depmod && sudo insmod igb_uio.ko popd
dpdk-igb-uio-dkms
パッケージをインストールします。sudo apt-get install -y dpdk-igb-uio-dkms
DPDK に UIO ドライバをインストールします。
sudo modprobe igb_uio
現在のネットワーク インターフェースの Peripheral Component Interconnect(PCI)スロット番号を取得します。
sudo lspci | grep -e "gVNIC" -e "Virtio network device"
たとえば、VM がネットワーク インターフェースとして
ens4
を使用している場合、PCI スロット番号は00:04.0
です。ネットワーク アダプタに接続されているネットワーク インターフェースを停止します。
sudo ip link set NETWORK_INTERFACE_NAME down
NETWORK_INTERFACE_NAME
の部分は、VPC ネットワークで指定されているネットワーク インターフェースの名前に置き換えます。VM が使用しているネットワーク インターフェースを確認するには、次のコマンドを実行してネットワーク インターフェースの構成を表示します。sudo ifconfig
DPDK をドライバにバインドします。
sudo dpdk-devbind.py --bind=DRIVER PCI_SLOT_NUMBER
次のように置き換えます。
DRIVER
: DPDK をバインドするドライバ。次のいずれかの値を指定します。UIO ドライバ:
igb_uio
IOMMU-less VFIO ドライバ:
vfio-pci
PCI_SLOT_NUMBER
: 現在のネットワーク インターフェースの PCI スロット番号(00:0NUMBER.0
形式)。
/mnt/huge
ディレクトリを作成し、DPDK がバッファに使用する HugePage を作成します。sudo mkdir /mnt/huge sudo mount -t hugetlbfs -o pagesize=1G none /mnt/huge sudo bash -c 'echo 4 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages' sudo bash -c 'echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages'
DPDK ライブラリに付属の
testpmd
サンプル アプリケーションを実行して、前の手順で作成したネットワーク インターフェースを DPDK が使用できるかどうかをテストします。sudo ./build/app/dpdk-testpmd
DPDK のテストの詳細については、Testpmd コマンドライン オプションをご覧ください。
次のコマンドを実行して、ドライバから DPDK をバインド解除します。
sudo dpdk-devbind.py -u PCI_SLOT_NUMBER
PCI_SLOT_NUMBER
の部分は、前の手順で指定した PCI スロット番号に置き換えます。現在のネットワーク インターフェースの PCI スロット番号を確認する場合は、次のコマンドを実行します。sudo lspci | grep -e "gVNIC" -e "Virtio network device"
たとえば、VM がネットワーク インターフェースとして
ens4
を使用している場合、PCI スロット番号は00:04.0
です。Compute Engine ネットワーク ドライバを再読み込みします。
sudo bash -c 'echo PCI_SLOT_NUMBER > /sys/bus/pci/drivers/VNIC_DIRECTORY/bind' sudo ip link set NETWORK_INTERFACE_NAME up
次のように置き換えます。
PCI_SLOT_NUMBER
: 前の手順で指定した PCI スロット番号。VNIC_DIRECTORY
: vNIC のディレクトリ。使用している vNIC のタイプに応じて、次のいずれかの値を指定します。gVNIC:
gvnic
VirtIO-Net:
virtio-pci
NETWORK_INTERFACE_NAME
: 前のセクションで指定したネットワーク インターフェースの名前。
マシンタイプのネットワーク帯域幅レートを確認する。
VPC ネットワークの作成と管理の詳細を確認する。
ジャンボ フレームを使用した高 MTU 設定の詳細を確認する。
ネットワーク パフォーマンスを対象とした TCP 最適化の詳細を確認する。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
要件
DPDK を実行する VM を作成する際は、次のことを確認してください。
制限事項
VM で DPDK を実行する際は、次の制限があります。
DPDK を実行するように VM を構成する
このセクションでは、DPDK を実行する VM を作成する方法について説明します。
VPC ネットワークを作成する
Google Cloud コンソール、Google Cloud CLI、Compute Engine API のいずれかを使用して、データプレーンとコントロール プレーンの 2 つの VPC ネットワークを作成します。これらのネットワークは、後で VM を作成するときに指定できます。
コンソール
gcloud
API
VPC ネットワーク作成時のその他の構成オプションについては、VPC ネットワークを作成して管理するをご覧ください。
DPDK に VPC ネットワークを使用する VM を作成する
Google Cloud コンソール、gcloud CLI、Compute Engine API を使用して、以前に作成した 2 つの VPC ネットワークで gVNIC または virtIO-Net を有効にする VM を作成します。
推奨: パッケージ マネージャーが UIO と IOMMU-less VFIO ドライバをサポートしているため、オペレーティング システム イメージとして Ubuntu LTS または Ubuntu Pro を指定してください。これらのオペレーティング システムのいずれも指定しない場合は、パケット処理を高速化するために Debian 11 以降を指定することをおすすめします。
コンソール
次の手順を実施して、前の手順で作成した 2 つの VPC ネットワーク サブネットを使用する VM を作成します。
gcloud
次のフラグを指定して
gcloud compute instances create
コマンドを使用し、前の手順で作成した 2 つの VPC ネットワーク サブネットを使用する VM を作成します。gcloud compute instances create VM_NAME \ --image-family=IMAGE_FAMILY \ --image-project=IMAGE_PROJECT \ --machine-type=MACHINE_TYPE \ --network-interface=network=CONTROL_PLANE_NETWORK_NAME,subnet=CONTROL_PLANE_SUBNET_NAME,nic-type=VNIC_TYPE \ --network-interface=network=DATA_PLANE_NETWORK_NAME,subnet=DATA_PLANE_SUBNET_NAME,nic-type=VNIC_TYPE \ --zone=ZONE
次のように置き換えます。
たとえば、
us-central1-a
ゾーンにdpdk-vm
という名前の VM を作成するとします。この VM で、512 GB の SSD 永続ディスク、60 個の vCPU を使用し、Tier_1 ネットワーキング、データプレーンとコントロール プレーン(どちらも gVNIC を使用)のネットワークを備えた事前定義の C2 マシンタイプを指定する場合は、次のコマンドを実行します。gcloud compute instances create dpdk-vm \ --boot-disk-size=512GB \ --boot-disk-type=pd-ssd \ --image-project=ubuntu-os-cloud \ --image-family=ubuntu-2004-lts \ --machine-type=c2-standard-60 \ --network-performance-configs=total-egress-bandwidth-tier=TIER_1 \ --network-interface=network=control,subnet=control,nic-type=GVNIC \ --network-interface=network=data,subnet=data,nic-type=GVNIC \ --zone=us-central1-a
API
次の各フィールドを指定して、
instances.insert
メソッドに対するPOST
リクエストを発行することで、前の手順で作成した 2 つの VPC ネットワーク サブネットを使用する VM を作成します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "machineType": "MACHINE_TYPE", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE_FAMILY" } } ], "networkInterfaces": [ { "network": "global/networks/CONTROL_PLANE_NETWORK_NAME", "subnetwork": "regions/REGION/subnetworks/CONTROL_PLANE_SUBNET_NAME", "nicType": "VNIC_TYPE" }, { "network": "global/networks/DATAPLANE_NETWORK_NAME", "subnetwork": "regions/REGION/subnetworks/DATA_PLANE_SUBNET_NAME", "nicType": "VNIC_TYPE" } ] }
次のように置き換えます。
たとえば、
us-central1-a
ゾーンにdpdk-vm
という名前の VM を作成するとします。この VM で、512 GB の SSD 永続ディスク、60 個の vCPU を使用し、Tier_1 ネットワーキング、データプレーンとコントロール プレーン(どちらも gVNIC を使用)のネットワークを備えた事前定義の C2 マシンタイプを指定する場合は、次のPOST
リクエストを発行します。POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances { "name": "dpdk-vm", "machineType": "c2-standard-60", "disks": [ { "initializeParams": { "diskSizeGb": "512GB", "diskType": "pd-ssd", "sourceImage": "projects/ubuntu-os-cloud/global/images/ubuntu-2004-lts" }, "boot": true } ], "networkInterfaces": [ { "network": "global/networks/control", "subnetwork": "regions/us-central1/subnetworks/control", "nicType": "GVNIC" }, { "network": "global/networks/data", "subnetwork": "regions/us-central1/subnetworks/data", "nicType": "GVNIC" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "TIER_1" } }
VM 作成時のその他の構成オプションについては、VM インスタンスの作成と開始をご覧ください。
VM に DPDK をインストールする
VM に DPDK をインストールするには、次の手順に沿って操作します。
ドライバをインストールする
ドライバで実行するように DPDK を準備するには、次のいずれかの方法を選択してドライバをインストールします。
IOMMU-less VFIO をインストールする
IOMMU-less VFIO ドライバのインストール手順は次のとおりです。
UIO をインストールする
DPDK に UIO ドライバをインストールするには、次のいずれかの方法を選択します。
git を使用して UIO をインストールする
git
を使用して DPDK に UIO ドライバをインストールするには、次の手順を実施します。Linux パッケージを使用して UIO をインストールする
Linux パッケージを使用して DPDK に UIO ドライバをインストールするには、次の手順を実施します。
DPDK をドライバにバインドしてテストする
前のセクションでインストールしたドライバに DPDK をバインドするには、次の手順を実施します。
DPDK のバインド解除
DPDK の使用後は、前のセクションでインストールしたドライバから DPDK をバインド解除できます。DPDK をバインド解除する手順は次のとおりです。
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-11-19 UTC。
-