Meus problemas foram causados por um módulo de memória com falha e, possivelmente, um binário do kernel quebrado.
Acabei de inicializar meu PC com hardware basicamente novo. Eu já estava executando o Debian 6.0 AMD64 antes e não havia nenhuma mudança lá (literalmente; eu apenas desconectei os discos rígidos da placa-mãe antiga e os reconectei à nova), mas achei algo curioso:
- Instalei fisicamente 4 x 8 GB de RAM
- A configuração UEFI / BIOS reporta 16383 MB de RAM
- Linux
free -m
relata 2985 MB de RAM
2985 MB parece muito próximo da marca mágica de 3 GB para que seja pura coincidência, mas uname -r
imprime 2.6.32-5-amd64
; claramente um kernel de 64 bits, que é tudo o que já foi instalado na unidade do sistema que estou usando. A nova placa-mãe é um Asus M5A97 Pro, que possui quatro slots DDR3 supostamente compatíveis com módulos de 8 GB. Os módulos de memória são idênticos, quatro Corsair XMS3 PC12800 8 GB, comprados juntos.
Não olhei em detalhes a configuração do UEFI, mas procurei por ela e não vi nada que parecesse necessário mudar para permitir grandes quantidades de RAM.
Edit: Confirmação adicional de que realmente estou executando 64 bits:
# file `which free`
/usr/bin/free: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
#
O que há com isso e o que posso fazer sobre isso?
Edite 2: dmesg, dmidecode e meminfo, conforme solicitado. Eu não tenho acesso físico ao sistema agora, então terei que esperar até hoje à noite para retirar alguns módulos e ver o que isso faz. (Observe que o dmidecode reporta 3 x 8 GB mais um slot DIMM vazio. Observe também a mensagem de incompatibilidade MTRR do kernel, levando a uma perda de 13 GB, o que pelo menos corresponde ao que a própria placa-mãe está relatando.)
# dmidecode --type memory
# dmidecode 2.9
SMBIOS 2.7 present.
Handle 0x0026, DMI type 16, 23 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 32 GB
Error Information Handle: Not Provided
Number Of Devices: 4
Handle 0x0028, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM0
Bank Locator: BANK0
Type: <OUT OF SPEC>
Type Detail: Synchronous
Speed: 1333 MHz (0.8 ns)
Manufacturer: Manufacturer0
Serial Number: SerNum0
Asset Tag: AssetTagNum0
Part Number: Array1_PartNumber0
Handle 0x002A, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM1
Bank Locator: BANK1
Type: <OUT OF SPEC>
Type Detail: Synchronous
Speed: 1333 MHz (0.8 ns)
Manufacturer: Manufacturer1
Serial Number: SerNum1
Asset Tag: AssetTagNum1
Part Number: Array1_PartNumber1
Handle 0x002C, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM2
Bank Locator: BANK2
Type: <OUT OF SPEC>
Type Detail: Synchronous
Speed: 1333 MHz (0.8 ns)
Manufacturer: Manufacturer2
Serial Number: SerNum2
Asset Tag: AssetTagNum2
Part Number: Array1_PartNumber2
Handle 0x002E, DMI type 17, 34 bytes
Memory Device
Array Handle: 0x0026
Error Information Handle: Not Provided
Total Width: Unknown
Data Width: 64 bits
Size: No Module Installed
Form Factor: DIMM
Set: None
Locator: DIMM3
Bank Locator: BANK3
Type: Unknown
Type Detail: Synchronous
Speed: Unknown
Manufacturer: Manufacturer3
Serial Number: SerNum3
Asset Tag: AssetTagNum3
Part Number: Array1_PartNumber3
#
======================================================================
# cat /proc/meminfo
MemTotal: 3056820 kB
MemFree: 1470820 kB
Buffers: 390204 kB
Cached: 194660 kB
SwapCached: 0 kB
Active: 488024 kB
Inactive: 419096 kB
Active(anon): 231112 kB
Inactive(anon): 96660 kB
Active(file): 256912 kB
Inactive(file): 322436 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 8 kB
Writeback: 0 kB
AnonPages: 322320 kB
Mapped: 33012 kB
Shmem: 5472 kB
Slab: 613952 kB
SReclaimable: 597404 kB
SUnreclaim: 16548 kB
KernelStack: 2384 kB
PageTables: 19472 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1528408 kB
Committed_AS: 621464 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 294484 kB
VmallocChunk: 34359429080 kB
HardwareCorrupted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 9216 kB
DirectMap2M: 2054144 kB
DirectMap1G: 1048576 kB
#
======================================================================
# dmesg | grep -i memory
[ 0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM.
[ 0.000000] WARNING: at /tmp/buildd/linux-2.6-2.6.32/debian/build/source_amd64_none/arch/x86/kernel/cpu/mtrr/cleanup.c:1092 mtrr_trim_uncached_memory+0x2e6/0x311()
[ 0.000000] [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[ 0.000000] [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[ 0.000000] [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[ 0.000000] initial memory mapped : 0 - 20000000
[ 0.000000] init_memory_mapping: 0000000000000000-00000000bdf00000
[ 0.000000] PM: Registered nosave memory: 000000000009d000 - 000000000009e000
[ 0.000000] PM: Registered nosave memory: 000000000009e000 - 00000000000a0000
[ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000
[ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000
[ 0.000000] PM: Registered nosave memory: 00000000bd94d000 - 00000000bd99c000
[ 0.000000] PM: Registered nosave memory: 00000000bd99c000 - 00000000bd9a6000
[ 0.000000] PM: Registered nosave memory: 00000000bd9a6000 - 00000000bdade000
[ 0.000000] PM: Registered nosave memory: 00000000bdade000 - 00000000bdaef000
[ 0.000000] PM: Registered nosave memory: 00000000bdaef000 - 00000000bdb02000
[ 0.000000] PM: Registered nosave memory: 00000000bdb02000 - 00000000bdb04000
[ 0.000000] PM: Registered nosave memory: 00000000bdb04000 - 00000000bdb0d000
[ 0.000000] PM: Registered nosave memory: 00000000bdb0d000 - 00000000bdb13000
[ 0.000000] PM: Registered nosave memory: 00000000bdb13000 - 00000000bdb75000
[ 0.000000] PM: Registered nosave memory: 00000000bdb75000 - 00000000bdd78000
[ 0.000000] Memory: 3046732k/3111936k available (3075k kernel code, 4728k absent, 60476k reserved, 1879k data, 584k init)
[ 1.636730] Freeing initrd memory: 9501k freed
[ 1.647370] Freeing unused kernel memory: 584k freed
[ 4.876602] [TTM] Zone kernel: Available graphics memory: 1528410 kiB.
[ 4.876615] [drm] radeon: 256M of VRAM memory ready
[ 4.876617] [drm] radeon: 512M of GTT memory ready.
[ 25.571018] VBoxDrv: dbg - g_abExecMemory=ffffffffa051d6c0
#
O Grepping para o e820 mostra vários intervalos, além do mais e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved)
. 43f000000 é 16 GiB, bdf00000 é 3039 MiB. Eu não ver que ser coincidência.
# dmesg | grep -i e820
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009d800 (usable)
[ 0.000000] BIOS-e820: 000000000009d800 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 - 00000000bd94d000 (usable)
[ 0.000000] BIOS-e820: 00000000bd94d000 - 00000000bd99c000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bd99c000 - 00000000bd9a6000 (ACPI data)
[ 0.000000] BIOS-e820: 00000000bd9a6000 - 00000000bdade000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdade000 - 00000000bdaef000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdaef000 - 00000000bdb02000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdb02000 - 00000000bdb04000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdb04000 - 00000000bdb0d000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdb0d000 - 00000000bdb13000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdb13000 - 00000000bdb75000 (reserved)
[ 0.000000] BIOS-e820: 00000000bdb75000 - 00000000bdd78000 (ACPI NVS)
[ 0.000000] BIOS-e820: 00000000bdd78000 - 00000000bdf00000 (usable)
[ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec10000 - 00000000fec11000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec20000 - 00000000fec21000 (reserved)
[ 0.000000] BIOS-e820: 00000000fed00000 - 00000000fed01000 (reserved)
[ 0.000000] BIOS-e820: 00000000fed61000 - 00000000fed71000 (reserved)
[ 0.000000] BIOS-e820: 00000000fed80000 - 00000000fed90000 (reserved)
[ 0.000000] BIOS-e820: 00000000fef00000 - 0000000100000000 (reserved)
[ 0.000000] BIOS-e820: 0000000100001000 - 000000043f000000 (usable)
[ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)
[ 0.000000] e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved)
[ 0.000000] update e820 for mtrr
#
EDIT 3/4 - sucesso parcial:
- Atualizar o UEFI BIOS da versão
0705 x64 08/23/2011
para1007 02/10/2012
não ajudou: o mesmo problema permaneceu. - A remoção de um módulo DIMM (imaginei com sorte o slot nº 4: o mais distante da CPU) permitiu que o BIOS detectasse e usasse os 24 GB restantes, embora uma configuração de três DIMM não seja "recomendada" de acordo com o diagrama no manual do usuário. Notavelmente, o encaixe de um dos DIMMs restantes no slot nº 4 ainda permitiu que ele fosse usado, para que o slot fique bom. Recolocar o DIMM "original" nesse slot me fez voltar ao ponto inicial.
- A inicialização do CD de instalação da Debian 6.0.3 AMD64 em um ambiente de recuperação e a verificação de sua
dmesg
saída não mostram erros MTRR semelhantes . Além disso, nesse ambiente, com 3 x 8 GB instalados, 24 GB (mais ou menos epsilon vezes pi ou por aí; eu não fiz a matemática exata) aparece como utilizável de acordo comfree
. - Atualizar / reinstalar o kernel (houve uma pequena atualização disponível) parece ter corrigido os problemas do MTRR também.
dmesg
agora relata um total de 26198016 KB e nenhum erro MTRR, o que está de acordo com o que eu esperaria com 3 x 8 GB instalados.free -m
agora relata 24114 MB de RAM total, o que é francamente próximo o suficiente para mim.
Isso cheira a um DIMM vomitado, além de um kernel que, por qualquer motivo, foi danificado; esse último pode ter acontecido durante a queda de energia (embora eu deva dizer que é uma maneira estranha de o kernel quebrar!). O DIMM que não está funcionando retornará ao revendedor assim que eu falar com eles (espero que amanhã).
(espero) EDIÇÃO FINAL
RMA eu tinha um dos dois pares de DIMMs, foi aceito pelo revendedor como danificado e eles me enviaram um novo par, que parece funcionar muito bem. Então, agora estou basicamente no local onde pretendia originalmente há quase um mês (embora uma grande fração desse tempo não fosse realmente devida ao revendedor), com 32 GB de RAM utilizável; free -m
relata 32194 MB de memória total e o kernel relata 34586624k
RAM na inicialização, os quais estão bem de acordo com minhas expectativas.
dmidecode --type memory
e as primeiras centenas de linhas da saída dedmesg
(certifique-se de incluir qualquer coisa que pareça com memória).WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM.
Bem, está faltando o seu 13G.Respostas:
Primeiro, se o seu BIOS / UEFI não detectar corretamente sua RAM, seu sistema operacional não funcionará melhor. Não há necessidade de ir mais longe se o BIOS exibir informações incorretas sobre sua configuração.
=> Você provavelmente tem pelo menos um problema de hardware.
EDIT : Do seu dmesg | memória grep, parece que você realmente tem um problema de hardware, localizado na sua bios incorporada. Pelo menos, Linux detectou-la e avisa sobre isso:
WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM
. Parece também que um dos seus módulos de 4 ram está incorretamente reconhecido ou inserido.Você pode denunciá-lo ao fabricante, atualizar sua BIOS e alterar sua placa-mãe. Há muitas chances de que, com menos RAM, você não encontre esse bug.
Como observação lateral, você pode concordar com esta famosa citação de Linus Torvalds sobre os fabricantes de BIOS :
Segundo, quando seu BIOS está de acordo com o que você realmente tem na sua placa-mãe, você pode dar uma olhada no Linux
/proc/meminfo
. Geralmente é muito claro o que o seu sistema Linux sabe e faz com a sua memória. Aqui está o que eu tenho no meu 64bit / 8 Gb de RAM:Sobre o processo de inicialização e o que é usado / liberado pelo kernel do linux, você pode encontrá-lo em
dmesg
:EDIT : Como Gilles disse, com
dmidecode --type memory
, você pode ter detalhes sobre sua configuração de hardware. Parece assim para um sistema de 4x2Gb:fonte
Pesquise / var / log / dmesg pelo mapa de memória (grep para 'e820') e conte quantas memórias são relatadas como utilizáveis. É isso que o BIOS informa ao sistema operacional carregado para memória.
(Isso é correto apenas para inicialização com estilo antigo. Não sei como a memória é relatada se a inicialização com estilo EFI for usada, mas acho que há um relatório semelhante.)
Além disso, reportar 16 GB pelo BIOS enquanto 32 GB estão instalados significa alguma estranheza na configuração da memória. Tente reduzir a memória instalada para 4 ou 8 GB e compare os efeitos.
fonte
Muitas placas AMD mais antigas podem ter 4 slots, mas se você preencher o último slot, estará solicitando problemas. É um problema de chipset que não pode ser corrigido.
fonte