64-bit Linux non riconosce la mia RAM tra 3 e 32 GB


8

I miei problemi sono stati causati da un modulo di memoria difettoso e molto probabilmente da un binario del kernel rotto.


Ho appena avviato il mio PC con hardware praticamente nuovo di zecca. Ho eseguito Debian 6.0 AMD64 in precedenza, e non ho apportato alcuna modifica (letteralmente; ho appena scollegato i dischi rigidi dalla vecchia scheda madre e li ho ricollegati a quello nuovo), ma ho trovato qualcosa di curioso:

  • Ho installato fisicamente 4 x 8 GB di RAM
  • L'installazione UEFI / BIOS riporta 16383 MB di RAM
  • Linux free -mriporta 2985 MB di RAM

2985 MB sembrano troppo vicini al magico segno da 3 GB per essere puramente una coincidenza, ma le uname -rstampe 2.6.32-5-amd64; chiaramente un kernel a 64 bit, che è tutto ciò che è mai stato installato sull'unità di sistema che sto usando. La nuova scheda madre è un Asus M5A97 Pro, che ha quattro slot DDR3 che presumibilmente supportano moduli da 8 GB. I moduli di memoria stessi sono identici, quattro Corsair XMS3 PC12800 da 8 GB, acquistati insieme.

Non ho guardato in dettaglio l'installazione UEFI in dettaglio, ma l'ho sfogliato e non ho visto nulla che sembrava che avrebbe dovuto essere modificato per abilitare grandi quantità di RAM.

Modifica: ulteriore conferma che sto davvero correndo a 64 bit:

# 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
#

Che succede e cosa posso fare al riguardo?

Modifica 2: dmesg, dmidecode e meminfo, come richiesto. Non ho accesso fisico al sistema in questo momento, quindi dovrò aspettare fino a stasera per estrarre alcuni moduli e vedere cosa fa. (Si noti che dmidecode riporta 3 x 8 GB più uno slot DIMM vuoto. Si noti inoltre il messaggio di mancata corrispondenza MTRR dal kernel, che porta a una perdita di 13 GB, che almeno si somma a ciò che la scheda madre stessa sta segnalando.)

# 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
#

Grepping per e820 mostra un sacco di gamme, completando con e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved). 43f000000 è 16 GiB, bdf00000 è 3039 MiB. Io non vedo che essere una coincidenza.

# 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 - parziale successo:

  • L'aggiornamento del BIOS UEFI dalla versione 0705 x64 08/23/2011a 1007 02/10/2012non ha aiutato: lo stesso identico problema è rimasto.
  • La rimozione di un modulo DIMM (ho pensato a quale slot fosse il n. 4: quello più lontano dalla CPU) ha permesso al BIOS di rilevare e utilizzare i restanti 24 GB, anche se una configurazione a tre DIMM non è "consigliata" secondo diagramma nel manuale dell'utente. In particolare, l'inserimento di uno dei DIMM rimanenti nello slot n. 4 ha ancora consentito l'utilizzo, quindi lo slot va bene. Riposizionare il DIMM "originale" in quello slot mi ha riportato al punto di partenza.
  • L'avvio dal CD di installazione di Debian 6.0.3 AMD64 in un ambiente di ripristino e il controllo dmesgdell'output non mostra errori MTRR simili . Inoltre, in quell'ambiente, con 3 x 8 GB installati, 24 GB (più o meno epsilon volte più o meno; non ho fatto la matematica esatta) si presentano come utilizzabili secondo free.
  • L'aggiornamento / reinstallazione del kernel (era disponibile un aggiornamento minore) sembra aver risolto anche i problemi di MTRR. dmesgora riporta 26198016 KB totali e nessun errore MTRR, che è in linea con quello che mi aspetterei con 3 x 8 GB installati. free -mora riporta 24114 MB di RAM totale, che francamente è abbastanza vicino per me.

Questo ha l'odore di un DIMM infilato, oltre a un kernel che per qualsiasi motivo è stato danneggiato; quest'ultimo potrebbe essere accaduto durante l'interruzione di corrente (anche se devo dire che è un modo strano che il kernel si rompa!). Il modulo DIMM non funzionante tornerà al rivenditore non appena parlerò con loro (speriamo domani).

(si spera) MODIFICA FINALE

Avevo RMA una delle due coppie di DIMM, è stata accettata dal rivenditore come danneggiata e mi hanno inviato una nuova coppia, che sembra funzionare bene. Quindi ora sono praticamente al punto in cui intendevo originariamente quasi un mese fa (anche se una grande parte di quel tempo non era realmente dovuta al rivenditore), con 32 GB di RAM utilizzabili; free -mriporta 32194 MB di memoria totale e il kernel riporta 34586624kRAM all'inizializzazione, che sono entrambi in linea con le mie aspettative.


2
Dalla tua prima affermazione sembra che tu abbia spostato i dischi rigidi con un sistema operativo installato su una nuova scheda di sistema? Un ottimo test sarebbe quello di scaricare una distribuzione live e avviarci. Slax, DSL, Ubuntu o qualsiasi altra cosa. Se questo riconosce la giusta quantità di RAM, allora probabilmente incontrerai problemi HAL / udev. A quel punto risparmierai molto più tempo nel backup e nella reinstallazione rispetto al tentativo di risolverlo. A meno che tu non sia un fanatico come me e non ci voglia perdere ore o giorni:}
2bc

2
Pubblica l'output di dmidecode --type memorye le prime cento righe circa dell'output di dmesg(assicurati di includere tutto ciò che sembra riguardare la memoria).
Gilles 'SO- smetti di essere malvagio' il

1
WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM.Bene, c'è il tuo 13G mancante.
Mat

1
@Mat, non l'altro 16G mancante, comunque. Probabilmente ci vorrà un po 'di più per cercare.
un CVn il

1
Sarei interessato a quello che direbbe un boot debian live (/ ubuntu, dato che è la prossima cosa più vicina), dal momento che può essere usato per distinguere facilmente tra problemi con l'hardware e problemi con la configurazione.
dtech,

Risposte:


14

Innanzitutto, se il BIOS / UEFI non rileva correttamente la RAM, il sistema operativo non funzionerà meglio. Non è necessario andare oltre se il BIOS visualizza informazioni errate sulla configurazione.

=> Probabilmente hai almeno un problema hardware.

EDIT : dal tuo dmesg | memoria grep, sembra che tu abbia effettivamente un problema hardware, che si trova nel tuo BIOS integrato. Almeno, Linux ha rilevato e che si avverte su di esso: WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM. Sembra anche che uno dei tuoi moduli a 4 ram sia erroneamente riconosciuto o inserito.

Puoi segnalarlo al produttore, aggiornare il tuo BIOS e cambiare la scheda madre. Ci sono molte possibilità che con meno RAM, non riscontrerai questo errore.

Come nota a margine, potresti essere d'accordo con questa famosa citazione di Linus Torvalds sui produttori di BIOS :

Gli scrittori del BIOS sono invariabilmente scimmie dipendenti da crack, totalmente incompetenti

In secondo luogo, quando il BIOS è a posto con quello che hai davvero sulla tua scheda madre, puoi dare un'occhiata a Linux /proc/meminfo. Spesso è molto chiaro ciò che il tuo sistema Linux conosce e fa con la tua memoria. Ecco cosa ho sul mio 64 bit / 8 GB di RAM:

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

Informazioni sul processo di avvio e su ciò che viene utilizzato / liberato dal kernel di Linux, è possibile selezionarlo da dmesg:

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

EDIT : Come ha detto Gilles, dmidecode --type memorypuoi avere dettagli sulla tua configurazione hardware. Sembra così per un 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]

5

Cerca / var / log / dmesg per la mappa di memoria (grep per 'e820') e conta la quantità di memoria segnalata lì come utilizzabile. Questo è ciò che il BIOS dice al sistema operativo caricato per la memoria.

(Questo è corretto solo per l'avvio vecchio stile. Non so come sia riportata la memoria se viene utilizzato l'avvio in stile EFI, ma immagino che ci sia un rapporto simile.)

Inoltre, segnalare 16 GB dal BIOS mentre sono installati 32 GB significa una certa stranezza nell'impostazione della memoria. Prova a ridurre la memoria installata a 4 o 8 GB e confronta gli effetti.


Vedi la mia modifica per i dati e820. Rimuovere fisicamente i moduli di memoria per vedere cosa dovrà aspettare fino a stasera. Gli unici moduli DDR3 che ho sono 8 GB ciascuno.
un CVn il

Bene, sembra che sia abbastanza adesso - hai hardware e software che funzionano correttamente. L'ultima azione è installare il modulo di memoria corretto per riempirlo e far funzionare il doppio canale. Congratulazioni.
Netch

0

Molte vecchie schede AMD possono avere 4 slot, ma se riempi l'ultimo slot stai chiedendo problemi. È un problema con il chipset che non può essere risolto.


Non considererei esattamente l'Asus M5A97 Pro una scheda madre "più vecchia" (non conosco la sua data di produzione esatta, ma è basata sul chipset AMD 970 e Wikipedia mette la serie 900 a una data di rilascio di giugno 2011, meno di un anno prima che questa domanda fosse attuale nel marzo 2012). E l' esecuzione dal supporto di installazione ha mostrato un'immagine della realtà piuttosto diversa dal punto di vista del sistema operativo. E i problemi alla fine sono stati risolti sostituendo il modulo di memoria difettoso con uno funzionante e reinstallando il kernel (come dice proprio all'inizio della domanda).
un CVn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.