Apenas 3,2 GB de RAM de 4 GB detectados no Debian de 64 bits

9

Estou executando 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 DDR2 compatíveis na minha placa-mãe G31M-S . Ele suporta até 8 GB:

insira a descrição da imagem aqui

Como este é um servidor, eu realmente não me importo com gráficos. Então eu ajustei para o mais baixo.

Internal Graphics Mode Select: Auto
                               Enabled, 1MB   <--
                               Enabled, 8MB
DVMT Mode Select:              Fixed Mode     <--
                               Auto
    DVMT/FIXED Memory:         128MB          <--
                               256MB

insira a descrição da imagem aqui

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

Temos quase a mesma resposta.

o que estou perdendo?


Não estou comprando completamente o argumento "espaço de endereço PCI". Retirando um dos dois 2 GB, a tela de configuração mostra 2048 MB.

# cat /proc/meminfo
MemTotal:        2058432 kB

Isso é 1,96 GB.

Mapa E820 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 2 GB / 2 GB. /proc/cpuinfomostra que meu processador suporta endereçamento físico de 36 bits. 2 ^ 36 = 64GB, ao qual nem estou perto.


# ./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
Jonathon Reinhart
fonte
Verifique se o remapeamento da memória está ativado no BIOS.
David Schwartz
@ DavidSchwartz Tentei ativar isso, e o kernel entrou em pânico na inicialização. Eu posso tentar isso com um CD ao vivo.
Jonathon Reinhart
@DavidSchwartz Você está absolutamente correto. Ativar o remapeamento de memória parece ter funcionado. Sem ele ativado, o Memtest86 + registra ~ 3300 MB. Com ele ativado, ele relata 4086 MB. Se você der uma resposta, terei prazer em aceitar.
Jonathon Reinhart

Respostas:

5

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

David Schwartz
fonte
Esse foi o problema. Ativar o remapeamento de memória parece ter funcionado. Sem ele ativado, o Memtest86 + registra ~ 3300 MB. Com ele ativado, ele relata 4086 MB.
Jonathon Reinhart
Mesmo antes de ativar Memory Hole Remapping(AMIBIOS), o POST reportaria aproximadamente 3,3 GiB, enquanto o DMI ainda listaria dois módulos de 2 GiB cada.
njsg
5

O PCI também usa parte do espaço de endereço. As placas PCI e os dispositivos PCI integram a placa-mãe (como o chipset).

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

Hennes
fonte
Eu praticamente ignorei esse fato ... quero dizer 0,8GB? No entanto, o topo do mapa e820 0x100000000 == 1<<32é interessante. Então, por que o BIOS não está mapeando o restante da RAM acima de 1 << 32? É um Celeron E3400 e /proc/cpuinfodiz que address sizes : 36 bits physical, 48 bits virtualisso deve ser bom para 64 GB. ( (1<<36) / (1024*1024*1024) == 64)
Jonathon Reinhart
O manual da minha antiga placa-mãe Tyan é o único que me avisou que, apesar de suportar 4 GB de RAM, nunca exporia tudo isso ao sistema operacional. Dependendo das placas de expansão usadas (PCI simples e antigo, 66Mhz, 64bit), ela exporia cerca de 3,3 GB de espaço útil. Eu nunca consegui testar isso, 512 MB de RAM era tudo o que eu podia pagar. (Isso foi quando essa placa-mãe com CPU dupla ainda significava usar duas CPUs físicas. As coisas podem ter mudado desde então e o PCIe pode não ter o mesmo limite. Mas a maioria das placas-mãe ainda tem PCI e PCIe).
Hennes
Veja minha edição. Acho que o problema é que o BIOS se recusa a relatar qualquer memória 1<<32, ou esse kernel não sabe como entendê-lo.
Jonathon Reinhart
Você considerou a memória compartilhada usada pelos seus gráficos internos? Se você smeminstalou, tente smem -R 4G -wobter uma visão geral da memória disponível / usada.
Izzy
1
@Hennes Esta resposta faria todo o sentido se este fosse um sistema de 32 bits. Mas não para 64 bits (com endereçamento de memória física de 36 bits).
Jonathon Reinhart
2

Sua falta de memória RAM é 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 resume até 4 GB. E aqui estão os ~ 800 milhões que você relatou ausentes:

firmware/hardware            843592          0     843592
Izzy
fonte
Sim, e não estou surpreso com isso. A questão é: por que o BIOS não está relatando os 800 MB de RAM acima 0x100000000 (1<<32)? Está se comportando como se fosse um sistema de 32 bits.
Jonathon Reinhart
Sim, penso que esta resposta é válida, mas que questão permanece finais :-)
Jonathon Reinhart
Então, o que smem -R 2G -wdizer com apenas 2G na máquina (especialmente no que diz respeito ao firmware / hardware, pois essa parece ser a seção em que os "800M ausentes" foram com o 4G)? Seria muito engraçado se o firmware de repente já não precisa aqueles 800M ...
Izzy
Poderia ter a ver com AMI BIOS detected: BIOS may corrupt low RAM, working around it.- e a observação da Wikipedia (do seu e820link) "Às vezes, o BIOS está com erros e relata incorretamente a memória reservada. Isso pode fazer com que o software de teste de memória, como o Memtest, relate erros". ? EDIT: Ah, não - que só seria responsável por 64k , não 800M ...
Izzy
Posso verificar quando chego em casa, mas suponho que dirá a mesma coisa. Veja o mapa do E820 com 2 GB. Pela observação, parece mais ou menos o mesmo, exceto que os intervalos reservados / ACPI são mais baixos no espaço adicional (alguns deles).
Jonathon Reinhart