8.8. DPDK および RDMA モードでの仮想機能 (VF) の使用
Single Root I/O Virtualization (SR-IOV) ネットワークハードウェアは、Data Plane Development Kit (DPDK) および Remote Direct Memory Access (RDMA) で利用できます。
8.8.1. DPDK および RDMA モードでの仮想機能 (VF) の使用例
Data Plane Development Kit (DPDK) はテクノロジープレビュー機能です。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。Red Hat は実稼働環境でこれらを使用することを推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。
Red Hat のテクノロジープレビュー機能のサポート範囲についての詳細は、「テクノロジープレビュー機能のサポート範囲」を参照してください。
Remote Direct Memory Access (RDMA) はテクノロジープレビュー機能です。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。Red Hat は実稼働環境でこれらを使用することを推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。
Red Hat のテクノロジープレビュー機能のサポート範囲についての詳細は、「テクノロジープレビュー機能のサポート範囲」を参照してください。
8.8.2. 前提条件
-
OpenShift CLI (
oc
) をインストールします。 -
cluster-admin
権限を持つユーザーとしてのログイン。 - SR-IOV ネットワーク Operator がインストールされていること。
8.8.3. Intel NIC を使用した DPDK モードでの仮想機能 (VF) の使用例
手順
以下の SriovNetworkNodePolicy CR を作成してから、YAML を
intel-dpdk-node-policy.yaml
ファイルに保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: intel-dpdk-node-policy namespace: openshift-sriov-network-operator spec: resourceName: intelnics nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" priority: <priority> numVfs: <num> nicSelector: vendor: "8086" deviceID: "158b" pfNames: ["<pf_name>", ...] rootDevices: ["<pci_bus_id>", "..."] deviceType: vfio-pci 1
- 1
- 仮想機能 (VF) のドライバータイプを
vfio-pci
に指定します。
注記SriovNetworkNodePolicy
の各オプションに関する詳細は、「SR-IOV ネットワークデバイスの設定
」セクションを参照してください。+ SriovNetworkNodePolicy CR で指定された設定を適用する際に、SR-IOV Operator はノードをドレイン (解放) する可能性があり、場合によってはノードの再起動を行う場合があります。設定の変更が適用されるまでに数分の時間がかかる場合があります。エビクトされたワークロードを処理するために、クラスター内に利用可能なノードが十分にあることを前もって確認します。
+ 設定の更新が適用された後に、
openshift-sriov-network-operator
namespace のすべての Pod がRunning
ステータスに変更されます。以下のコマンドを実行して SriovNetworkNodePolicy CR を作成します。
$ oc create -f intel-dpdk-node-policy.yaml
以下の SriovNetwork CR を作成してから、YAML を
intel-dpdk-network.yaml
ファイルに保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: intel-dpdk-network namespace: openshift-sriov-network-operator spec: networkNamespace: <target_namespace> ipam: "{}" 1 vlan: <vlan> resourceName: intelnics
- 1
- IPAM CNI プラグインの空のオブジェクト
"{}"
を指定します。DPDK はユーザー空間モードで機能し、IP アドレスは必要ありません。
注記SriovNetwork
の各オプションに関する詳細は、「SR-IOV の追加ネットワークの設定
」セクションを参照してください。以下のコマンドを実行して SriovNetworkNodePolicy CR を作成します。
$ oc create -f intel-dpdk-network.yaml
以下の Pod 仕様を作成してから、YAML を
intel-dpdk-pod.yaml
ファイルに保存します。apiVersion: v1 kind: Pod metadata: name: dpdk-app namespace: <target_namespace> 1 annotations: k8s.v1.cni.cncf.io/networks: intel-dpdk-network spec: containers: - name: testpmd image: <DPDK_image> 2 securityContext: capabilities: add: ["IPC_LOCK"] 3 volumeMounts: - mountPath: /dev/hugepages 4 name: hugepage resources: limits: openshift.io/intelnics: "1" 5 memory: "1Gi" cpu: "4" 6 hugepages-1Gi: "4Gi" 7 requests: openshift.io/intelnics: "1" memory: "1Gi" cpu: "4" hugepages-1Gi: "4Gi" command: ["sleep", "infinity"] volumes: - name: hugepage emptyDir: medium: HugePages
- 1
- SriovNetwork CR
intel-dpdk-network
が作成される同じtarget_namespace
を指定します。Pod を異なる namespace に作成する場合、target_namespace
を Pod 仕様と SriovNetowrk CR の両方で変更します。 - 2
- アプリケーションとアプリケーションが使用する DPDK ライブラリーが含まれる DPDK イメージを指定します。
- 3
- コンテナー内の hugepage メモリーを割り当てるためにアプリケーションが必要とする
IPC_LOCK
機能を指定します。 - 4
- hugepage ボリュームを、
/dev/hugepages
の下にある DPDK Pod にマウントします。hugepage ボリュームは、medium がHugepages
に指定されている emptyDir ボリュームタイプでサポートされます。 - 5
- オプション: DPDK Pod に割り当てられる DPDK デバイスの数を指定します。このリソース要求および制限は、明示的に指定されていない場合、SR-IOV ネットワークリソースインジェクターによって自動的に追加されます。SR-IOV ネットワークリソースインジェクターは、SR-IOV Operator によって管理される受付コントローラーコンポーネントです。これはデフォルトで有効にされており、デフォルト
SriovOperatorConfig
CR でenableInjector
オプションをfalse
に設定して無効にすることができます。 - 6
- CPU の数を指定します。DPDK Pod には通常、kubelet から排他的 CPU を割り当てる必要があります。これは、CPU マネージャーポリシーを
static
に設定し、Guaranteed
QoS を持つ Pod を作成して実行されます。 - 7
- hugepage サイズ
hugepages-1Gi
またはhugepages-2Mi
を指定し、DPDK Pod に割り当てられる hugepage の量を指定します。2Mi
および1Gi
hugepage を別々に設定します。1Gi
hugepage を設定するには、カーネル引数をノードに追加する必要があります。たとえば、カーネル引数default_hugepagesz=1GB
、hugepagesz=1G
およびhugepages=16
を追加すると、16*1Gi
hugepage がシステムの起動時に割り当てられます。
以下のコマンドを実行して DPDK Pod を作成します。
$ oc create -f intel-dpdk-pod.yaml
8.8.4. Mellanox NIC を使用した DPDK モードでの仮想機能 (VF) の使用例
手順
以下の SriovNetworkNodePolicy CR を作成してから、YAML を
mlx-dpdk-node-policy.yaml
ファイルに保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: mlx-dpdk-node-policy namespace: openshift-sriov-network-operator spec: resourceName: mlxnics nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" priority: <priority> numVfs: <num> nicSelector: vendor: "15b3" deviceID: "1015" 1 pfNames: ["<pf_name>", ...] rootDevices: ["<pci_bus_id>", "..."] deviceType: netdevice 2 isRdma: true 3
注記SriovNetworkNodePolicy
の各オプションに関する詳細は、「SR-IOV ネットワークデバイスの設定
」セクションを参照してください。+ SriovNetworkNodePolicy CR で指定された設定を適用する際に、SR-IOV Operator はノードをドレイン (解放) する可能性があり、場合によってはノードの再起動を行う場合があります。設定の変更が適用されるまでに数分の時間がかかる場合があります。エビクトされたワークロードを処理するために、クラスター内に利用可能なノードが十分にあることを前もって確認します。
+ 設定の更新が適用された後に、
openshift-sriov-network-operator
namespace のすべての Pod がRunning
ステータスに変更されます。以下のコマンドを実行して SriovNetworkNodePolicy CR を作成します。
$ oc create -f mlx-dpdk-node-policy.yaml
以下の SriovNetwork CR を作成してから、YAML を
mlx-dpdk-network.yaml
ファイルに保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: mlx-dpdk-network namespace: openshift-sriov-network-operator spec: networkNamespace: <target_namespace> ipam: |- 1 ... vlan: <vlan> resourceName: mlxnics
- 1
- IPAM CNI プラグインの設定オブジェクトを YAML ブロックスケーラーとして指定します。プラグインは、割り当て定義についての IP アドレスの割り当てを管理します。
注記SriovNetwork
の各オプションに関する詳細は、「SR-IOV の追加ネットワークの設定
」セクションを参照してください。以下のコマンドを実行して SriovNetworkNodePolicy CR を作成します。
$ oc create -f mlx-dpdk-network.yaml
以下の SR-IOV Pod 仕様を作成してから、YAML を
mlx-dpdk-pod.yaml
ファイルに保存します。apiVersion: v1 kind: Pod metadata: name: dpdk-app namespace: <target_namespace> 1 annotations: k8s.v1.cni.cncf.io/networks: mlx-dpdk-network spec: containers: - name: testpmd image: <DPDK_image> 2 securityContext: capabilities: add: ["IPC_LOCK"] 3 volumeMounts: - mountPath: /dev/hugepages 4 name: hugepage resources: limits: openshift.io/mlxnics: "1" 5 memory: "1Gi" cpu: "4" 6 hugepages-1Gi: "4Gi" 7 requests: openshift.io/mlxnics: "1" memory: "1Gi" cpu: "4" hugepages-1Gi: "4Gi" command: ["sleep", "infinity"] volumes: - name: hugepage emptyDir: medium: HugePages
- 1
- SriovNetwork CR
mlx-dpdk-network
が作成される同じtarget_namespace
を指定します。Pod を異なる namespace に作成する場合、target_namespace
を Pod 仕様および SriovNetowrk CR の両方で変更します。 - 2
- アプリケーションとアプリケーションが使用する DPDK ライブラリーが含まれる DPDK イメージを指定します。
- 3
- コンテナー内の hugepage メモリーを割り当てるためにアプリケーションが必要とする
IPC_LOCK
機能を指定します。 - 4
- hugepage ボリュームを、
/dev/hugepages
の下にある DPDK Pod にマウントします。hugepage ボリュームは、medium がHugepages
に指定されている emptyDir ボリュームタイプでサポートされます。 - 5
- オプション: DPDK Pod に割り当てられる DPDK デバイスの数を指定します。このリソース要求および制限は、明示的に指定されていない場合、SR-IOV ネットワークリソースインジェクターによって自動的に追加されます。SR-IOV ネットワークリソースインジェクターは、SR-IOV Operator によって管理される受付コントローラーコンポーネントです。これはデフォルトで有効にされており、デフォルト
SriovOperatorConfig
CR でenableInjector
オプションをfalse
に設定して無効にすることができます。 - 6
- CPU の数を指定します。DPDK Pod には通常、kubelet から排他的 CPU を割り当てる必要があります。これは、CPU マネージャーポリシーを
static
に設定し、Guaranteed
QoS を持つ Pod を作成して実行されます。 - 7
- hugepage サイズ
hugepages-1Gi
またはhugepages-2Mi
を指定し、DPDK Pod に割り当てられる hugepage の量を指定します。2Mi
および1Gi
hugepage を別々に設定します。1Gi
hugepage を設定するには、カーネル引数をノードに追加する必要があります。
以下のコマンドを実行して DPDK Pod を作成します。
$ oc create -f mlx-dpdk-pod.yaml
8.8.5. Mellanox NIC を使った RDMA モードでの仮想機能 (VF) の例
RoCE (RDMA over Converged Ethernet) は、OpenShift Container Platform で RDMA を使用する場合に唯一サポートされているモードです。
手順
以下の SriovNetworkNodePolicy CR を作成してから、YAML を
mlx-rdma-node-policy.yaml
ファイルに保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: mlx-rdma-node-policy namespace: openshift-sriov-network-operator spec: resourceName: mlxnics nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" priority: <priority> numVfs: <num> nicSelector: vendor: "15b3" deviceID: "1015" 1 pfNames: ["<pf_name>", ...] rootDevices: ["<pci_bus_id>", "..."] deviceType: netdevice 2 isRdma: true 3
注記SriovNetworkNodePolicy
の各オプションに関する詳細は、「SR-IOV ネットワークデバイスの設定
」セクションを参照してください。+ SriovNetworkNodePolicy CR で指定された設定を適用する際に、SR-IOV Operator はノードをドレイン (解放) する可能性があり、場合によってはノードの再起動を行う場合があります。設定の変更が適用されるまでに数分の時間がかかる場合があります。エビクトされたワークロードを処理するために、クラスター内に利用可能なノードが十分にあることを前もって確認します。
+ 設定の更新が適用された後に、
openshift-sriov-network-operator
namespace のすべての Pod がRunning
ステータスに変更されます。以下のコマンドを実行して SriovNetworkNodePolicy CR を作成します。
$ oc create -f mlx-rdma-node-policy.yaml
以下の SriovNetwork CR を作成してから、YAML を
mlx-rdma-network.yaml
ファイルに保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: mlx-rdma-network namespace: openshift-sriov-network-operator spec: networkNamespace: <target_namespace> ipam: |- 1 ... vlan: <vlan> resourceName: mlxnics
- 1
- IPAM CNI プラグインの設定オブジェクトを YAML ブロックスケーラーとして指定します。プラグインは、割り当て定義についての IP アドレスの割り当てを管理します。
注記SriovNetwork
の各オプションに関する詳細は、「SR-IOV の追加ネットワークの設定
」セクションを参照してください。以下のコマンドを実行して SriovNetworkNodePolicy CR を作成します。
$ oc create -f mlx-rdma-network.yaml
以下の SR-IOV Pod 仕様を作成してから、YAML を
mlx-rdma-pod.yaml
ファイルに保存します。apiVersion: v1 kind: Pod metadata: name: rdma-app namespace: <target_namespace> 1 annotations: k8s.v1.cni.cncf.io/networks: mlx-rdma-network spec: containers: - name: testpmd image: <RDMA_image> 2 securityContext: capabilities: add: ["IPC_LOCK"] 3 volumeMounts: - mountPath: /dev/hugepages 4 name: hugepage resources: limits: memory: "1Gi" cpu: "4" 5 hugepages-1Gi: "4Gi" 6 requests: memory: "1Gi" cpu: "4" hugepages-1Gi: "4Gi" command: ["sleep", "infinity"] volumes: - name: hugepage emptyDir: medium: HugePages
- 1
- SriovNetwork CR
mlx-rdma-network
が作成される同じtarget_namespace
を指定します。Pod を異なる namespace に作成する場合、target_namespace
を Pod 仕様および SriovNetowrk CR の両方で変更します。 - 2
- アプリケーションとアプリケーションが使用する RDMA ライブラリーが含まれる RDMA イメージを指定します。
- 3
- コンテナー内の hugepage メモリーを割り当てるためにアプリケーションが必要とする
IPC_LOCK
機能を指定します。 - 4
- hugepage ボリュームを、
/dev/hugepages
の下にある RDMA Pod にマウントします。hugepage ボリュームは、medium がHugepages
に指定されている emptyDir ボリュームタイプでサポートされます。 - 5
- CPU の数を指定します。RDMA Pod には通常、kubelet から排他的 CPU を割り当てる必要があります。これは、CPU マネージャーポリシーを
static
に設定し、Guaranteed
QoS を持つ Pod を作成して実行されます。 - 6
- hugepage サイズ
hugepages-1Gi
またはhugepages-2Mi
を指定し、RDMA Pod に割り当てられる hugepage の量を指定します。2Mi
および1Gi
hugepage を別々に設定します。1Gi
hugepage を設定するには、カーネル引数をノードに追加する必要があります。
以下のコマンドを実行して RDMA Pod を作成します。
$ oc create -f mlx-rdma-pod.yaml