10.9.3. DPDK ワークロード用の仮想マシン設定
仮想マシン (VM) 上で Data Packet Development Kit (DPDK) ワークロードを実行すると、レイテンシーの短縮とスループットが向上し、ユーザー空間でのパケット処理を高速化できます。DPDK は、ハードウェアベースの I/O 共有に SR-IOV ネットワークを使用します。
前提条件
- DPDK ワークロードを実行するようにクラスターが設定されている。
- 仮想マシンを実行するプロジェクトを作成し、設定している。
-
OpenShift CLI (
oc) がインストールされている。
手順
VirtualMachineマニフェストを編集して、SR-IOV ネットワークインターフェイス、CPU トポロジー、CRI-O アノテーション、Huge Page に関する情報を格納します。VirtualMachineマニフェストの例apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: rhel-dpdk-vm spec: runStrategy: Always template: metadata: annotations: cpu-load-balancing.crio.io: disable1 cpu-quota.crio.io: disable2 irq-load-balancing.crio.io: disable3 spec: domain: cpu: sockets: 14 cores: 55 threads: 2 dedicatedCpuPlacement: true isolateEmulatorThread: true interfaces: - masquerade: {} name: default - model: virtio name: nic-east pciAddress: '0000:07:00.0' sriov: {} networkInterfaceMultiqueue: true rng: {} memory: hugepages: pageSize: 1Gi6 guest: 8Gi networks: - name: default pod: {} - multus: networkName: dpdk-net7 name: nic-east # ...- 1
- このアノテーションは、コンテナーが使用する CPU に対するロードバランシングが無効であることを示します。
- 2
- このアノテーションは、コンテナーが使用する CPU に対する CPU クォータが無効であることを示します。
- 3
- このアノテーションは、コンテナーが使用する CPU に対する Interrupt Request (IRQ) のロードバランシングが無効であることを示します。
- 4
- 仮想マシン内のソケットの数。同じ Non-Uniform Memory Access (NUMA) ノードから CPU をスケジュールするには、このフィールドを
1に設定する必要があります。 - 5
- 仮想マシン内のコアの数。値は
1以上とします。この例では、仮想マシンは 5 個のハイパースレッドか 10 個の CPU でスケジュールされています。 - 6
- Huge Page のサイズ。x86-64 アーキテクチャーの有効な値は 1Gi と 2Mi です。この例は、サイズが 1Gi の 8 個の Huge Page に対する要求です。
- 7
- SR-IOV
NetworkAttachmentDefinitionオブジェクトの名前。
- エディターを保存し、終了します。
VirtualMachineマニフェストを適用します。$ oc apply -f <file_name>.yamlゲストオペレーティングシステムを設定します。次の例は、RHEL 9 オペレーティングシステムの設定手順を示しています。
GRUB ブートローダーコマンドラインインターフェイスを使用して、Huge Page を設定します。次の例では、1G の Huge Page を 8 個指定しています。
$ grubby --update-kernel=ALL --args="default_hugepagesz=1GB hugepagesz=1G hugepages=8"TuneD アプリケーションで
cpu-partitioningプロファイルを使用して低レイテンシーチューニングを実現するには、次のコマンドを実行します。$ dnf install -y tuned-profiles-cpu-partitioning$ echo isolated_cores=2-9 > /etc/tuned/cpu-partitioning-variables.conf最初の 2 つの CPU (0 と 1) はハウスキーピングタスク用に確保され、残りは DPDK アプリケーション用に分離されます。
$ tuned-adm profile cpu-partitioningdriverctlデバイスドライバー制御ユーティリティーを使用して、SR-IOV NIC ドライバーをオーバーライドします。$ dnf install -y driverctl$ driverctl set-override 0000:07:00.0 vfio-pci
- 仮想マシンを再起動して変更を適用します。