第 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。
流程
创建一个
SriovNetworkPoolConfigCR,并将它保存为sriov-nw-pool.yaml,如下例所示:SriovNetworkPoolConfigCR 示例apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkPoolConfig metadata: name: worker namespace: openshift-sriov-network-operator spec: maxUnavailable: 1 nodeSelector: matchLabels: node-role.kubernetes.io/worker: "" rdmaMode: exclusive1 - 1
- 将 RDMA 网络命名空间模式设置为
exclusive。
运行以下命令来创建
SriovNetworkPoolConfig资源:$ oc create -f sriov-nw-pool.yaml创建一个
SriovNetworkNodePolicyCR,并将它保存为sriov-node-policy.yaml,如下例所示:SriovNetworkNodePolicyCR 示例apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: sriov-nic-pf1 namespace: openshift-sriov-network-operator spec: deviceType: netdevice isRdma: true1 nicSelector: pfNames: ["ens3f0np0"] nodeSelector: node-role.kubernetes.io/worker: "" numVfs: 4 priority: 99 resourceName: sriov_nic_pf1- 1
- 激活 RDMA 模式。
运行以下命令来创建
SriovNetworkNodePolicy资源:$ oc create -f sriov-node-policy.yaml创建一个
SriovNetworkCR,并将它保存为sriov-network.yaml,如下例所示:SriovNetworkCR 示例apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: sriov-nic-pf1 namespace: openshift-sriov-network-operator spec: networkNamespace: sriov-tests resourceName: sriov_nic_pf1 ipam: |- metaPlugins: | { "type": "rdma"1 }- 1
- 创建 RDMA 插件。
运行以下命令来创建
SriovNetwork资源:$ oc create -f sriov-network.yaml
验证
创建
PodCR,并将它保存为sriov-test-pod.yaml,如下例所示:运行时配置示例
apiVersion: v1 kind: Pod metadata: name: sample-pod annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name": "net1", "mac": "20:04:0f:f1:88:01", "ips": ["192.168.10.1/24", "2001::1/64"] } ] spec: containers: - name: sample-container image: <image> imagePullPolicy: IfNotPresent command: ["sleep", "infinity"]运行以下命令来创建测试 pod:
$ oc create -f sriov-test-pod.yaml运行以下命令登录到测试 pod:
$ oc rsh testpod1 -n sriov-tests运行以下命令,验证
hw-counters目录的路径是否存在:$ ls /sys/bus/pci/devices/${PCIDEVICE_OPENSHIFT_IO_SRIOV_NIC_PF1}/infiniband/*/ports/1/hw_counters/输出示例
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