8.7. SR-IOV での DPDK の使用
Data Plane Development Kit (DPDK) は、高速パケット処理用のライブラリーとドライバーのセットを提供するものです。
SR-IOV ネットワーク上で DPDK ワークロードを実行するようにクラスターと仮想マシンを設定できます。
8.7.1. DPDK ワークロード用のクラスター設定 リンクのコピーリンクがクリップボードにコピーされました!
ネットワークパフォーマンスを向上させるために、Data Plane Development Kit (DPDK) ワークロードを実行するように OpenShift Container Platform クラスターを設定できます。
前提条件
-
cluster-admin
権限を持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。 - SR-IOV Network Operator がインストールされている。
- Node Tuning Operator がインストールされている。
手順
- コンピュートノードトポロジーのマッピングを実行し、DPDK アプリケーション用に分離する Non-Uniform Memory Access (NUMA) CPU と、オペレーティングシステム (OS) 用に予約する NUMA CPU を決定します。
OpenShift Container Platform クラスターが高可用性のために個別のコントロールプレーンとコンピュートノードを使用する場合:
コンピュートノードのサブセットにカスタムロール (例:
worker-dpdk
) のラベルを追加します。oc label node <node_name> node-role.kubernetes.io/worker-dpdk=""
$ oc label node <node_name> node-role.kubernetes.io/worker-dpdk=""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow spec.machineConfigSelector
オブジェクトにworker-dpdk
ラベルを含む新しいMachineConfigPool
マニフェストを作成します。MachineConfigPool
マニフェストの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
前の手順で作成したラベル付きノードとマシン設定プールに適用する
PerformanceProfile
マニフェストを作成します。パフォーマンスプロファイルは、DPDK アプリケーション用に分離された CPU とハウスキーピング用に予約された CPU を指定します。PerformanceProfile
マニフェストの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記MachineConfigPool
マニフェストとPerformanceProfile
マニフェストを適用すると、コンピュートノードが自動的に再起動します。PerformanceProfile
オブジェクトのstatus.runtimeClass
フィールドから、生成されたRuntimeClass
リソースの名前を取得します。oc get performanceprofiles.performance.openshift.io profile-1 -o=jsonpath='{.status.runtimeClass}{"\n"}'
$ oc get performanceprofiles.performance.openshift.io profile-1 -o=jsonpath='{.status.runtimeClass}{"\n"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HyperConverged
カスタムリソース (CR) を編集して、以前に取得したRuntimeClass
名をvirt-launcher
Pod のデフォルトのコンテナーランタイムクラスとして設定します。oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type='json' -p='[{"op": "add", "path": "/spec/defaultRuntimeClass", "value":"<runtimeclass-name>"}]'
$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type='json' -p='[{"op": "add", "path": "/spec/defaultRuntimeClass", "value":"<runtimeclass-name>"}]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記HyperConverged
CR を編集すると、変更の適用後に作成されるすべての仮想マシンに影響するグローバル設定が変更されます。DPDK 対応コンピュートノードが同時マルチスレッド (SMT) を使用している場合は、
HyperConverged
CR を編集してAlignCPUs
イネーブラーを有効にします。oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type='json' -p='[{"op": "replace", "path": "/spec/featureGates/alignCPUs", "value": true}]'
$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type='json' -p='[{"op": "replace", "path": "/spec/featureGates/alignCPUs", "value": true}]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記AlignCPUs
を有効にすると、OpenShift Virtualization は、エミュレーターのスレッド分離を使用する場合に CPU 総数を偶数パリティーにするために、追加で最大 2 つの専用 CPU を要求できるようになります。spec.deviceType
フィールドをvfio-pci
に設定してSriovNetworkNodePolicy
オブジェクトを作成します。SriovNetworkNodePolicy
マニフェストの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.7.1.1. 高可用性クラスターのカスタムマシン設定プールを削除する リンクのコピーリンクがクリップボードにコピーされました!
高可用性クラスター用に以前に作成したカスタムマシン設定プールを削除できます。
前提条件
-
cluster-admin
権限を持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。 -
コンピュートノードのサブセットにカスタムロールのラベルを付け、そのラベルを使用して
MachineConfigPool
マニフェストを作成することで、カスタムマシン設定プールを作成した。
手順
次のコマンドを実行して、コンピュートノードから
worker-dpdk
ラベルを削除します。oc label node <node_name> node-role.kubernetes.io/worker-dpdk-
$ oc label node <node_name> node-role.kubernetes.io/worker-dpdk-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
worker-dpdk
ラベルを含むMachineConfigPool
マニフェストを削除します。oc delete mcp worker-dpdk
$ oc delete mcp worker-dpdk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.7.2. DPDK ワークロード用のプロジェクト設定 リンクのコピーリンクがクリップボードにコピーされました!
SR-IOV ハードウェアで DPDK ワークロードを実行するプロジェクトを設定できます。
前提条件
- DPDK ワークロードを実行するようにクラスターが設定されている。
手順
DPDK アプリケーションの namespace を作成します。
oc create ns dpdk-checkup-ns
$ oc create ns dpdk-checkup-ns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SriovNetworkNodePolicy
オブジェクトを参照するSriovNetwork
オブジェクトを作成します。SriovNetwork
オブジェクトの作成時に、SR-IOV Network Operator はNetworkAttachmentDefinition
オブジェクトを自動的に作成します。SriovNetwork
マニフェストの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - オプション: 仮想マシンレイテンシーチェックアップを実行して、ネットワークが適切に設定されていることを確認します。
- オプション: DPDK チェックアップを実行して、namespace が DPDK ワークロード用に準備できているか確認します。
8.7.3. DPDK ワークロード用の仮想マシン設定 リンクのコピーリンクがクリップボードにコピーされました!
仮想マシン (VM) 上で Data Packet Development Kit (DPDK) ワークロードを実行すると、レイテンシーの短縮とスループットが向上し、ユーザー空間でのパケット処理を高速化できます。DPDK は、ハードウェアベースの I/O 共有に SR-IOV ネットワークを使用します。
前提条件
- DPDK ワークロードを実行するようにクラスターが設定されている。
- 仮想マシンを実行するプロジェクトを作成し、設定している。
手順
VirtualMachine
マニフェストを編集して、SR-IOV ネットワークインターフェイス、CPU トポロジー、CRI-O アノテーション、Huge Page に関する情報を格納します。VirtualMachine
マニフェストの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
$ oc apply -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ゲストオペレーティングシステムを設定します。次の例は、RHEL 9 オペレーティングシステムの設定手順を示しています。
GRUB ブートローダーコマンドラインインターフェイスを使用して、Huge Page を設定します。次の例では、1G の Huge Page を 8 個指定しています。
grubby --update-kernel=ALL --args="default_hugepagesz=1GB hugepagesz=1G hugepages=8"
$ grubby --update-kernel=ALL --args="default_hugepagesz=1GB hugepagesz=1G hugepages=8"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TuneD アプリケーションで
cpu-partitioning
プロファイルを使用して低レイテンシーチューニングを実現するには、次のコマンドを実行します。dnf install -y tuned-profiles-cpu-partitioning
$ dnf install -y tuned-profiles-cpu-partitioning
Copy to Clipboard Copied! Toggle word wrap Toggle overflow echo isolated_cores=2-9 > /etc/tuned/cpu-partitioning-variables.conf
$ echo isolated_cores=2-9 > /etc/tuned/cpu-partitioning-variables.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最初の 2 つの CPU (0 と 1) はハウスキーピングタスク用に確保され、残りは DPDK アプリケーション用に分離されます。
tuned-adm profile cpu-partitioning
$ tuned-adm profile cpu-partitioning
Copy to Clipboard Copied! Toggle word wrap Toggle overflow driverctl
デバイスドライバー制御ユーティリティーを使用して、SR-IOV NIC ドライバーをオーバーライドします。dnf install -y driverctl
$ dnf install -y driverctl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow driverctl set-override 0000:07:00.0 vfio-pci
$ driverctl set-override 0000:07:00.0 vfio-pci
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 仮想マシンを再起動して変更を適用します。