
A few months ago I upgraded my system to 4G of RAM. Blinded by my shiny new DIMMs, I never actually looked at the output of “free”. All I saw was that the system-monitor applet now showed lots of free memory. Only recently did I noticed that I only had 3G of RAM, instead of my expected 4G. This is a rather common problem when running a 32bit OS, but I’ve been running 64bit for a while now. In fact, since it’s such a common complaint for 32bit OSes, I didn’t have any luck Googling for an answer. I did find references to chipset limitations (motherboards with only a 32bit memory bus), but “lshw” seemed to think I was okay. I had 4 banks each showing:
*-bank:0
description: DIMM DDR Synchronous 333 MHz (3.0 ns)
…
size: 1GB
width: 64 bits
clock: 333MHz (3.0ns)
On reboot, I also noted that my BIOS said I only had 3G. I started to get worried, but managed to find a setting on my Northbridge for Memory to enable “Hardware memory hole”. After that, both the BIOS and Linux were happy and seeing the full 4G. I assume the BIOS just bumps the memory in the 3G region to above 4G, which makes for a silly kernel message:
[ 24.617275] Memory: 3977852k/5259264k available (2281k kernel code, 150272k reserved, 1182k data, 300k init)
But I don’t care. :) It works now, and my “free” output makes me happy again:
total used free shared buffers cached
Mem: 3986156 3958396 27760 0 68268 2949472
-/+ buffers/cache: 940656 3045500
Swap: 3903672 38676 3864996
(via luKas’ shared items in Google Reader)