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。
流程
创建
SriovNetworkNodePolicy
CR:将以下 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
SriovNetwork
CR:将以下 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.yaml
Copy 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.yaml
Copy 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 45h
Copy 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 /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,查看有关 CPU 分配的信息:
lscpu | grep NUMA
$ lscpu | grep NUMA
Copy 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 Cpus
Copy 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,7
Copy 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_node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出显示
NUMA
节点的数量,如0。
注意如果将
excludeTopology
规格设为True
,则所需资源可能存在于同一个 NUMA 节点上。