Linux本身并没有一个内置命令,可以直接把物理内存拓扑图完整输出出来。想看清楚这件事,通常得把 numactl --hardware(用来查看静态 NUMA 划分)、lscpu --extended(用来对齐 CPU 与节点的物理位置)、/sys/devices/system/node/(用来查看运行时内存状态)这三者放在一起交叉验证;至于 lsblkfree,它们并不涉及拓扑信息。

Linux怎么查看具体的物理内存拓扑结构图

Linux 没有内置命令能直接输出一张带连线、可视化节点关系的“拓扑图”,所谓“物理内存拓扑结构图”本质上是 NUMA 节点 + CPU 绑定 + 内存分布三者的空间映射关系,必须靠多个命令交叉验证拼出全貌。

numactl --hardware 看 NUMA 节点与内存的静态物理划分

这是最接近“拓扑底图”的命令,它读取 BIOS/UEFI 在启动时上报的硬件拓扑,不随运行时变化:

⚠️ 容易踩的坑:numactl --hardware 不显示 PCIe 设备挂载在哪一节点,也不反映当前进程实际分配到了哪块内存——它只告诉你“硬件允许怎么分”,不是“现在正在怎么用”。

lscpu --extended=CPU,SOCKET,CORE,NODE 对齐 CPU 与 NUMA 节点物理位置

单看 numactl --hardware 只知道节点有谁,但不知道每个逻辑 CPU 具体落在哪;lscpu --extended 把 CPU、核心、插槽、NUMA 节点四者对齐在一行,是绑定进程前必查的依据:

/sys/devices/system/node/ 查运行时内存使用与节点状态

上面两个命令都是静态快照,而这里才是“活”的拓扑数据源,所有文件内容随内存回收、页面迁移实时更新:

⚠️ 注意:/sys/devices/system/node/ 下面的路径名(比如 node0),对应的是逻辑节点 ID,并不是物理插槽编号。即便某些 BIOS 已经关闭了 NUMA,这里依然可能看到多个 node 目录;这时就要用 dmesg | grep -i numa 去确认,内核到底有没有真正启用 NUMA 支持。

别信 lsblkfree ——它们根本不涉及物理内存拓扑

lsblk 管磁盘层级,free 只统计页框总量,两者都完全不提供地址空间、NUMA 节点、CPU 绑定等任何物理内存拓扑信息:

最常被忽略的一点:BIOS 设置里的 “Node Interlea ving” 开关,一旦开启,numactl --hardware 显示的节点内存会变成均匀分布,但实际访问延迟仍是非均匀的,这时候看 node distances 才是唯一可信依据。

本文转载于:https://www.php.cn/faq/2978839.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。