游乐游手机版
首页/系统平台/文章详情

Linux查看物理内存拓扑结构图的方法

时间:2026-08-13 08:03
Linux 系统本身并没有提供一个内置命令,能够直接把物理内存拓扑结构图完整输出出来。想真正看清这类信息,通常需要把 numactl --hardware(用于查看静态 NUMA 划分)、lscpu --extended(用于对应 CPU 与节点的物理位置)、 sys devices system

Linux 系统本身并没有提供一个内置命令,能够直接把物理内存拓扑结构图完整输出出来。想真正看清这类信息,通常需要把 numactl --hardware(用于查看静态 NUMA 划分)、lscpu --extended(用于对应 CPU 与节点的物理位置)、/sys/devices/system/node/(用于查看运行时内存状态)结合起来交叉验证;至于 lsblkfree,它们本身并不包含物理内存拓扑相关信息。

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

Linux 并没有内置工具可以直接生成一张带连线、可视化节点关系的“物理内存拓扑图”。所谓“物理内存拓扑结构图”,本质上是 NUMA 节点、CPU 绑定关系以及内存分布三者形成的空间映射,因此必须通过多个命令组合分析,才能拼出完整拓扑结构。

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

这是最接近“内存拓扑底图”的命令,它读取的是 BIOS/UEFI 在系统启动阶段上报的硬件拓扑信息,不会随着运行时状态变化:

  • available: 2 nodes 表示当前主板上存在两个 NUMA 节点,而不是两个逻辑 CPU
  • node 0 cpus: 0-15node 1 cpus: 16-31 表示哪些逻辑 CPU 在物理上分别归属于哪个节点
  • node 0 size: 64512 MB 表示该节点本地物理内存总量,注意它并不等同于 /proc/meminfo 里的 MemTotal
  • node distances: 10 21 这一行表示 node0 访问 node1 的代价为 21(对角线固定为 10),当数值大于 20 时,通常意味着跨 NUMA 节点访问延迟明显上升

⚠️ 常见误区:numactl --hardware 不会显示 PCIe 设备挂载在哪个节点,也不能反映当前进程实际分配到了哪部分内存——它只能告诉你“硬件层面允许如何划分”,而不是“当前系统正在如何使用”。

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

如果只看 numactl --hardware,你只知道有哪些节点,却无法准确知道每个逻辑 CPU 落在哪个物理位置;lscpu --extended 会把 CPU、核心、插槽和 NUMA 节点信息按行对齐,是进行绑核、性能调优前的重要参考:

  • 输出中同一个 SOCKET + 同一个 CORE 如果出现两次(例如 CPU 0 和 CPU 16),大概率说明这是超线程关系,它们通常共享 L1/L2 缓存
  • 如果某一行的 NODE 为空或显示为 -,说明内核未能识别其 NUMA 归属,这种情况常见于老旧固件或部分 ARM 平台,此时可以回退到 /sys/devices/system/cpu/cpu*/topology/,手动查看 topology/physical_package_idtopology/node
  • 在虚拟机环境中,NODE 列可能全部显示为 0 或固定值,这并不能代表真实的物理 NUMA 结构,需要结合宿主机上的 numactl --hardware 一并确认

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

上面两个命令更多是静态信息,而这里才是真正“动态”的拓扑数据来源,目录下的内容会随着内存回收、页面迁移等行为实时更新:

  • cat /sys/devices/system/node/node0/meminfo | grep -E "MemTotal|MemFree|Node" 可以查看 node0 当前实际可用内存,这比 numactl --hardware 中的 size 更接近真实运行状态
  • cat /sys/devices/system/node/node0/cpulist 可以显示当前允许调度到该节点的 CPU 列表,这个结果可能会因为热插拔或 isolcpus 内核参数而动态变化
  • 如果发现 node0 的 MemFree 很低,而 node1 仍有大量空闲内存,往往说明应用没有启用 numactl --interleave=all,或者没有正确进行 CPU 绑核,导致 NUMA 内存局部性失衡

⚠️ 需要注意:/sys/devices/system/node/ 下的路径名称(例如 node0)对应的是逻辑节点 ID,并不是物理插槽编号。即使某些 BIOS 已关闭 NUMA,这里依旧可能出现多个 node 目录;此时应通过 dmesg | grep -i numa 进一步确认,内核是否真正启用了 NUMA 支持。

不要把 lsblkfree 当成内存拓扑工具——它们并不涉及物理内存拓扑

lsblk 用于查看磁盘和块设备层级,free 只用于统计内存页框总量,这两个命令都不会提供地址空间、NUMA 节点、CPU 绑定关系等任何物理内存拓扑信息:

  • free -h 输出中的 MemTotal 表示内核可管理的全部物理页总和,不区分 NUMA 节点,也不包含 reserved 区域
  • lsblk 中的 PKNAME 字段只反映块设备之间的从属关系,与物理内存地址或内存拓扑完全无关
  • 如果你想真正梳理出 Linux 物理内存拓扑结构,就需要手工把 numactl --hardware 的节点内存容量、lscpu --extended 的 CPU 分布,以及 /sys/devices/system/node/*/meminfo 的实时使用量叠加分析——系统没有一条命令能一键生成完整拓扑图,关键在于建立这三层数据之间的对应关系

还有一个经常被忽视的重点:如果 BIOS 设置中的 “Node Interleaving” 开关被开启,numactl --hardware 显示出来的节点内存分布可能会看起来很均匀,但实际内存访问延迟仍然是非均匀的。此时判断 Linux NUMA 拓扑是否真实有效,最可靠的依据依然是 node distances

来源:https://www.php.cn/faq/2978839.html
上一篇Linux查看磁盘读写请求合并效率与扇区利用率的方法 下一篇Linux如何查看CPU架构位宽和系统位数信息
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Mac微信输入法如何开启剪贴板功能设置
系统平台 · 2026-08-14

Mac微信输入法如何开启剪贴板功能设置

必须开启微信输入法的剪贴板同步功能才能实现跨设备复制粘贴,需先设为默认输入法,开启本地剪贴板历史记录,再通过匹配码或扫码完成Mac与iPhone配对。如果想在 Mac 上通过微信输入法实现跨设备复制粘贴,第一步就得先在微信输入法里把剪贴板同步功能打开;不然的话,iPhone 或 iPad 上刚复制的

Win10无法打开.exe文件怎么办
系统平台 · 2026-08-14

Win10无法打开.exe文件怎么办

双击 exe文件没有反应时,建议按顺序排查并修复:先使用管理员命令重置文件关联(assoc 和 ftype),再手动修正注册表中的两个关键键值,或直接导入标准 reg 脚本;随后检查并解除文件锁定;最后运行 SFC 和 DISM 修复系统组件。如果在 Windows 10 中双击 exe 文件完

Mac屏幕右下角实时翻译怎么关闭
系统平台 · 2026-08-14

Mac屏幕右下角实时翻译怎么关闭

如果你想把 Mac 屏幕右下角弹出的实时翻译浮窗马上关闭,通常按照这三步操作最有效:第一,截图后先不要点击右下角的预览缩略图;如果已经误点进入编辑界面,直接按 Esc 键退出。第二,前往系统设置,关闭“键盘→服务→文本→翻译”。第三,再将“辅助功能→实况文本”以及“信息→信息效果→建议翻译”一起关闭

Windows 10 桌面右键一直转圈怎么办
系统平台 · 2026-08-14

Windows 10 桌面右键一直转圈怎么办

Windows 10 桌面右键一直转圈,问题根源通常不在“系统突然变慢”,而是在 Shell 扩展加载过程中发生卡顿。处理这类故障,建议按顺序排查:先重启资源管理器,释放被占用或卡死的线程;接着使用 ShellExView 禁用可疑的 Context Menu 扩展,确认是否为某个右键菜单项导致响应

Android中View与ViewGroup的概念解析
系统平台 · 2026-08-14

Android中View与ViewGroup的概念解析

本节引言 告别第一章之后,我们正式进入第二章——Android 中 UI(User Interface,用户界面)组件的详细讲解。这个小节要重点学习的,是所有界面控件的基础父类:View 和 ViewGroup!这里结合官方文档的核心内容,来帮助大家快速理解 Android UI 开发中最重要的两个