O Linux de 64 bits não reconhece minha memória RAM entre 3 e 32 GB

8

Meus problemas foram causados por um módulo de memória com defeito e possivelmente um binário do kernel quebrado.

Acabei de iniciar o meu PC com basicamente novo hardware. Eu tenho rodado o Debian 6.0 AMD64 antes, e nenhuma mudança (literalmente; eu apenas desconectei os discos rígidos da velha placa mãe e os reconectei ao novo), mas achei algo curioso:

  • Eu instalei fisicamente 4 x 8 GB de RAM
  • Relatórios de configuração UEFI / BIOS 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 ser 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 é uma Asus M5A97 Pro, que tem quatro slots DDR3 supostamente suportando módulos de 8 GB. Os próprios módulos de memória são idênticos, quatro Corsair XMS3 PC12800 8 GB, adquiridos juntos.

Eu não olhei em detalhes a configuração da UEFI, mas naveguei nela e não vi nada que parecesse precisar mudar para ativar grandes quantidades de RAM.

Editar: confirmação adicional de que estou realmente 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?

Editar 2: dmesg, dmidecode e meminfo, conforme solicitado. Eu não tenho acesso físico ao sistema agora, por isso vou ter que esperar até hoje para pegar alguns módulos e ver o que isso faz. (Observe que o dmidecode relata 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, que pelo menos se soma 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 e820 mostra vários intervalos, chegando com e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved) . 43f000000 é 16 GiB, bdf00000 é 3039 MiB. Eu faço não ver isso sendo 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:

  • A atualização do UEFI BIOS da versão 0705 x64 08/23/2011 para 1007 02/10/2012 não ajudou: o mesmo problema permaneceu.
  • Remover um módulo DIMM (imaginei que o slot era o 4º: o mais distante da CPU) permitiu que o BIOS detectasse e usasse os 24 GB restantes, embora uma configuração de três DIMMs não seja "recomendada" de acordo com o diagrama no manual do usuário. Notavelmente, sentar um dos DIMMs restantes no slot # 4 ainda permite que ele seja usado, então o slot está bem. Recolocando o DIMM "original" naquele slot me deixou de volta ao meu ponto de partida.
  • Inicializando do CD de instalação do Debian 6.0.3 AMD64 em um ambiente de recuperação e verificando sua saída dmesg mostra nenhum erro MTRR similar . Além disso, nesse ambiente, com 3 x 8 GB instalados, 24 GB (mais ou menos vezes epsilon pi ou por aí; não fiz a matemática exata) aparece como utilizável de acordo com free .
  • A atualização / reinstalação do kernel (houve uma pequena atualização disponível) parece ter corrigido os problemas do MTRR também. dmesg agora relata 26198016 KB no total e nenhum erro MTRR, o que está de acordo com o que eu esperaria com 3 x 8GB instalados. free -m agora relata 24114 MB de RAM total, o que francamente está perto o suficiente para mim.

Isso cheira a DIMM, além de um kernel que, por qualquer motivo, foi danificado; Esse último maio aconteceu durante a falta de energia (embora eu deva dizer que é uma maneira estranha para o kernel quebrar!). O DIMM que não funciona retornará ao revendedor assim que eu falar com eles (espero que amanhã).

(esperamos) EDIÇÃO FINAL

Eu usei o RMA como um dos dois pares de DIMMs, ele foi aceito pelo revendedor como danificado e eles me enviaram um novo par, que parece funcionar muito bem. Então, eu estou basicamente basicamente onde eu pretendia originalmente há quase um mês (embora uma grande fração desse tempo não fosse realmente devido ao revendedor), com 32 GB de RAM utilizável; free -m relatórios 32194 MB de memória total, e o kernel reporta 34586624k RAM na inicialização, ambos os quais estão bem alinhados com as minhas expectativas.

    
por a CVn 21.03.2012 / 20:53

3 respostas

12

Primeiro, se sua 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 seu BIOS exibir informações incorretas sobre sua configuração.

= > Você provavelmente tem pelo menos um problema de hardware.

EDITAR : do seu dmesg | grep memory, parece que você tem de fato um problema de hardware, localizado em sua bios embutida. Pelo menos, o Linux detectou 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 é incorretamente reconhecido ou inserido.

Você pode denunciá-lo ao fabricante, atualizar suas biografias e alterar sua placa-mãe. Há muitas chances de que, com menos RAM, você não encontre esse bug.

Como uma observação, você pode concordar com esta famosa citação de Linus Torvalds sobre os fabricantes de BIOS :

BIOS writers are invariably totally incompetent crack-addicted monkeys

Em segundo lugar, quando a sua BIOS está bem com o que você realmente tem na sua placa-mãe, você pode dar uma olhada no Linux em /proc/meminfo . Muitas vezes é muito claro sobre 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:

$ cat /proc/meminfo 
MemTotal:        8175652 kB
MemFree:         5476336 kB
Buffers:           63924 kB
Cached:          1943460 kB
SwapCached:            0 kB
[...]

Sobre o processo de inicialização e o que é usado / liberado pelo kernel do linux, você pode utilizá-lo em dmesg :

$ dmesg | grep Memory
[    0.000000] Memory: 8157672k/8904704k available (6138k kernel code, 534168k absent, 212864k reserved, 6896k data, 988k init)

EDITAR : Como disse Gilles, com dmidecode --type memory , você pode ter detalhes sobre sua configuração de hardware. Parece assim para um sistema 4x2Gb:

$ sudo dmidecode --type memory
# dmidecode 2.9
SMBIOS 2.6 present.

Handle 0x0020, DMI type 16, 15 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: None
    Maximum Capacity: 32 GB
    Error Information Handle: Not Provided
    Number Of Devices: 4

Handle 0x0022, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x0020
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 2048 MB
    [...]
[This block is repeated for each module]
    
por 21.03.2012 / 22:28
5

Pesquise / var / log / dmesg para o mapa de memória (grep para 'e820') e conte quantas memórias são reportadas como utilizáveis. Isto é o que a BIOS diz para carregar o SO para a 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 é usada, mas acho que há um relatório semelhante.)

Além disso, reportar 16 GB de BIOS enquanto 32 GB é instalado significa alguma estranheza na configuração da memória. Tente reduzir a memória instalada para 4 ou 8 GB e compare os efeitos.

    
por 21.03.2012 / 21:30
0

Muitas placas AMD mais antigas podem ter 4 slots, mas se você preencher o último slot, estará solicitando problemas. É um problema no chipset que não pode ser corrigido.

    
por 01.02.2013 / 20:34

Tags