Somente 3.2GB de 4GB de RAM detectados em Debian de 64 bits

9

Estou usando o Debian Squeeze (x64):

# uname -srvmo
Linux 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux

Eu tenho 2 sticks de 2 GB compatíveis com DDR2 na minha placa-mãe G31M-S . Suporta até 8 GB:

Comoesteéumservidor,eurealmentenãomeimportocomgráficos.Entãoeuconfigureiparaomenorvalor.

InternalGraphicsModeSelect:AutoEnabled,1MB<--Enabled,8MBDVMTModeSelect:FixedMode<--AutoDVMT/FIXEDMemory:128MB<--256MV

No entanto, o Linux está detectando apenas 3.19GiB de memória:

# cat /proc/meminfo
MemTotal:        3350712 kB
...

Olhando para o mapa E820 :

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000cfdb0000 (usable)
[    0.000000]  BIOS-e820: 00000000cfdb0000 - 00000000cfdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000cfdc0000 - 00000000cfdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000cfdf0000 - 00000000cfe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

E fazendo um pouco de matemática:

>>> ((0x9F800 - 0x10000) + (0xCF6B0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
3.240476608276367

Recebemos praticamente a mesma resposta.

O que estou perdendo?

Eu não estou comprando completamente o argumento "Espaço de endereçamento PCI". Tirando um dos dois 2GB, a tela de configuração mostra 2048MB.

# cat /proc/meminfo
MemTotal:        2058432 kB

São 1,96 GB.

E820 mape novamente:

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 000000007fdb0000 (usable)
[    0.000000]  BIOS-e820: 000000007fdb0000 - 000000007fdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 000000007fdc0000 - 000000007fdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 000000007fdf0000 - 000000007fe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

E a matemática ...

>>> ((0x9F800 - 0x10000) + (0x7fdb0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
1.9973125457763672

Então eu tenho 2GB / 2GB. /proc/cpuinfo mostra que meu processador suporta endereçamento físico de 36 bits. 2 ^ 36 = 64GB, que eu não sou um evento próximo.

# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0
    
por Jonathon Reinhart 25.07.2012 / 02:18

3 respostas

5

Você precisa ativar o Remapeamento de Memória ON no BIOS. Caso contrário, não irá remapear a memória acima do limite de 4 GB e alguma memória será coberta por mapeamentos de hardware.

    
por 22.08.2012 / 09:57
5

O PCI também usa parte do espaço de endereço. Ambas as placas PCI e os dispositivos PCI são integrados à placa-mãe (como o chipset).

Geralmente, isso significava que, de 4 GB, apenas de 3 ¼ a 3 ½ GB estavam disponíveis, mesmo se você não usasse uma GPU moderna com muita RAM onboard.

    
por 25.07.2012 / 02:20
2

Sua memória RAM ausente é usada pelo firmware:

# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0

Resumindo:

echo $((181116 + 287784 + 2881812 + 843592))
4194304

Então, você vê, isso equivale a 4 GB. E aqui está o ~ 800M que você relata que está faltando:

firmware/hardware            843592          0     843592
    
por 25.07.2012 / 16:28