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.