2.5. 简单 Compute 节点 CPU 分区和文件系统检查
先决条件
在部署的计算节点上运行此命令,并记下 cpu masks 如何映射到 TripleO Heat 模板值:
sudo ovs-vsctl get Open_vSwitch . other_config
$ sudo ovs-vsctl get Open_vSwitch . other_config
{dpdk-init="true", dpdk-lcore-mask="300003", dpdk-socket-mem="3072,1024", pmd-cpu-mask="c0000c"}
注意以下几点:
-
DPDK-lcore-mask
映射到 TripleO Heat Templates 中的OvsDpdkCoreList
。 -
DPDK-socket-mem
映射到 TripleO Heat Templates 中的OvsDpdkSocketMemory
。 TripleO Heat Templates 中的
PMD-cpu-mask
映射到OvsPmdCoreList
。要将这些 CPU 掩码转换为十进制值,可以将其协调回 TripleO Heat 模板和实际系统值 see: 如何将十六进制 CPU 掩码转换为位掩码并识别掩码的 CPU?
2.5.1. 检测 CPU 复制链接链接已复制到粘贴板!
要检测 CPU for pid 1,请使用以下命令。这些内核不应运行 PMD 或 Nova vCPU:
taskset -c -p 1
$ taskset -c -p 1
pid 1's current affinity list: 0,1,20,21
2.5.2. 检测 PMD 线程 复制链接链接已复制到粘贴板!
要查看 PMD 线程,请使用以下命令:输出应反映 Tripleo 参数 OvsPmdCoreList
的值。OvsDpdkCoreList
或 HostIsolatedCoreslist
的值不应与 Tripleo 参数的值重叠:
2.5.3. 检测 NUMA 节点 复制链接链接已复制到粘贴板!
为了获得最佳性能,请确保实例的物理网络适配器、PMD 线程和固定 CPU 都在同一个 NUMA 节点上。如需更多信息,请参阅: CPU 和 NUMA 节点。
以下是检查 NUMA 分配的简单练习。
检查计算节点上实例的 vhu 端口:
sudo virsh domiflist 1
$ sudo virsh domiflist 1 Interface Type Source Model MAC ------------------------------------------------------- vhu24e6c032-db vhostuser - virtio fa:16:3e:e3:c4:c2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查为该端口提供服务并记录 NUMA 节点的 PMD 线程:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查找实例的物理固定 cpu。例如,注意此实例的端口位于 cpu 2 上,并且实例由 cpus 34 和 6 服务。
sudo virsh dumpxml 1 | grep cpuset
$ sudo virsh dumpxml 1 | grep cpuset <vcpupin 1 vcpu='0' cpuset='34'/> <emulatorpin cpuset='6'/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查每个 NUMA 节点的内核。请注意,为实例提供服务(34,6)的 CPU 位于同一 NUMA 节点(0)上。
lscpu | grep ^NUMA
$ lscpu | grep ^NUMA NUMA node(s): 2 NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38 NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
另外,不受 OVS DPDK 管理的网络适配器在此有一个条目,用于指示它们所属的 NUMA 节点:
sudo cat /sys/class/net/<device name>/device/numa_node
$ sudo cat /sys/class/net/<device name>/device/numa_node
另外,您可以通过查询 PCI 地址(即使由 OVS DPDK 管理的)来查看网络适配器的 NUMA 节点:
sudo lspci -v -s 05:00.1 | grep -i numa
$ sudo lspci -v -s 05:00.1 | grep -i numa
Flags: bus master, fast devsel, latency 0, IRQ 203, NUMA node 0
这些练习演示了 PMD、实例和网络适配器都位于 NUMA 0 上,这是性能最佳。从 openvswitch 日志(位于 /var/log/openvswitch
)中的跨 NUMA 轮询,寻找类似于以下内容的日志条目:
dpif_netdev|WARN|There's no available (non-isolated) pmd thread on numa node 0. Queue 0 on port 'dpdk0' will be assigned to the pmd on core 7 (numa node 1). Expect reduced performance.
dpif_netdev|WARN|There's no available (non-isolated) pmd thread on numa node 0. Queue 0 on port 'dpdk0' will be assigned to the pmd on core 7 (numa node 1). Expect reduced performance.
2.5.4. 检测隔离 CPU 复制链接链接已复制到粘贴板!
使用以下命令来显示隔离的 CPU。其输出应当与 TripleO 参数 IsolCpusList
的值相同。
cat /etc/tuned/cpu-partitioning-variables.conf | grep -v ^# isolated_cores=2-19,22-39
$ cat /etc/tuned/cpu-partitioning-variables.conf | grep -v ^#
isolated_cores=2-19,22-39
2.5.5. 检测分配给 Nova 实例的 CPU 复制链接链接已复制到粘贴板!
使用以下命令,显示专用于 Nova 实例的 CPU。这个输出应该和没有轮询模式驱动程序(PMD)CPU 的 isolcpus 的值相同:
grep ^vcpu_pin_set /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf
$ grep ^vcpu_pin_set /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf
vcpu_pin_set=4-19,24-39
2.5.6. 确认 Huge Pages 配置 复制链接链接已复制到粘贴板!
检查计算节点上的巨页配置。
如果没有配置巨页或已耗尽,请参阅 KernelArgs。