Linux中如何确认物理内存是否被隔离

要确认Linux系统中物理内存是否被隔离,可以通过以下步骤进行排查:


1. 检查内核启动参数

查看是否使用memmap参数保留内存:

1
2
3
cat /proc/cmdline
# 或检查GRUB配置文件
grep memmap /boot/grub/grub.cfg

若有类似memmap=2G$512M的配置,表示从512M处保留2G内存。


2. 分析系统启动日志(dmesg)

查找内存保留或隔离的提示:

1
dmesg | grep -iE "memory|reserved|isolated"

输出可能包含保留内存的范围,如:

1
[    0.000000] BIOS-e820: [mem 0x00000000a0000000-0x00000000bfffffff] reserved

3. 查看物理内存映射(/proc/iomem)

检查是否有内存被标记为保留:

1
cat /proc/iomem | grep -i reserved

输出示例:

1
a0000000-bfffffff : Reserved

4. 对比物理内存总量

确认系统识别内存与实际是否一致:

1
2
3
4
# 查看实际物理内存总量(需root)
dmidecode -t memory | grep -i size
# 对比系统可用内存
grep MemTotal /proc/meminfo

MemTotal小于实际内存,可能存在保留或隔离。


5. 检查NUMA配置

查看NUMA节点的内存分布:

1
numactl --hardware

若某些节点内存显著减少或标记为no available,可能涉及隔离。


6. 排查大页内存(HugePages)

确认是否分配了大页内存:

1
grep HugePages_Total /proc/meminfo

大页内存会从可用内存中预先划出。


7. 检查内核保留内存

查看内核启动时保留的内存区域:

1
2
dmesg | grep -i "kernel command line"
dmesg | grep -i "reserved memory"

8. 验证CGroup内存限制(若使用)

检查CGroup是否限制内存使用:

1
2
# 查看CGroup内存限制(示例路径)
cat /sys/fs/cgroup/memory/your_group/memory.limit_in_bytes

若限制值小于物理内存,可能涉及逻辑隔离。


总结

  • 物理内存隔离通常通过内核参数(如memmap)或硬件保留实现,需检查/proc/iomemdmesg
  • 逻辑隔离可能通过CGroup或NUMA策略实现,需检查对应配置。
  • 若发现内存差异,结合dmidecode/proc/meminfo进一步验证。