Por que meu sistema mostra apenas 3.2 GiB de RAM quando eu definitivamente tenho 4.0 GiB?

11

Eu tenho 2x2 GiB sticks de RAM instalados.
Executar memtest86 no menu de inicialização do grub confirma isso .. memtest86 não relata erros.

No entanto, de todas as maneiras que eu verifico minha memória disponível em um sistema Ubuntu 10.04, ele reporta apenas aproximadamente 3.2 GiB.

  • cat /proc/meminfo == 3320132 kB
  • System Monitor == 3.2 GiB
  • htop == 3242 MB
  • free -m == 3242 MB

Quem tem minha RAM ?

Informações atualizadas: Eu acabo de usar o dual -booted em outra versão do Ubuntu 10.04 no mesmo hardware (esqueci que o instalei há muitos meses, para emergências):) .... It relatórios 3.9 GiB, via System Monitor ...

Publicamos minhas informações mais recentes de /var/log/messages no link

    
por Peter.O 19.06.2011 / 08:38

2 respostas

17

Um espaço de endereço de 32 bits significa que você tem espaço para 4 GB de endereços. Idealmente, o kernel gosta de mapear toda a memória física, toda a memória da tarefa atual e toda a sua própria memória. Se a memória física sozinha ocupar todos os 4GB disponíveis, isso não funcionará. Assim, a memória física é dividida em pouca memória, que é mapeada o tempo todo, e alta memória, que deve ser mapeada quando em uso. A menos que você esteja executando um kernel com patches, na arquitetura ix86, 128MB de espaço de endereço são dedicados ao código do kernel e às estruturas de dados, e 896MB são dedicados ao mapeamento da memória física (para um total de 1GB).

Leitura em segundo plano sobre as complexidades do gerenciamento de memória quando seu espaço de endereço não é confortavelmente maior que sua memória total:

Trechos dos seus registros do kernel:

BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
BIOS-e820: 00000000cdce0000 - 00000000cdce3000 (ACPI NVS)
BIOS-e820: 00000000cdce3000 - 00000000cdcf0000 (ACPI data)
BIOS-e820: 00000000cdcf0000 - 00000000cdd00000 (reserved)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
2404MB HIGHMEM available.
887MB LOWMEM available.
Zone PFN ranges:
DMA      0x00000000 -> 0x00001000
Normal   0x00001000 -> 0x000377fe
HighMem  0x000377fe -> 0x000cdce0

Aqui você tem 887MB de memória baixa: o máximo teórico de 896MB menos alguns MB de buffers DMA (zonas de memória usadas para se comunicar com dispositivos de hardware).

Da sua memória física, 3328MB são mapeados em endereços abaixo de 4GB e 768MB são mapeados em endereços acima de 4GB (o intervalo de 0x100000000–0x130000000). Você não está obtendo acesso a esses 768MB, o que explica por que você só tem 3242MB disponíveis (4096MB de RAM menos 768MB inacessíveis menos 9MB de buffers DMA menos 75MB usados pelo próprio kernel para código e dados). Eu não sei porque o BIOS mapeia alguma RAM acima da marca de 4GB, mas como um ponto de dados, eu estou postando isso de um PC com 4GB de RAM que similarmente tem RAM mapeada em 0x100000000–0x130000000.

O mapeamento da memória física acima de 4 GB requer o uso de PAE . O PAE incorre em uma pequena sobrecarga de desempenho (em particular, requer estruturas de dados maiores no gerenciador de memória), portanto, ele não é ativado sistematicamente. O kernel padrão do Ubuntu é compilado sem suporte a PAE. Obtenha o -generic-pae kernel para poder acessar até 64 GB de RAM.

TL, DR: o Linux está funcionando como esperado. O firmware não é tão útil. Obtenha um kernel habilitado para PAE.

    
por 19.06.2011 / 13:54
1

Talvez seja porque a arquitetura do seu Ubuntu é i386 (versão de 32 bits). Qual é o resultado quando você executa uname -a ?

    
por 19.06.2011 / 10:39