在 64 位 Debian 上仅检测到 4GB RAM 中的 3.2GB

在 64 位 Debian 上仅检测到 4GB RAM 中的 3.2GB

我正在运行 Debian Squeeze (x64):

# uname -srvmo
Linux 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux

我有 2 条兼容的 2 GB DDR2G31M-S 主板.最大支持8GB:

在此处输入图片描述

因为这是服务器,所以我不太在意图形。所以我把它设置为最低。

Internal Graphics Mode Select: Auto
                               Enabled, 1MB   <--
                               Enabled, 8MB
DVMT Mode Select:              Fixed Mode     <--
                               Auto
    DVMT/FIXED Memory:         128MB          <--
                               256MB

在此处输入图片描述

但是,Linux 仅检测到 3.19GiB 内存:

# cat /proc/meminfo
MemTotal:        3350712 kB
...

看看E820 地图

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000cfdb0000 (usable)
[    0.000000]  BIOS-e820: 00000000cfdb0000 - 00000000cfdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000cfdc0000 - 00000000cfdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000cfdf0000 - 00000000cfe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

做一点数学题:

>>> ((0x9F800 - 0x10000) + (0xCF6B0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
3.240476608276367

我们得到的答案几乎相同。

我错过了什么?


我并不完全认同“PCI 地址空间”的说法。取出两个 2GB 内存条中的一个,设置屏幕显示 2048MB。

# cat /proc/meminfo
MemTotal:        2058432 kB

也就是 1.96GB。

E820 地图再次:

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 000000007fdb0000 (usable)
[    0.000000]  BIOS-e820: 000000007fdb0000 - 000000007fdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 000000007fdc0000 - 000000007fdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 000000007fdf0000 - 000000007fe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

还有数学……

>>> ((0x9F800 - 0x10000) + (0x7fdb0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
1.9973125457763672

所以我得到了 2GB / 2GB。 /proc/cpuinfo表明我的处理器支持 36 位物理寻址。2^36 = 64GB,我甚至还远远没有接近。


# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0

答案1

您需要打开内存重映射在 BIOS 中。否则,它不会重新映射 4GB 边界以上的内存,并且一些内存将被硬件映射覆盖。

答案2

PCI 也使用部分地址空间。PCI 卡和 PCI 设备都内置于主板(例如芯片组)中。

通常这意味着 4GB 中只有 3¼ 到 3½ GB 可用,即使您没有使用具有大量板载 RAM 的现代 GPU。

答案3

您的丢失的 RAM 由固件使用:

# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0

加起来:

echo $((181116 + 287784 + 2881812 + 843592))
4194304

所以你看,总计 4GB。以下是你报告丢失的约 800M:

firmware/hardware            843592          0     843592

相关内容