10.9. 在 SR-IOV 中使用 DPDK
Data Plane Development Kit (DPDK) 提供了一组库和驱动程序,用于快速数据包处理。您可以将集群和虚拟机(VM)配置为使用 SR-IOV 硬件的 DPDK 驱动程序运行低延迟数据包处理工作负载。
10.9.1. 为 DPDK 工作负载配置集群 复制链接链接已复制到粘贴板!
您可以配置 OpenShift Container Platform 集群来运行 Data Plane Development Kit (DPDK) 工作负载,以提高网络性能。
先决条件
-
您可以使用具有
cluster-admin权限的用户访问集群。 -
已安装 OpenShift CLI(
oc)。 - 已安装 SR-IOV Network Operator。
- 已安装 Node Tuning Operator。
流程
- 映射计算节点拓扑,以确定为 DPDK 应用程序隔离哪些非统一内存访问 (NUMA) CPU,以及为操作系统 (OS) 保留哪些非一致性内存访问 (NUMA) CPU。
如果您的 OpenShift Container Platform 集群使用单独的 control plane 和计算节点来实现高可用性:
使用自定义角色标记计算节点的子集,例如
worker-dpdk:$ oc label node <node_name> node-role.kubernetes.io/worker-dpdk=""创建一个新的
MachineConfigPool清单,其中包含spec.machineConfigSelector对象中的worker-dpdk标签。MachineConfigPool清单示例:apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: name: worker-dpdk labels: machineconfiguration.openshift.io/role: worker-dpdk spec: machineConfigSelector: matchExpressions: - key: machineconfiguration.openshift.io/role operator: In values: - worker - worker-dpdk nodeSelector: matchLabels: node-role.kubernetes.io/worker-dpdk: ""
创建一个
PerformanceProfile清单,它应用到标记的节点以及您在上一步中创建的机器配置池。性能配置集指定为 DPDK 应用程序隔离的 CPU,以及用于保留保留而保留的 CPU。PerformanceProfile清单示例:apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: profile-1 spec: cpu: isolated: 4-39,44-79 reserved: 0-3,40-43 globallyDisableIrqLoadBalancing: true hugepages: defaultHugepagesSize: 1G pages: - count: 8 node: 0 size: 1G net: userLevelNetworking: true nodeSelector: node-role.kubernetes.io/worker-dpdk: "" numa: topologyPolicy: single-numa-node注意应用
MachineConfigPool和PerformanceProfile清单后,计算节点会自动重启。从
PerformanceProfile对象的status.runtimeClass字段检索生成的RuntimeClass资源的名称:$ oc get performanceprofiles.performance.openshift.io profile-1 -o=jsonpath='{.status.runtimeClass}{"\n"}'通过编辑
HyperConverged自定义资源 (CR) 将之前获取的RuntimeClass名称设置为virt-launcherpod 的默认容器运行时类:$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type='json' -p='[{"op": "add", "path": "/spec/defaultRuntimeClass", "value":"<runtimeclass-name>"}]'注意编辑
HyperConvergedCR 会更改影响更改后创建的所有虚拟机的全局设置。如果您的启用 DPDK 的计算节点使用 Simultaneous 多线程 (SMT),请通过编辑
HyperConvergedCR 来启用AlignCPUsenabler:$ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \ --type='json' -p='[{"op": "replace", "path": "/spec/featureGates/alignCPUs", "value": true}]'注意启用
AlignCPU可让 OpenShift Virtualization 请求两个额外的专用 CPU,在使用仿真程序线程隔离时将 CPU 总数引入到甚至奇偶校验。创建一个
SriovNetworkNodePolicy对象,并将spec.deviceType字段设置为vfio-pci。SriovNetworkNodePolicy清单示例:apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: policy-1 namespace: openshift-sriov-network-operator spec: resourceName: intel_nics_dpdk deviceType: vfio-pci mtu: 9000 numVfs: 4 priority: 99 nicSelector: vendor: "8086" deviceID: "1572" pfNames: - eno3 rootDevices: - "0000:19:00.2" nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true"