8.6. 在 SR-IOV 中使用 DPDK
Data Plane Development Kit (DPDK) 提供了一组库和驱动程序,用于快速数据包处理。
您可以配置集群和虚拟机(VM),以通过 SR-IOV 网络运行 DPDK 工作负载。
8.6.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。
使用自定义角色标记计算节点的子集,例如
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-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 的计算节点使用 Simultaneous 多线程 (SMT),请通过编辑
HyperConverged
CR 来启用AlignCPUs
enabler: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.6.2. 为 DPDK 工作负载配置项目 复制链接链接已复制到粘贴板!
您可以将项目配置为在 SR-IOV 硬件中运行 DPDK 工作负载。
先决条件
- 集群被配置为运行 DPDK 工作负载。
流程
为您的 DPDK 应用程序创建一个命名空间:
oc create ns dpdk-checkup-ns
$ oc create ns dpdk-checkup-ns
Copy 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.6.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>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置客户机操作系统。以下示例显示了 RHEL 8 OS 的配置步骤:
使用 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-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 前两个 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
- 重启虚拟机以应用更改。