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 をインストールする手順は次のとおりです。
DPDK インストールの依存関係を構成します。
Rocky Linux を使用している場合は、CodeReady Builder(CRB)リポジトリを有効にします。Red Hat Enterprise Linux(RHEL)を使用している場合は、この手順をスキップします。
sudo dnf -y config-manager --enable crb必要なパッケージとビルドツールをインストールします。
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
DPDK ソースをダウンロードします。
dpdk-next-netリポジトリまたは DPDK リリース バージョン 26.07 以降を使用する必要があります。dpdk-next-netgit clone git://dpdk.org/next/dpdk-next-net dpdk-sourceDPDK 26.07 以降
git clone git://dpdk.org/dpdk -b v26.07 dpdk-source
必要なパッチを適用します。ベアメタル サポートのソースは、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
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 のクロックと同期するには、正確な時刻を構成するをご覧ください。