DPDK によるネットワーク パケット処理の高速化


このドキュメントでは、仮想マシン(VM)インスタンスでデータプレーン開発キット(DPDK)を有効にして、ネットワーク パケット処理を高速化する方法について説明します。

DPDK は、高速パケット処理、低レイテンシ、一貫性のあるパフォーマンスを必要とするパフォーマンス重視のアプリケーションに対応したフレームワークです。DPDK は、カーネル ネットワークをバイパスし、ユーザー空間で直接実行するデータプレーン ライブラリとネットワーク インターフェース コントローラ(NIC)のセットを提供します。たとえば、VM で DPDK を有効にすると、次のものを実行する際に便利です。

  • ネットワーク機能の仮想化(NFV)のデプロイ

  • ソフトウェア定義ネットワーキング(SDN)アプリケーション

  • 動画ストリーミングや Voice over IP アプリケーション

VM では、次のいずれかの仮想 NIC(vNIC)タイプを使用して DPDK を実行できます。

  • 推奨: gVNIC

    virtIO の後継となる次世代の vNIC として、Compute Engine に特化して設計された、高パフォーマンス、安全、スケーラブルな仮想ネットワーク インターフェース。

  • VirtIO-Net

    ブロック ストレージやネットワーク アダプタなどの物理ハードウェアに VM が効率的にアクセスできるようにするオープンソースのイーサネット ドライバ。

DPDK を物理ハードウェアではなく仮想環境で実行する場合の問題のひとつとして、仮想環境では高パフォーマンスのアプリケーションに対して SR-IOV と I/O メモリ管理ユニット(IOMMU)がサポートされていないことが挙げられます。この制限を回避するには、次のいずれかのドライバを使用して、ホスト仮想アドレスではなくゲスト物理アドレスで DPDK を実行する必要があります。

始める前に

要件

DPDK を実行する VM を作成する際は、次のことを確認してください。

  • アプリケーションの実行時にネットワーク接続が失われる状況を回避するには、次の 2 つの Virtual Private Cloud ネットワークを使用します。

    • コントロール プレーン用の VPC ネットワーク

    • データプレーン用の VPC ネットワーク

  • 2 つの VPC ネットワークの両方で、次の項目を指定する必要があります。

    • 一意の IP アドレス範囲を持つサブネット

    • サブネットと同じリージョン

    • 同じタイプの VNIC(gVNIC または VirtIO-Net)

  • VM の作成時は、次の点に留意します。

    • 2 つの VPC ネットワークのサブネットと同じリージョンを指定する必要があります。

    • DKDP で使用する vNIC タイプを指定する必要があります。

    • gVNIC または VirtIO-Net に対してサポートされているマシンシリーズを指定する必要があります。

制限事項

VM で DPDK を実行する際は、次の制限があります。

DPDK を実行するように VM を構成する

このセクションでは、DPDK を実行する VM を作成する方法について説明します。

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

Google Cloud コンソール、Google Cloud CLI、Compute Engine API のいずれかを使用して、データプレーンとコントロール プレーンの 2 つの VPC ネットワークを作成します。これらのネットワークは、後で VM を作成するときに指定できます。

コンソール

  1. データプレーン用の VPC ネットワークを作成します。

    1. Google Cloud コンソールで、[VPC ネットワーク] に移動します。

      [VPC ネットワーク] に移動

      [VPC ネットワーク] ページが開きます。

    2. [ VPC ネットワークを作成] をクリックします。

      [VPC ネットワークの作成] ページが開きます。

    3. [名前] フィールドに、ネットワークの名前を入力します。

    4. [新しいサブネット] セクションで、次の操作を行います。

      1. [名前] フィールドに、サブネットの名前を入力します。

      2. [リージョン] メニューで、サブネットのリージョンを選択します。

      3. [IPv4(シングルスタック)](デフォルト)を選択します。

      4. [IPv4 範囲] に、CIDR 表記の有効な IPv4 範囲のアドレスを入力します。

      5. [完了] をクリックします。

    5. [作成] をクリックします。

      [VPC ネットワーク] ページが開きます。VPC ネットワークの作成が完了するまでに 1 分ほどかかることがあります。

  2. VM への SSH 接続を許可するファイアウォール ルールを設定して、コントロール プレーン用の VPC ネットワークを作成します。

    1. もう一度 [ VPC ネットワークを作成] をクリックします。

      [VPC ネットワークの作成] ページが開きます。

    2. [名前] フィールドに、ネットワークの名前を入力します。

    3. [新しいサブネット] セクションで、次の操作を行います。

      1. [名前] フィールドに、サブネットの名前を入力します。

      2. [リージョン] メニューで、データプレーン ネットワークのサブネットに指定したものと同じリージョンを選択します。

      3. [IPv4(シングルスタック)](デフォルト)を選択します。

      4. [IPv4 範囲] に、CIDR 表記の有効な IPv4 範囲のアドレスを入力します。

      5. [完了] をクリックします。

    4. [IPv4 ファイアウォール ルール] タブで、[NETWORK_NAME-allow-ssh] チェックボックスをオンにします。

      NETWORK_NAME は、前の手順で指定したネットワーク名です。

    5. [作成] をクリックします。

      [VPC ネットワーク] ページが開きます。VPC ネットワークの作成が完了するまでに 1 分ほどかかることがあります。

gcloud

  1. データプレーン用の VPC ネットワークを作成する手順は次のとおりです。

    1. --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)。値は 13008896 の範囲で指定する必要があります。デフォルト値は 1460 です。MTU を 1460 より大きい値に設定する前に、最大伝送単位を確認してください。

    2. 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: サブネットを作成するリージョン。

  2. VM への SSH 接続を許可するファイアウォール ルールを持つコントロール プレーン用の VPC ネットワークを作成するには、次の操作を行います。

    1. --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。値は 13008896 の範囲で指定する必要があります。デフォルト値は 1460 です。MTU を 1460 より大きい値に設定する前に、最大伝送単位を確認してください。

    2. 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: サブネットを作成するリージョン。データプレーン ネットワークのサブネットで指定したリージョンと一致している必要があります。

    3. --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: 前の手順で作成したコントロール プレーン ネットワークの名前。

API

  1. データプレーン用の VPC ネットワークを作成する手順は次のとおりです。

    1. 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)。値は 13008896 の範囲で指定する必要があります。デフォルト値は 1460 です。MTU を 1460 より大きい値に設定する前に、最大伝送単位を確認してください。

    2. 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: 前の手順で作成したデータプレーン ネットワークの名前。

  2. VM への SSH 接続を許可するファイアウォール ルールを持つコントロール プレーン用の VPC ネットワークを作成するには、次の操作を行います。

    1. 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。値は 13008896 の範囲で指定する必要があります。デフォルト値は 1460 です。MTU を 1460 より大きい値に設定する前に、最大伝送単位を確認してください。

    2. 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: 前の手順で作成したコントロール プレーン ネットワークの名前。

    3. 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: 前の手順で作成したコントロール プレーン ネットワークの名前。

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 を作成します。

  1. Google Cloud コンソールで、[VM インスタンス] に移動します。

    [VM インスタンス] に移動

    [VM インスタンス] ページが開きます。

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

    [インスタンスの作成] ページが開きます。

  3. [名前] フィールドに、VM の名前を入力します。

  4. [リージョン] メニューで、前の手順でネットワークを作成したリージョンと同じリージョンを選択します。

  5. [ゾーン] メニューで、VM のゾーンを選択します。

  6. [マシンの構成] セクションで、次の操作を行います。

    1. 次のオプションのいずれかを選択します。

      • 一般的なワークロードの場合は、[汎用] タブを選択します(デフォルト)。

      • 高いパフォーマンスが要求されるワークロードの場合は、[コンピューティング最適化] タブを選択します。

      • メモリ対 vCPU 比が高いワークロードの場合は、[メモリ最適化] タブを選択します。

      • 画像処理装置(GPU)を使用するワークロードの場合は、[GPU] タブを選択します。

    2. (省略可)前の手順で GPU を指定し、VM にアタッチする GPU を変更する場合は、次のいずれかまたは両方を行います。

      1. [GPU のタイプ] メニューで、GPU のタイプを選択します。

      2. [GPU の数] メニューで、GPU の数を選択します。

    3. [シリーズ] メニューで、マシンシリーズを選択します。

    4. [マシンタイプ] メニューでマシンタイプを選択します。

    5. 省略可: [詳細設定] を開き、画面の指示に沿って、この VM のマシンをさらにカスタマイズします。

  7. 省略可: [ブートディスク] セクションで [変更] をクリックし、画面の指示に沿ってディスク イメージを変更します。

  8. [詳細オプション] セクションを開きます。

  9. [ネットワーキング] セクションを開きます。

  10. [ネットワーク パフォーマンスの構成] セクションで、次の操作を行います。

    1. [ネットワーク インターフェース カード] メニューで、次のいずれかを選択します。

      • gVNIC を使用するには、[gVNIC] を選択します。

      • VirtIO-Net を使用するには、[VirtIO] を選択します。

    2. 省略可: ネットワーク パフォーマンスを向上させ、レイテンシを短縮するには、[VM ごとの Tier_1 ネットワーキング パフォーマンスを有効にする] チェックボックスをオンにします。

  11. [ネットワーク インターフェース] セクションで、次の操作を行います。

    1. default 行で、[ 「default」を削除します] をクリックします。

    2. [ネットワーク インターフェースを追加] をクリックします。

      [新しいネットワーク インターフェース] セクションが表示されます。

    3. [ネットワーク] メニューで、前の手順で作成したコントロール プレーン ネットワークを選択します。

    4. [完了] をクリックします。

    5. もう一度 [ネットワーク インターフェースを追加] をクリックします。

      [新しいネットワーク インターフェース] セクションが表示されます。

    6. [ネットワーク] メニューで、前の手順で作成したデータプレーン ネットワークを選択します。

    7. [完了] をクリックします。

  12. [作成] をクリックします。

    [VM インスタンス] ページが開きます。VM の作成が完了するまでに 1 分ほどかかることがあります。

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

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

  • VM_NAME: VM の名前。

  • IMAGE_FAMILY: ブートディスクの初期化に使用されるオペレーティング システムのイメージ ファミリー。また、--image=IMAGE フラグを指定することもできます(IMAGE の部分を特定のバージョンのイメージに置き換えます)。Compute Engine イメージ プロジェクトで使用可能なイメージのリストを表示する方法をご覧ください。

  • IMAGE_PROJECT: ディスク イメージを含むイメージ プロジェクトの名前。

  • MACHINE_TYPE: VM のマシンタイプ(事前定義またはカスタム)。

  • 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 を作成するゾーン。前の手順で作成したサブネットと同じリージョン内のゾーンを指定します。

たとえば、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"
    }
  ]
}

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

  • PROJECT_ID: コントロール プレーン VPC ネットワークとデータプレーン VPC ネットワークが配置されているプロジェクトのプロジェクト ID。

  • ZONE: VM を作成するゾーン。

  • VM_NAME: VM の名前。

  • MACHINE_TYPE: 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: 前の手順で作成したコントロール プレーン ネットワークのサブネットの名前。

たとえば、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 をインストールするには、次の手順に沿って操作します。

  1. SSH を使用して、前のセクションで作成した VM に接続します。

  2. 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
    
  3. DPDK をインストールします。

    wget https://fast.dpdk.org/rel/dpdk-23.07.tar.xz
    tar xvf dpdk-23.07.tar.xz
    cd dpdk-23.07
    
  4. サンプルを使用して DPDK をビルドするには:

    meson setup -Dexamples=all build
    sudo ninja -C build install; sudo ldconfig
    

ドライバをインストールする

ドライバで実行するように DPDK を準備するには、次のいずれかの方法を選択してドライバをインストールします。

IOMMU-less VFIO をインストールする

IOMMU-less VFIO ドライバのインストール手順は次のとおりです。

  1. VFIO が有効になっているかどうかを確認します。

    cat /boot/config-$(uname -r) | grep NOIOMMU
    

    VFIO が有効になっていない場合は、UIO をインストールするの手順を実施します。

  2. VFIO で No-IOMMU モードを有効にします。

    sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
    

UIO をインストールする

DPDK に UIO ドライバをインストールするには、次のいずれかの方法を選択します。

git を使用して UIO をインストールする

git を使用して DPDK に UIO ドライバをインストールするには、次の手順を実施します。

  1. VM 内のディスクに igb_uio Git リポジトリのクローンを作成します。

    git clone https://dpdk.org/git/dpdk-kmods
    
  2. クローンの Git リポジトリの親ディレクトリからモジュールをビルドし、DPDK に UIO ドライバをインストールします。

    pushd dpdk-kmods/linux/igb_uio
    sudo make
    sudo depmod && sudo insmod igb_uio.ko
    popd
    

Linux パッケージを使用して UIO をインストールする

Linux パッケージを使用して DPDK に UIO ドライバをインストールするには、次の手順を実施します。

  1. dpdk-igb-uio-dkms パッケージをインストールします。

    sudo apt-get install -y dpdk-igb-uio-dkms
    
  2. DPDK に UIO ドライバをインストールします。

    sudo modprobe igb_uio
    

DPDK をドライバにバインドしてテストする

前のセクションでインストールしたドライバに DPDK をバインドするには、次の手順を実施します。

  1. 現在のネットワーク インターフェースの Peripheral Component Interconnect(PCI)スロット番号を取得します。