使用 lstopo 查看服务器逻辑拓扑结构


装过 PC 电脑的朋友们对主板多多少少都有些了解。下图展示的是一个典型的 PC 电脑主板:

在进行系统性能分析时,了解硬件的拓扑关系非常重要。硬件拓扑指的是硬件组件之间的连接和布局方式,包括处理器、内存、缓存、总线等组件之间的物理连接方式和关系。通过了解硬件拓扑,可以更好地优化应用程序和系统配置,从而提高性能和效率。
hwloc 工具可以帮助我们可视化地了解服务器的硬件拓扑,有助于深入分析和优化性能。
服务器物理与逻辑结构示意图
笔者找了几张服务器的逻辑架构图:
1. 《浪潮英信服务器NF5688M6技术白皮书》
NF5688M6物理结构(示例:8盘配置)

序号 

名称 

序号 

名称 

Switch抽屉 

主板抽屉 

主板+OCP模组 

PSU × 6 

风扇模组 × 12 

风扇板 × 3 

互联中板 

6U机箱 

Switch板+Riser+硬盘模组(8盘位) 

10 

NVIDIA® HGX GPU模组 

11 

GPU模组抽屉 




NF5688M6逻辑结构(示例:8盘配置) 

看了逻辑示意图之后,我们就能理解 NUMA 架构以及如何通过绑定 CPU 来实现更好的性能了。
当然了翻找技术白皮书是一种了解服务器结构的方式,那在 Linux 上我们有没有什么工具吗?答案当然是有了,那就是:Hardware Locality (hwloc)。
hwloc 介绍
hwloc 是一个命令行套件,它收集了底层处理器架构的各种属性,例如 NUMA 内存节点、多级缓存、处理器插槽、处理器内核、PCI 设备/桥等。
地址:https://hwloc.readthedocs.io/en/stable/
安装 hwloc
#CentOS 上安装yum -y install hwloc#Ubuntu 上安装apt-get install hwloc
lstopo 介绍
lstopo 是 hwloc 的主要命令行工具,用于展示硬件拓扑结构。它会生成一个图形化的拓扑图,显示处理器、缓存、内存和其他设备的层次结构和拓扑关系。
常用的命令方式:
lstopo --logical --output-format svg > xxx.svg
例如:

图形化可以让我们对拓扑结构有个直观的感受,但是它并不支持查看详细属性,因此如果要看详细信息,我们还是需要使用如下方式:
lstopo --logical --verbose --output-format xml > xxx.xml
接下来我们就可以对图中的内容做一个详细的分析,我们举例说明。
CPU 结构

处理器 package #0 包含:
L3 缓存(L3 L#0):具有 105MB 的容量;
每个 core 有一个 L2 缓存(L2 L#n):具有 2048KB 容量;
L1 数据缓存(L1d L#n):每个 L1 数据缓存具有 48KB 的容量;
L1 指令缓存(L1i L#n):每个 L1 指令缓存具有 32KB 的容量;
PU 处理单元(PU L#n):每个 Core 有两个处理单元。
PCIe 结构

这里的 63 代表的是 PCIe 的 link 速度,一般单位是:GT/s
以PCIe 2.0为例,每秒5GT(Gigatransfer)原始数据传输率,编码方式为8b/10b(每10个比特只有8个有效数据),即有效带宽为4Gb/s = 500MByte/s。
对应的 xml 内容:
<object type="PCIDev" gp_index="604" pci_busid="0000:3a:00.0" pci_type="0302 [10de:2330] [10de:16c1] a1" pci_link_speed="63.015385">...</object>
关于 PCIe 更多信息可以参考:https://zh.wikipedia.org/wiki/PCI_Express
GPU 卡信息
<object type="OSDev" gp_index="722" name="opencl0d2" subtype="OpenCL" osdev_type="5"> <info name="Backend" value="OpenCL"/> <info name="OpenCLDeviceType" value="GPU"/> <info name="GPUVendor" value="NVIDIA Corporation"/>                  <info name="GPUModel" value="NVIDIA xxx"/> <info name="OpenCLPlatformIndex" value="0"/> <info name="OpenCLPlatformName" value="NVIDIA CUDA"/> <info name="OpenCLPlatformDeviceIndex" value="2"/> <info name="OpenCLComputeUnits" value="132"/> <info name="OpenCLGlobalMemorySize" value="xxx"/></object>
总结
本文介绍了使用 hwloc 工具查看服务器的逻辑拓扑,帮助我们深入了解服务器的硬件结构,以便更好地进行性能调优。
到顶部