我有一台 8GB 内存的机器(BIOS 可以看到它,所以我的主板和 CPU 支持它),我在上面安装了 CentOS 6.3。启动时,它只看到 3.1GB。
uname says: 2.6.32-279.1.1.el6.x86_64 #1 SMP
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cf65f000 (usable)
BIOS-e820: 00000000cf65f000 - 00000000cf6e8000 (ACPI NVS)
BIOS-e820: 00000000cf6e8000 - 00000000cf6ec000 (usable)
BIOS-e820: 00000000cf6ec000 - 00000000cf6ff000 (ACPI data)
BIOS-e820: 00000000cf6ff000 - 00000000cf700000 (usable)
dmesg | grep -i memory 说:
initial memory mapped : 0 - 20000000
init_memory_mapping: 0000000000000000-00000000cf700000
Reserving 129MB of memory at 48MB for crashkernel (System RAM: 3319MB)
PM: Registered nosave memory: 000000000009f000 - 00000000000a0000
PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000
PM: Registered nosave memory: 00000000000e0000 - 0000000000100000
PM: Registered nosave memory: 00000000cf65f000 - 00000000cf6e8000
PM: Registered nosave memory: 00000000cf6ec000 - 00000000cf6ff000
Memory: 3184828k/3398656k available (5152k kernel code, 1016k absent, 212812k reserved, 7166k data, 1260k init)
please try 'cgroup_disable=memory' option if you don't want memory cgroups
Initializing cgroup subsys memory
Freeing initrd memory: 16136k freed
Non-volatile memory driver v1.3
agpgart-intel 0000:00:00.0: detected 8192K stolen memory
crash memory driver: version 1.1
Freeing unused kernel memory: 1260k freed
Freeing unused kernel memory: 972k freed
Freeing unused kernel memory: 1732k freed
更新:Memtest 看到全部 8GB,也dmidecode -t 17 | grep Size
一样。
但free -m
仍然只看到 3.1 GB。
问题:如何修复/修改系统以查看所有 8GB RAM?
提前致谢!
答案1
看起来您正在运行 64 位内核。您不需要安装 PAE 内核。
我最初在这里有一个答案,解释如何安装 PAE 内核,因为起初我不知何故忽略了你有一个 64 位内核的事实。
我对 BIOS 提供的物理 RAM 映射的(非常有限的)解释是,BIOS 仅告诉操作系统大约 3480223744 个可寻址位,或大约 3.2GB。如果减去保留位,则剩下 3.1GB。
有些人报告说在他们的 dmesg 输出中看到了以下内容:
WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13040MB of RAM
您可以运行dmesg | grep -i memory
并查找类似的警告消息吗?
答案2
进入您的 BIOS 设置并启用内存重映射选项。
答案3
我以为我之前的建议(已转化为评论)已经非常清楚了,但显然并非如此。
尝试 #2:您可以使用某些 CPU 和某些 BIOS 来打开或关闭 CPU 的 64 位。BIOS 通常不关心(检查)在 BOOT 期间报告 RAM 时 CPU 的设置,因此将显示物理上存在的内容。但操作系统不同。操作系统将检查启用 64 位的 CPU。如果它没有看到(因为 BIOS 中禁用了 64 位 CPU),那么您将获得 32 位(最大 4Gb)内存映射。在这种情况下,任何超过 4Gb 32 位限制的物理 RAM 都无法使用,因为操作系统无法对其进行寻址。(又称:找不到它。)
内存映射中的内存地址就像电话簿中的电话号码。如果电话簿已满,并且您的电话号码比电话号码多得多,那么所有这些多余的电话都没有电话号码 - 因此即使它们工作正常,您也无法拨打它们。(这与“无法寻址”的意思相同。“无法寻址”基本上意味着“无法分配 ID 号。”)
。
答案4
这是一个长远的目标,但看看内核启动参数,它可以配置为告诉内核只识别一定数量的内存。
cat /proc/cmdline
查找任何与内存相关的设置。mem=
将是一个非常明显的赢家,但还有其他。查看https://www.kernel.org/doc/Documentation/kernel-parameters.txt
还要查看引导加载程序配置。它可以指定相同的内容,但涵盖虚拟化可能性(例如,如果此系统实际上是 dom0 或其他一些棘手问题)。在带有 GRUB 的 RHEL 上尝试:cat /boot/grub/grub.conf