第 5 章 为 SR-IOV 配置 RDMA 子系统
远程直接内存访问(RDMA)允许在两个系统间直接访问内存,而无需涉及任一系统的操作系统。您可以在单根 I/O 虚拟化(SR-IOV)上配置 RDMA Container Network Interface (CNI),以启用容器间的高性能、低延迟通信。当您将 RDMA 与 SR-IOV 相结合时,您可以提供一个机制来公开 Mellanox 以太网设备的硬件计数器,以便在 Data Plane Development Kit (DPDK)应用程序中使用。
5.1. 配置 SR-IOV RDMA CNI 复制链接链接已复制到粘贴板!
在 SR-IOV 上配置 RDMA CNI。
这个过程只适用于 Mellanox 设备。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 SR-IOV Network Operator。
流程
创建一个
SriovNetworkPoolConfig
CR,并将它保存为sriov-nw-pool.yaml
,如下例所示:SriovNetworkPoolConfig
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 RDMA 网络命名空间模式设置为
exclusive
。
运行以下命令来创建
SriovNetworkPoolConfig
资源:oc create -f sriov-nw-pool.yaml
$ oc create -f sriov-nw-pool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
SriovNetworkNodePolicy
CR,并将它保存为sriov-node-policy.yaml
,如下例所示:SriovNetworkNodePolicy
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 激活 RDMA 模式。
运行以下命令来创建
SriovNetworkNodePolicy
资源:oc create -f sriov-node-policy.yaml
$ oc create -f sriov-node-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
SriovNetwork
CR,并将它保存为sriov-network.yaml
,如下例所示:SriovNetwork
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 创建 RDMA 插件。
运行以下命令来创建
SriovNetwork
资源:oc create -f sriov-network.yaml
$ oc create -f sriov-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
创建
Pod
CR,并将它保存为sriov-test-pod.yaml
,如下例所示:运行时配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建测试 pod:
oc create -f sriov-test-pod.yaml
$ oc create -f sriov-test-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令登录到测试 pod:
oc rsh testpod1 -n sriov-tests
$ oc rsh testpod1 -n sriov-tests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
hw-counters
目录的路径是否存在:ls /sys/bus/pci/devices/${PCIDEVICE_OPENSHIFT_IO_SRIOV_NIC_PF1}/infiniband/*/ports/1/hw_counters/
$ ls /sys/bus/pci/devices/${PCIDEVICE_OPENSHIFT_IO_SRIOV_NIC_PF1}/infiniband/*/ports/1/hw_counters/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
duplicate_request out_of_buffer req_cqe_flush_error resp_cqe_flush_error roce_adp_retrans roce_slow_restart_trans implied_nak_seq_err out_of_sequence req_remote_access_errors resp_local_length_error roce_adp_retrans_to rx_atomic_requests lifespan packet_seq_err req_remote_invalid_request resp_remote_access_errors roce_slow_restart rx_read_requests local_ack_timeout_err req_cqe_error resp_cqe_error rnr_nak_retry_err roce_slow_restart_cnps rx_write_requests
duplicate_request out_of_buffer req_cqe_flush_error resp_cqe_flush_error roce_adp_retrans roce_slow_restart_trans implied_nak_seq_err out_of_sequence req_remote_access_errors resp_local_length_error roce_adp_retrans_to rx_atomic_requests lifespan packet_seq_err req_remote_invalid_request resp_remote_access_errors roce_slow_restart rx_read_requests local_ack_timeout_err req_cqe_error resp_cqe_error rnr_nak_retry_err roce_slow_restart_cnps rx_write_requests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow