2.5. 简单 Compute 节点 CPU 分区和文件系统检查
先决条件
在部署的计算节点上运行此命令,并记下 cpu masks 如何映射到 TripleO Heat 模板值:
$ 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
pid 1's current affinity list: 0,1,20,21
2.5.2. 检测 PMD 线程 复制链接链接已复制到粘贴板!
要查看 PMD 线程,请使用以下命令:输出应反映 Tripleo 参数 OvsPmdCoreList 的值。OvsDpdkCoreList 或 HostIsolatedCoreslist 的值不应与 Tripleo 参数的值重叠:
$ ps -T -o spid,comm -p $(pidof ovs-vswitchd) |grep '\<pmd' |while read spid name; do echo $name $(taskset -p -c $spid); done
pmd44 pid 679318's current affinity list: 3
pmd45 pid 679319's current affinity list: 23
pmd46 pid 679320's current affinity list: 22
pmd47 pid 679321's current affinity list: 2
2.5.3. 检测 NUMA 节点 复制链接链接已复制到粘贴板!
为了获得最佳性能,请确保实例的物理网络适配器、PMD 线程和固定 CPU 都在同一个 NUMA 节点上。如需更多信息,请参阅: CPU 和 NUMA 节点。
以下是检查 NUMA 分配的简单练习。
检查计算节点上实例的 vhu 端口:
$ sudo virsh domiflist 1 Interface Type Source Model MAC ------------------------------------------------------- vhu24e6c032-db vhostuser - virtio fa:16:3e:e3:c4:c2检查为该端口提供服务并记录 NUMA 节点的 PMD 线程:
$ sudo ovs-appctl dpif-netdev/pmd-rxq-show pmd thread numa_id 0 core_id 2: isolated : false port: vhu24e6c032-db queue-id: 0 pmd usage: 0 % port: vhu94ccc316-ea queue-id: 0 pmd usage: 0 %查找实例的物理固定 cpu。例如,注意此实例的端口位于 cpu 2 上,并且实例由 cpus 34 和 6 服务。
$ sudo virsh dumpxml 1 | grep cpuset <vcpupin 1 vcpu='0' cpuset='34'/> <emulatorpin cpuset='6'/>检查每个 NUMA 节点的内核。请注意,为实例提供服务(34,6)的 CPU 位于同一 NUMA 节点(0)上。
$ 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
另外,不受 OVS DPDK 管理的网络适配器在此有一个条目,用于指示它们所属的 NUMA 节点:
$ sudo cat /sys/class/net/<device name>/device/numa_node
另外,您可以通过查询 PCI 地址(即使由 OVS DPDK 管理的)来查看网络适配器的 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.
2.5.4. 检测隔离 CPU 复制链接链接已复制到粘贴板!
使用以下命令来显示隔离的 CPU。其输出应当与 TripleO 参数 IsolCpusList 的值相同。
$ 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
vcpu_pin_set=4-19,24-39
2.5.6. 确认 Huge Pages 配置 复制链接链接已复制到粘贴板!
检查计算节点上的巨页配置。
[root@compute-0 ~]# cat /sys/devices/system/node/node*/meminfo | grep -i huge
Node 0 AnonHugePages: 4096 kB
Node 0 HugePages_Total: 16
Node 0 HugePages_Free: 11
Node 0 HugePages_Surp: 0
Node 1 AnonHugePages: 8192 kB
Node 1 HugePages_Total: 16
Node 1 HugePages_Free: 15
Node 1 HugePages_Surp: 0
如果没有配置巨页或已耗尽,请参阅 KernelArgs。