2

I have a machine with 8GB ram (BIOS sees it, so my motherboard and CPU supports it), and I installed CentOS 6.3 on it. When it starts up, it only see 3.1GB.

uname says: 2.6.32-279.1.1.el6.x86_64 #1 SMP

BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cf65f000 (usable)
BIOS-e820: 00000000cf65f000 - 00000000cf6e8000 (ACPI NVS)
BIOS-e820: 00000000cf6e8000 - 00000000cf6ec000 (usable)
BIOS-e820: 00000000cf6ec000 - 00000000cf6ff000 (ACPI data)
BIOS-e820: 00000000cf6ff000 - 00000000cf700000 (usable)

dmesg | grep -i memory says:
initial memory mapped : 0 - 20000000
init_memory_mapping: 0000000000000000-00000000cf700000
Reserving 129MB of memory at 48MB for crashkernel (System RAM: 3319MB)
PM: Registered nosave memory: 000000000009f000 - 00000000000a0000
PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000
PM: Registered nosave memory: 00000000000e0000 - 0000000000100000
PM: Registered nosave memory: 00000000cf65f000 - 00000000cf6e8000
PM: Registered nosave memory: 00000000cf6ec000 - 00000000cf6ff000
Memory: 3184828k/3398656k available (5152k kernel code, 1016k absent, 212812k reserved, 7166k data, 1260k init)
please try 'cgroup_disable=memory' option if you don't want memory cgroups
Initializing cgroup subsys memory
Freeing initrd memory: 16136k freed
Non-volatile memory driver v1.3
agpgart-intel 0000:00:00.0: detected 8192K stolen memory
crash memory driver: version 1.1
Freeing unused kernel memory: 1260k freed
Freeing unused kernel memory: 972k freed
Freeing unused kernel memory: 1732k freed

Update: Memtest see all the 8GB, and dmidecode -t 17 | grep Size too.
But free -m still see only 3.1 GB.

Question: How can I repair/modify the system, to see all the 8GB RAM?

Thanks in advance!

2
  • 1
    Check that 64-bit is enabled in your BIOS. Is sometimes a 'switch' in the CPU settings.
    – PCBONEZ
    Jul 16, 2012 at 23:09
  • Have you check that you're BIOS version is the latest for your mobo/system?
    – Chris S
    Jul 16, 2012 at 23:23

4 Answers 4

3

It looks like you are running a 64 bit kernel. You should not need to install a PAE kernel.

I originally had an answer here explaining how to install the PAE kernel because at first I somehow missed the fact that you have a 64 bit kernel.

My (very limited) interpretation of your BIOS-provided physical RAM map is that your BIOS is only telling your OS about 3480223744 adressable bits, or about 3.2GB. If you subtract the reserved bits, we are left with 3.1GB.

Some people have reported reading the following in their dmesg output:
WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13040MB of RAM
Could you run dmesg | grep -i memory and look for a similar warning message?

3
  • ACK, I updated the question.
    – Peter
    Jul 16, 2012 at 13:19
  • Thanks, could you check the output of dmesg | grep -i memory for any peculiar warnings? Jul 16, 2012 at 13:35
  • Already updated
    – Peter
    Jul 16, 2012 at 13:53
2

Enter your BIOS setup and enable the Memory Remapping option.

3
  • I do not find this option. However, BIOS see all the 8 GB RAM.
    – Peter
    Jul 16, 2012 at 15:24
  • I'd recommend you contact the motherboard manufacturer, and also consider using an actual server (or at least workstation) motherboard. Jul 16, 2012 at 15:27
  • Thank you Michael; this worked for me where the Memory modules were different sizes from different vendors. I suspect that if the OP's motherboard/BIOS had that option, this answer would've solved his problem as well. Unfortunately, as we all know, different vendors provide different BIOS with different levels of control features/options.
    – ILMostro_7
    Oct 31, 2015 at 3:27
0

I thought my previous suggestion [that was converted to a comment] was pretty clear but obviously not.

Try #2: You can turn 64-bit for the CPU on-off with some CPUs and some BIOSs. The BIOS doesn't usually care (check) what the CPU is set to when it reports RAM during BOOT and so will show what is physically there. But the OS is different. The OS will check for a 64-bit enabled CPU. If it doesn't see one (because 64-bit CPU is disabled in BIOS) then you will get a 32-bit (4Gb-max) Memory Map. In that situation any physical RAM over the 4Gb 32-bit limit simply won't be available because the OS can't address it. (aka: can't find it.)

A memory address in a memory map is like a phone number in a phone book. If the phone book is full and you have lots more phones than numbers all those extra phones won't have phone numbers - so you can't call them even though they work fine. (That is the same idea as what 'can't address' means. "Can't address basically means "can't assign an ID number to.")

.

0

It's a long shot, but look at the kernel boot parameters, which can be configured to tell the kernel to only recognize a set amount of memory.

cat /proc/cmdline

Look for any memory-related settings. mem= would be a pretty clear winner but there are others. Check out https://www.kernel.org/doc/Documentation/kernel-parameters.txt

Also look at the boot loader configuration. It can specify the same thing but cover virtualization possibilities (like if this system is actually a dom0 or some other trickiness). On RHEL with GRUB try: cat /boot/grub/grub.conf

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.