3.7. 排除 NUMA 感知调度的 SR-IOV 网络拓扑
要将 SR-IOV 网络资源的 Non-Uniform Memory Access (NUMA)节点排除到拓扑管理器,您可以在 SriovNetworkNodePolicy 自定义资源中配置 excludeTopology 规格。在 NUMA 感知 pod 调度过程中,使用此配置来实现更灵活的 SR-IOV 网络部署。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您已将 CPU Manager 策略配置为
static。有关 CPU Manager 的更多信息,请参阅附加资源部分。 -
您已将 Topology Manager 策略配置为
single-numa-node。 - 已安装 SR-IOV Network Operator。
流程
创建
SriovNetworkNodePolicyCR:将以下 YAML 保存到
sriov-network-node-policy.yaml文件中,替换 YAML 中的值以匹配您的环境:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果许多
SriovNetworkNodePolicy资源以相同的 SR-IOV 网络资源为目标,则SriovNetworkNodePolicy资源必须具有与excludeTopology规格相同的值。否则,冲突策略将被拒绝。运行以下命令来创建
SriovNetworkNodePolicy资源。成功输出列出了SriovNetworkNodePolicy资源的名称以及创建的状态。oc create -f sriov-network-node-policy.yaml
$ oc create -f sriov-network-node-policy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
SriovNetworkCR:将以下 YAML 保存到
sriov-network.yaml文件中,替换 YAML 中的值以匹配您的环境:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
SriovNetwork资源。成功输出列出了SriovNetwork资源的名称以及创建的状态。oc create -f sriov-network.yaml
$ oc create -f sriov-network.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 pod 并从上一步中分配 SR-IOV 网络资源:
将以下 YAML 保存到
sriov-network-pod.yaml文件中,替换 YAML 中的值以匹配您的环境:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 这是使用
SriovNetworkNodePolicy资源的SriovNetwork资源的名称。
运行以下命令来创建
Pod资源。预期输出显示Pod资源的名称以及创建的状态。oc create -f sriov-network-pod.yaml
$ oc create -f sriov-network-pod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,将
<pod_name>替换为 pod 的名称来验证 pod 的状态:oc get pod <pod_name>
$ oc get pod <pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE test-deployment-sriov-76cbbf4756-k9v72 1/1 Running 0 45h
NAME READY STATUS RESTARTS AGE test-deployment-sriov-76cbbf4756-k9v72 1/1 Running 0 45hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开目标 pod 的 debug 会话,以验证 SR-IOV 网络资源是否已部署到与内存和 CPU 资源不同的节点上。
运行以下命令,使用 pod 打开 debug 会话,将 <pod_name> 替换为目标 pod 名称。
oc debug pod/<pod_name>
$ oc debug pod/<pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/host设为 debug shell 中的根目录。debug pod 从 pod 中的/host中的主机挂载 root 文件系统。将根目录改为/host,您可以从主机文件系统中运行二进制文件:chroot /host
$ chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,查看有关 CPU 分配的信息:
lscpu | grep NUMA
$ lscpu | grep NUMACopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NUMA node(s): 2 NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,... NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,...
NUMA node(s): 2 NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,... NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,...Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /proc/self/status | grep Cpus
$ cat /proc/self/status | grep CpusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Cpus_allowed: ffff Cpus_allowed_list: 1,3,5,7
Cpus_allowed: ffff Cpus_allowed_list: 1,3,5,7Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出显示分配给
NUMA节点的 CPU (1、3、5 和 7),如NUMA node1。SR-IOV 网络资源可以使用另一个NUMA节点的 NIC,如NUMA node0。请注意,ffff十六进制值代表运行进程的 CPU 内核。cat /sys/class/net/net1/device/numa_node
$ cat /sys/class/net/net1/device/numa_nodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出显示
NUMA节点的数量,如0。注意如果将
excludeTopology规格设为True,则所需资源可能存在于同一个 NUMA 节点上。