Por que meu sistema mostra apenas 3,2 GiB de RAM quando eu definitivamente tenho 4,0 GiB

12

Tenho 2x2 GiB varas de RAM instaladas.
A execução memtest86no menu de inicialização do grub confirma isso. O memtest86 não reporta erros.

No entanto, de todas as formas que verifico minha memória disponível em um sistema Ubuntu 10.04 em execução, ele relata 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 memória RAM perdida ?

Informações atualizadas: Agora, iniciei o processo de inicialização dupla em outra versão do Ubuntu 10.04 no mesmo hardware (esqueci que o havia instalado há muitos meses, para emergências):) .... ... Ele relata 3,9 GiB, via System Monitor...

Publiquei minhas /var/log/messagesinformações mais recentes em http://pastebin.ubuntu.com/629246/

Peter.O
fonte
Que tipo de kernel você está usando? A menos que você use um 'bigmem' ou 'x86-64', talvez você não tenha toda a sua RAM visível para o sistema. Além disso, algumas opções do BIOS afetam a visibilidade do total de RAM. Use seu registro / var / log / messages (no início) para ver como as regiões de memória foram mapeadas.
mbaitoff
Eu não sei como interpretar /var/log/messages, mas eu postei a minha informação mais recente aqui: pastebin.ubuntu.com/629246 .. talvez alguém pode fazer cara-ou-coroa dele :)
Peter.O
Esse registro foi do sistema relatado em 3,2Gb ou do sistema relatado em 3,9Gb?
mbaitoff
As linhas 61,62 do seu log mostram 3,2 GB disponíveis.
mbaitoff
Eu tenho o Ubuntu 10.04 com x86-64 (64bit) instalado na máquina 4Gb. Ele relata 3964 Mb ('free -m'), para que sua segunda instalação detecte a quantidade de RAM corretamente. Por favor, verifique que tipo de kernel está instalado no seu 2º sistema.
mbaitoff

Respostas:

19

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 poder 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 ocupar todos os 4 GB disponíveis, isso não funcionará. Portanto, a memória física é dividida em pouca memória, que é mapeada o tempo todo, e memória alta, que deve ser mapeada quando em uso. A menos que você esteja executando um kernel corrigido, na arquitetura ix86, 128 MB de espaço de endereço são dedicados ao código do kernel e às estruturas de dados, e 896 MB são dedicados ao mapeamento da memória física (para um total de 1 GB).

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

Trechos dos logs do seu 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 887 MB de memória baixa: o máximo teórico de 896 MB menos alguns MB de buffers DMA (zonas de memória usadas para se comunicar com dispositivos de hardware).

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

O mapeamento da memória física acima de 4 GB requer o uso do PAE . O PAE incorre em uma pequena sobrecarga de desempenho (em particular, requer estruturas de dados maiores no gerenciador de memória), portanto, não é ativado sistematicamente. O kernel padrão do Ubuntu é compilado sem o suporte ao PAE. Faça com que o -generic-paekernel Instale linux-image-generic-pae seja capaz de acessar até 64 GB de RAM.

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

Gilles 'SO- parar de ser mau'
fonte
Bem, isso foi fácil ... Obrigado Gilles :) ... compreender o log é definitivamente mais difícil ... Eu tenho instalado! linux-image-2.6.32-32-generic-paeE htopagora relata3990 MiB
Peter.O
1
A máquina mapeia a memória ram acima da marca de 4 GB, para que possa colocar a memória de hardware, como a sua ram de vídeo, na marca de 4 GB, para que possam ser usadas por kernels de 32 bits não habilitados para pae.
psusi
Suponho que todos os seus GB devem ser GiB?
weynhamz
@TechliveZheng Este é um site de informática, não de física. Todo o meu MB, GB, etc. são realmente MiB, GiB, etc.
Gilles 'stop SO estar mal'
1

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

Jeff
fonte
uname -a... Linux DT9400 2.6.32-32-genérico # 62-Ubuntu SMP Wed Apr 20 21:54:21 UTC 2011 i686 GNU / Linux ... No entanto, como eu mencionei em "Informações atualizadas:" em minha pergunta, outra instalação 10.04 dual-boot de 10.04 mostra 3.9 Gib .. Ambos os sistemas de inicialização dupla foram instalados a partir do mesmo CD, mas atualmente estão executando kernels diferentes e têm programas diferentes instalados ... BTW, isso não é um acontecimento recente, foi mostrando 3.2 GB para muitos meses ..
Peter.O
Obviamente, você está executando um kernel de 32 bits ('i686'). A propósito, 3.9Gb já significa 4Gb, já que algum espaço de endereço é reservado pelo hardware.
mbaitoff
Sim, obrigado mbaitoff, eu esperaria que um pouco de memória fosse contornado, mas acho que 0,8 GiB é muito, então eu gostaria de descobrir o que está acontecendo aqui.
Peter.O
AFAIK Ubuntu pode instalar o kernel PAE, que pode usar grandes quantidades de RAM, mesmo em x86
Anton Barkovsky
3
Eu acho que você só precisa instalar o pae kernel (linux-generic-pae e linux-headers-generic-pae) e, se quiser, remover o kernel geral.
Anton Barkovsky