Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

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!

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

4 Answers 4

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?

share|improve this answer
    
ACK, I updated the question. –  Peter Jul 16 '12 at 13:19
    
Thanks, could you check the output of dmesg | grep -i memory for any peculiar warnings? –  Kenny Rasschaert Jul 16 '12 at 13:35
    
Already updated –  Peter Jul 16 '12 at 13:53

Enter your BIOS setup and enable the Memory Remapping option.

share|improve this answer
    
I do not find this option. However, BIOS see all the 8 GB RAM. –  Peter Jul 16 '12 at 15:24
    
I'd recommend you contact the motherboard manufacturer, and also consider using an actual server (or at least workstation) motherboard. –  Michael Hampton Jul 16 '12 at 15:27

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.")

.

share|improve this answer

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

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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