Why does Ubuntu 10.10 amd64 (Maverick Meerkat) not address more of 3 GB RAM?

My machine is a Toshiba P205-S6287 Intel Centrino Duo 64 bits processor and 4 GB RAM at 667 MHz.

According to the detailed specifications, the notebook runs a 64-bit Core 2 Duo T5300 processor and has a 945GM Express chipset.

  • 3
    It's a mystery, can you report the output of uname -a, the output of free -m and also confirm that you have more than 3GB of ram active by looking at your dmidecode. Jan 8 '11 at 8:08
  • 1
    And are you sure you have 64bit version of Ubuntu. What does uname -a say? Jan 8 '11 at 8:09
  • same problem, optiplex gx620 5 Gb Ram
    – Knock_
    Jan 12 '11 at 21:02

This is due to the Mobile Intel 945GM Express in your laptop.

I own a Thinkpad T60, which uses the same chipset. It was one of the first northbridges from intel for the Core2Duo 64-bit CPUs. They failed in designing it.

The chipset can only theoretically address 4GB of RAM, yet also has to address other hardware (I/O memory). It reserves the upper 1GB memory range for that. The 64bit logical memory address support in the Linux kernel doesn't help, because the mainboard and northbridge only provide for a 32bit physical address bus to the CPU. And there is no workaround.

There is a theoretical option in devising memory bank switching. Yet the kernel does not support it, nor would it make sense on the x86 architecture. The i810 memory controller of the 945GM is probably too lazy for that to make sense.


My short answer is: likely because the BIOS designer was sloppy.

The long anwser is:

Although you have 4GB RAM installed, you can not expect to have 4GB of usable RAM available with the Intel 945GM chipset. This is a chipset limitation. You can tell this from the chipset's specification:


Quote from section 9.2: "The Memory Controller Hubs provides a maximum DRAM address decode space of 4 GB. The MCH does not remap APIC or PCI Express memory space. This means that as the amount of physical memory populated in the system reaches 4 GB, there will be physical memory that exists yet is non-addressable and therefore unusable by the system."

The BIOS must reserve address ranges for several resources, i.e. the BIOS itself, PCI and PCI Express memory mapped space, internal graphics, APIC memory space and other memory windows for I/O access. All these address ranges have to lie within the 4GB address space and as such occupy address ranges that are not available to system memory any longer. You could say these resources "steal" physical RAM memory space.

That being said, if you have 4GB installed you can expect to have more than 3GB system memory available.

The amount of physical memory that is available to the system depends on how much effort the BIOS designer puts into arranging theses address ranges. For example, the BIOS could allocate the least amount needed for each resource. Or it could allow for disabling or limiting address allocation for PCI Express depending on your system's usage of PCI Express devices.

The BIOS designer of your system likely set the upper limit of usable RAM to a static maximum of 3GB even though you installed 4GB. This approach provides a static address window of 1GB to the BIOS designer and as such simplifies the BIOS designers task to allocate address ranges for the resources so they do not conflict with any other address range.


There are several possible reasons.

One is that you are, in fact, not running the amd64 build. Another is that your motherboard and/or BIOS are broken and not reporting the correct amount of RAM.

Another is that you have video memory and other hardware resources taking up space in the 3-4 GB area of memory, and your motherboard/BIOS is incapable of hoisting the shadowed RAM to higher addresses so that it can be accessed.

Figuring out which requires looking at your dmesg output.


psusi is right.

I have the same situation here:

Although they call it "64-bit CPU" you can often not address 4 GB+ memory.

Most old motherboard do only have 32 bit for the addresses and from this pool the graphics card needs to get their addresses too.

= 4 GB - graphics card memory (1 GB) = 3 GB.

I fear there is no possibility to fix this by patching or upgrading firmware of anything.

If you are interested in detail I recommend: Physical Address Extension

  • Also: If at all possible, the normal 32 bit installer will automatically enable the Physical Address Extension kernel if needed, allowing you to use all your memory. Jan 8 '11 at 17:15
  • As it is been notified by @StefanoPalazzo and others installing PAE kernel solves the issue Just search for PAE kernel in synaptic package manager and install: hailubuntu.blogspot.com/2010/09/ubuntu-detecting-less-ram.html
    – wisemonkey
    Jan 23 '12 at 20:17
  • 1
    @wisemonkey: no an PAE kernel does not gave me the full 4GB. Because i already use an 64bit kernel and even the bios reports: 4GB total -> 3.2GB useable.
    – aatdark
    Aug 9 '12 at 20:56
  • @aatdark: Does your BIOS setup have field "Shared video memory" ? If yes can you disable it (only recommended if you have discrete graphics card) but then again as you said if its old computer then complete memory is not addressable.
    – wisemonkey
    Aug 11 '12 at 2:28
  • 1
    "The Intel Intel® 945 bases Chipsets provide a maximum address space of 4GB and does not support memory remapping. As parts of that address need to be reserved for other devices, you will not be able to use more than 3.2 GB of system memory with your current system configuration. No BIOS Update or 64 Bit operating system will ever change that. This is a chipset rather than a board or BIOS limitation."
    – aatdark
    Aug 11 '12 at 20:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy