8.7. 在 SR-IOV 中使用 DPDK
Data Plane Development Kit (DPDK) 提供了一组库和驱动程序,用于快速数据包处理。
您可以配置集群和虚拟机(VM),以通过 SR-IOV 网络运行 DPDK 工作负载。
8.7.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=""
$ oc label node <node_name> node-role.kubernetes.io/worker-dpdk=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个新的
MachineConfigPool清单,其中包含spec.machineConfigSelector对象中的worker-dpdk标签: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-launcherpod 的默认容器运行时类: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 注意编辑
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}]'$ 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 注意启用
AlignCPU可让 OpenShift Virtualization 请求两个额外的专用 CPU,在使用仿真程序线程隔离时将 CPU 总数引入到甚至奇偶校验。创建一个
SriovNetworkNodePolicy对象,并将spec.deviceType字段设置为vfio-pci: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-dpdkCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.7.2. 为 DPDK 工作负载配置项目 复制链接链接已复制到粘贴板!
您可以将项目配置为在 SR-IOV 硬件中运行 DPDK 工作负载。
先决条件
- 集群被配置为运行 DPDK 工作负载。
流程
为您的 DPDK 应用程序创建一个命名空间:
oc create ns dpdk-checkup-ns
$ oc create ns dpdk-checkup-nsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
SriovNetwork对象来引用SriovNetworkNodePolicy对象。创建SriovNetwork对象时,SR-IOV Network Operator 会自动创建一个NetworkAttachmentDefinition对象。SriovNetwork清单示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选:运行虚拟机延迟检查以验证网络是否已正确配置。
- 可选:运行 DPDK 检查,以验证命名空间是否已准备好 DPDK 工作负载。
8.7.3. 为 DPDK 工作负载配置虚拟机 复制链接链接已复制到粘贴板!
您可以在虚拟机 (VM) 上运行 Data Packet Development Kit (DPDK) 工作负载,以实现较低延迟和更高的吞吐量,以便在用户空间中更快地处理数据包。DPDK 使用 SR-IOV 网络进行基于硬件的 I/O 共享。
先决条件
- 集群被配置为运行 DPDK 工作负载。
- 您已创建并配置了运行虚拟机的项目。
流程
编辑
VirtualMachine清单,使其包含 SR-IOV 网络接口、CPU 拓扑、CRI-O 注解和巨页的信息:VirtualMachine清单示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 此注解指定为容器使用的 CPU 禁用负载均衡。
- 2
- 此注解指定容器使用的 CPU 配额被禁用。
- 3
- 此注解指定,容器使用的 CPU 禁用中断请求 (IRQ) 负载均衡。
- 4
- 虚拟机中的插槽数。此字段必须设置为
1,才能从相同的 Non-Uniform Memory Access (NUMA) 节点调度 CPU。 - 5
- 虚拟机中的内核数。这必须大于或等于
1。在本例中,虚拟机被调度有 5 个超线程或 10 个 CPU。 - 6
- 巨页的大小。x86-64 构架的可能值为 1Gi 和 2Mi。在这个示例中,请求大小为 1Gi 的 8 个巨页。
- 7
- SR-IOV
NetworkAttachmentDefinition对象的名称。
- 保存并退出编辑器。
应用
VirtualMachine清单:oc apply -f <file_name>.yaml
$ oc apply -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置客户机操作系统。以下示例显示了 RHEL 9 操作系统的配置步骤:
使用 GRUB 引导装载程序命令行界面配置巨页。在以下示例中,指定了 8 个 1G 巨页。
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-partitioningCopy 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.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 前两个 CPU (0 和 1) 被设置,用于保存任务,其余则隔离 DPDK 应用程序。
tuned-adm profile cpu-partitioning
$ tuned-adm profile cpu-partitioningCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
driverctl设备驱动程序控制工具覆盖 SR-IOV NIC 驱动程序:dnf install -y driverctl
$ dnf install -y driverctlCopy 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-pciCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 重启虚拟机以应用更改。