当我肯定有4.0 GiB时,为什么我的系统仅显示3.2 GiB的RAM


12

我安装了2x2 GiB记忆棒。从grub引导菜单
运行memtest86可以确认这一点。.memtest86没有报告错误。

但是,在运行Ubuntu 10.04的系统中,每检查一次我的可用内存,它只会报告大约3.2 GiB。

  • cat /proc/meminfo == 3320132 kB
  • System Monitor == 3.2 GiB
  • htop == 3242 MB
  • free -m == 3242 MB

谁得到了我缺少的 RAM?

更新的信息:我现在在相同的硬件上双重引导到Ubuntu 10.04的另一个版本(我忘记了我几个月前安装的版本,以备不时之需):)....它通过以下System Monitor方式报告3.9 GiB :

我已经/var/log/messageshttp://pastebin.ubuntu.com/629246/发布了我的最新信息。


您使用哪种内核?除非您使用“ bigmem”或“ x86-64”,否则系统可能看不到所有RAM。另外,某些BIOS选项会影响总RAM的可见性。使用/ var / log / messages日志(一开始)来查看如何映射内存区域。
mbaitoff 2011年

我不知道该怎么解释/var/log/messages,但我在这里发布了我的最新信息:pastebin.ubuntu.com/629246 ..也许有人可以对此加以解释:)
Peter.O 2011年

该日志是来自3.2Gb报告的系统还是来自3.9Gb报告的系统?
mbaitoff 2011年

日志中的第61,62行显示3.2Gb可用。
mbaitoff 2011年

我在4Gb机器上安装了带有x86-64(64位)的Ubuntu 10.04。它报告为3964 Mb(“ free -m”),因此您的第二个设置可以正确检测到您的RAM量。请检查您的第二个系统上安装了哪种内核。
mbaitoff 2011年

Answers:


19

32位地址空间意味着您有4GB地址的空间。理想情况下,内核喜欢能够映射所有物理内存,当前任务的所有内存以及它自己的所有内存。如果仅物理内存占用了所有可用的4GB,将无法正常工作。因此,物理内存分为始终映射的低内存和使用时必须映射的高内存。除非您正在运行修补的内核,否则在ix86架构上,128MB的地址空间专用于内核代码和数据结构,而896MB的地址专用于映射物理内存(总计1GB)。

当您的地址空间不超过您的总内存时,有关内存管理复杂性的后台阅读:

内核日志摘录:

BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
BIOS-e820: 00000000cdce0000 - 00000000cdce3000 (ACPI NVS)
BIOS-e820: 00000000cdce3000 - 00000000cdcf0000 (ACPI data)
BIOS-e820: 00000000cdcf0000 - 00000000cdd00000 (reserved)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
2404MB HIGHMEM available.
887MB LOWMEM available.
Zone PFN ranges:
DMA      0x00000000 -> 0x00001000
Normal   0x00001000 -> 0x000377fe
HighMem  0x000377fe -> 0x000cdce0

在这里,您有887MB的低内存:理论上最大的896MB减去几MB的DMA缓冲区(用于与硬件设备通信的内存区域)。

在您的物理内存中,3328MB映射到4GB以下的地址,而768MB映射在4GB以上的地址(0x100000000–0x130000000范围)。您无法访问这些768MB,这说明了为什么只有3242MB可用空间(4096MB的RAM减去768MB不可访问的减去9MB的DMA缓冲区再减去内核本身用于代码和数据的75MB)。我不知道为什么BIOS会将一些RAM映射到高于4GB的标记,但是作为数据点,我是从具有4GB RAM的PC上发布该内存的,RAM映射为0x100000000–0x130000000。

映射4GB以上的物理内存需要使用PAE。PAE会产生较小的性能开销(特别是,它在内存管理器中需要更大的数据结构),因此无法系统地启用它。默认的Ubuntu内核是在不支持PAE的情况下编译的。获取-generic-pae内核 安装linux-image-generic-pae,使其能够访问多达64GB的RAM。

TL,DR:Linux可以按预期运行。固件不是那么有用。获取启用了PAE的内核。


好吧,这很容易...谢谢Gilles :) ...了解日志肯定更难!...我已经安装了linux-image-2.6.32-32-generic-paehtop现在报告3990 MiB
Peter.O 2011年

1
机器将内存映射到4gb标记上方,以便可以将硬件内存(如您的视频内存)放置在4gb标记下方,以便它们可用于未启用pae的32位内核。
psusi 2011年

我想您所有的GB应该是GiB吗?
weynhamz 2012年

@TechliveZheng这是计算机技术站点,而不是物理站点。我所有的MB,GB等确实MIB,吉布等
吉尔“SO-停止作恶”

1

可能是因为Ubuntu的体系结构是i386(32位版本)。您跑步时会得到什么结果uname -a


uname -a... Linux DT9400 2.6.32-32-generic#62-Ubuntu SMP Wed Apr 20 21:54:21 UTC 2011 i686 GNU / Linux ...但是,正如我在自己的问题“更新的信息:”中提到的那样,另一个10.04 32位双启动安装程序显示为3.9 Gib ..这两个双启动系统都是从同一张CD安装的,但是当前运行的是不同的内核,并且安装了不同的程序...顺便说一句,这不是最近发生的情况,它已经呈现出3.2吉布多月..
Peter.O

您显然正在运行32位内核('i686')。顺便说一下,由于硬件保留了一些地址空间,因此3.9Gb已经意味着4Gb。
mbaitoff 2011年

是的,谢谢mbaitoff,我希望能有一些存储空间,但我认为0.8 GiB太多了,所以我想知道这里发生了什么。
Peter.O 2011年

AFAIK Ubuntu可以安装即使在x86上也可以使用大量RAM的PAE内核
Anton Barkovsky 2011年

3
我认为您只需要安装pae内核(linux-generic-pae和linux-headers-generic-pae),并且,如果愿意,可以删除通用内核。
安东·巴科夫斯基
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.