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:
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
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/cpuinfo
mostra 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
linux
memory
debian-squeeze
Jonathon Reinhart
fonte
fonte
Respostas:
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.
fonte
Memory Hole Remapping
(AMIBIOS), o POST reportaria aproximadamente 3,3 GiB, enquanto o DMI ainda listaria dois módulos de 2 GiB cada.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.
fonte
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/cpuinfo
diz queaddress sizes : 36 bits physical, 48 bits virtual
isso deve ser bom para 64 GB. ((1<<36) / (1024*1024*1024) == 64
)1<<32
, ou esse kernel não sabe como entendê-lo.smem
instalou, tentesmem -R 4G -w
obter uma visão geral da memória disponível / usada.Sua falta de memória RAM é usada pelo firmware:
Resumindo:
Então você vê, isso resume até 4 GB. E aqui estão os ~ 800 milhões que você relatou ausentes:
fonte
0x100000000 (1<<32)
? Está se comportando como se fosse um sistema de 32 bits.smem -R 2G -w
dizer 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 ...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 ...