<p>lspci -t 是最接近物理拓扑图的命令,以缩进树状结构真实反映 Root Port→Switch→Endpoint 的硬件连接路径,不依赖驱动或 ACPI;其符号中 +- 表示直连下游,|+ 为同级分支, 为末尾标识,需结合 lspci -vv 和 numactl --hardware 等交叉验证物理归属。</p>

直接用 lspci -t 看 PCIe 物理连接树
这是最接近“物理拓扑图”的命令,输出是缩进式树状结构,真实反映 Root Port → Switch → Endpoint 的硬件级连接路径,不依赖驱动加载或 ACPI 表解析。
-
lspci -t每一级缩进代表一个桥接层级:最顶层是 CPU 直连的 Root Complex,中间是 PCIe Switch(可能带多个下游端口),叶子节点是 GPU、NVMe、网卡等终端设备 - 符号含义:
+-表示直连下游设备,|+表示同级分支,\是末尾标识;注意看哪些设备挂在同一 Bridge 下,它们共享带宽 - 常见误判:看到多个
PCI bridge就以为是多层扩展——其实很多主板把 PCH(南桥)伪装成 Bridge,它下面挂的 SATA/USB 并不走 PCIe 带宽,需结合lspci -vv -s 0000:00:1f.0查Secondary bus number和Max Payload判断是否真 PCIe
用 lscpu --extended -y 对齐逻辑 CPU 与物理 Socket/Core 编号
--extended 把每个逻辑 CPU 映射到 CORE/SOCKET/NODE 一行打出来,-y 强制使用硬件报告的真实物理 ID(如 APIC ID 或 DIE ID),不是内核重编号的逻辑索引。
- 输出中
CPU列是/proc/cpuinfo的processor值,SOCKET和CORE在-y模式下对应物理插槽和核心在封装内的绝对位置 - 关键陷阱:没加
-y时,SOCKET可能是 0,2,4 跳着编号(内核为 NUMA 优化重排),加了-y才能看出真实物理布局,比如 Intel 双路服务器里SOCKET=0全是 CPU0 封装,SOCKET=1全是 CPU1 封装 - 验证方式:对比
cat /sys/devices/system/cpu/cpu0/topology/physical_package_id和lscpu --extended -y | grep "^0"的 SOCKET 值,二者必须一致才算物理映射对齐
查 /sys/devices/system/node/ 和 numactl --hardware 确认内存控制器物理归属
NUMA 节点不是抽象概念,每个 nodeX 目录对应一个内存控制器(IMC)或 I/O 协同单元,numactl --hardware 输出的 node X cpus 和 node X size 是硬件探测结果,不是调度策略。
-
ls /sys/devices/system/node/列出所有 node 目录,每个目录下cpulist文件写明哪些逻辑 CPU 属于该节点,meminfo里的MemTotal是该控制器直连内存容量 - 注意
node distances表:对角线值(如 node0→node0=10)是基准延迟,若 node0→node1=35,则跨节点访存开销高,此时绑定进程到单一 node 更重要,而非单纯绑核 - 容易忽略:某些 AMD EPYC 系统启用 SNC(Sub-NUMA Clustering)后,
numactl --hardware显示 4 个 node,但实际只有 2 个内存控制器——需看dmesg | grep -i "numa: node"是否有SNC enabled提示,否则会误判物理控制器数量
组合命令定位设备物理位置(PCI + CPU + NUMA)
单看某一个命令只能知道局部,真正“物理拓扑映射图”需要把 PCIe 设备、CPU 插槽、NUMA 节点三者关联起来。例如确认一块 NVMe 是否直连 CPU 还是经 PCH 中转,以及它所属的内存节点。
- 先用
lspci -s 0000:01:00.0 -vv | grep -A5 "NUMA node"查设备绑定的 NUMA node(内核 5.10+ 支持) - 再用
lscpu --extended -y | awk '$4 == "0" {print $1}'(假设 node 0)列出该节点所有逻辑 CPU,然后查这些 CPU 的physical_package_id,确认它们属于哪个物理插槽 - 最后用
lspci -t找到该设备上游最近的 Root Port,比对其lspci -s 0000:00:01.0 -vv | grep "NUMA node",若 Root Port 和设备 node 一致,说明是 CPU 直连;若不一致,大概率经过 PCH 或 PCIe Switch - ARM 平台例外:部分 SoC(如 Ampere Altra)无传统 Root Port,
lspci -t显示扁平结构,此时必须依赖cat /sys/firmware/acpi/tables/SPD0或厂商文档确认 PCIe 根复合体物理归属
lspci -t + lscpu -y + numactl --hardware 交叉验证,不能只信其中任何一个输出。


















