Why is more than 3 GB of RAM not recognised when using AMD64?

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.
http://forums.lenovo.com/t5/T61-and-prior-T-series-ThinkPad/Thinkpad-s-and-N100-s-w-945PM-chipset-can-t-address-gt-3G-Ram/m-p/2730

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:

http://www.intel.com/content/www/us/en/intelligent-systems/navy-pier/mobile-945-express-chipset-datasheet.html

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.