DPDK を使用する

このページでは、U4C Compute Engine インスタンスで Data Plane Development Kit(DPDK)を使用する方法について説明します。

U4C インスタンスの DPDK について

データプレーン開発キット(DPDK)は、高速パケット処理、低レイテンシ、一貫性のあるパフォーマンスを必要とするパフォーマンス重視のアプリケーションに対応したフレームワークです。DPDK は Linux カーネル ネットワーク スタックをバイパスし、ユーザー空間で直接実行されます。

U4C インスタンスは、Google Virtual NIC(gVNIC)Poll Mode Driver(PMD)を使用して DPDK をサポートします。DPDK をインストールすると、標準の ethdev API と rte_flow API を使用してドライバ機能を構成できます。

ULL ソリューションで DPDK を使用すると、フローステアリングがサポートされます。特定のトラフィック フローを指定された受信キュー(RX)に直接ステアリングすることで、デフォルトの受信側スケーリング(RSS)ハッシュをバイパスできます。ULL ソリューションは、ULL ユニキャスト トラフィックとマルチキャスト トラフィックの 3 タプル フロー ステアリング(プロトコル、宛先 IP アドレス、宛先ポート)をサポートしています。

また、gVNIC PMD は、mbuf でのハードウェア RX タイムスタンプと rte_eth_read_clock によるクロック読み取りをサポートしています。

制限事項

U4C インスタンスで DPDK を使用する場合、次の制限があります。

  • ベアメタル インスタンスのサポートは、メインラインの DPDK リリースまたは dpdk-next-net リポジトリでは利用できません。U4C インスタンスに DPDK をインストールするの手順に沿って、必要なパッチを適用する必要があります。
  • ULL ネットワーク インターフェース(nic1 と nic2)で DPDK を使用する U4C インスタンスに正確な時刻を構成する場合は、時刻同期のソースとして nic0 を使用するように chrony を構成する必要があります。

始める前に

U4C Compute Engine インスタンスで DPDK を使用する前に、次の要件を満たす必要があります。

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

まだ作成していない場合は、U4C ベアメタル インスタンスを作成します。ULL Compute Engine インスタンスを作成するをご覧ください。

SSH を使用してインスタンスに接続する

まだ接続していない場合は、SSH を使用してインスタンスに接続します。

U4C インスタンスに DPDK をインストールする

U4C インスタンスに DPDK をインストールする手順は次のとおりです。

  1. DPDK インストールの依存関係を構成します。

    1. Rocky Linux を使用している場合は、CodeReady Builder(CRB)リポジトリを有効にします。Red Hat Enterprise Linux(RHEL)を使用している場合は、この手順をスキップします。

      sudo dnf -y config-manager --enable crb
      
    2. 必要なパッケージとビルドツールをインストールします。

      sudo dnf install -y git gcc gcc-c++ make ninja-build python3-pip \
          kernel-devel-$(uname -r) pkgconf-pkg-config numactl-devel
      sudo pip install pyelftools meson
      
  2. DPDK ソースをダウンロードします。dpdk-next-net リポジトリまたは DPDK リリース バージョン 26.07 以降を使用する必要があります。

    • dpdk-next-net

      git clone git://dpdk.org/next/dpdk-next-net dpdk-source
      
    • DPDK 26.07 以降

      git clone git://dpdk.org/dpdk -b v26.07 dpdk-source
      
  3. 必要なパッチを適用します。ベアメタル サポートのソースは、Google compute-virtual-ethernet-dpdk リポジトリの dpdk-bm ブランチでホストされています。パッチは dpdk-next-net リポジトリと ABI 互換性があります。

    パッチは、そのままコピーするか、チェリーピック メソッドを使用して適用できます。希望するワークフローに応じて、次のいずれかを行います。

    • 逐語的なコピー

      git clone https://github.com/google/compute-virtual-ethernet-dpdk -b dpdk-bm dpdk-bm
      cp -r dpdk-bm/drivers/net/gve/* dpdk-source/drivers/net/gve/
      cd dpdk-source
    • チェリーピック

      cd dpdk-source
      git remote add gve-bm https://github.com/google/compute-virtual-ethernet-dpdk
      git fetch gve-bm
      git cherry-pick gve-bm/main..gve-bm/dpdk-bm
  4. DPDK をビルドしてインストールします。

    meson setup build
    sudo ninja -C build install; sudo ldconfig
    

DPDK をドライバにバインドする

DPDK をドライバにバインドしてテストするの説明に従って、インスタンスのネットワーク インターフェースを DPDK 互換のカーネル ドライバにバインドする必要があります。

U4C ベアメタル インスタンスについては、次の点に注意してください。

  • ベアメタル インスタンスでは、VM インスタンスで使用される UIO ドライバや IOMMU なしの VFIO ドライバは必要ありません。標準の vfio-pci ドライバに直接バインドできます。
  • ULL ネットワーク インターフェース(nic1 と nic2)のみを DPDK ドライバにバインドできます。ネットワーク接続を維持し、時刻同期をサポートするため、nic0 は標準のカーネル ドライバにバインドされたままにする必要があります。

詳細については、DPDK ドキュメントのカーネル モジュールとのネットワーク ポートのバインドとバインド解除をご覧ください。

次のステップ

  • インスタンスのクロックをホストサーバーの物理 NIC のクロックと同期するには、正確な時刻を構成するをご覧ください。