64-Bit-Linux erkennt meinen RAM zwischen 3 und 32 GB nicht

64-Bit-Linux erkennt meinen RAM zwischen 3 und 32 GB nicht

Meine Probleme wurden durch ein fehlerhaftes Speichermodul verursachtund möglicherweise eine defekte Kernel-Binärdatei.


Ich habe gerade meinen PC mit praktisch brandneuer Hardware hochgefahren. Zuvor hatte ich Debian 6.0 AMD64 verwendet, und da hat sich nichts geändert (buchstäblich; ich habe einfach die Festplatten vom alten Motherboard abgezogen und sie an das neue angeschlossen), aber ich habe etwas Merkwürdiges gefunden:

  • Ich habe physisch 4 x 8 GB RAM installiert
  • UEFI/BIOS-Setup meldet 16383 MB RAM
  • Linux free -mmeldet 2985 MB RAM

2985 MB scheinen zu nahe an der magischen 3-GB-Marke zu liegen, als dass es reiner Zufall sein könnte, aber uname -res erscheint 2.6.32-5-amd64eindeutig ein 64-Bit-Kernel, und das ist alles, was jemals auf dem von mir verwendeten Systemlaufwerk installiert wurde. Das neue Motherboard ist ein Asus M5A97 Pro, das vier DDR3-Steckplätze hat, die angeblich 8-GB-Module unterstützen. Die Speichermodule selbst sind identisch, vier Corsair XMS3 PC12800 8 GB, zusammen gekauft.

Ich habe mir das UEFI-Setup nicht im Detail angesehen, aber ich habe es durchgesehen und nichts gefunden, was geändert werden müsste, um große Mengen RAM zu aktivieren.

Bearbeiten:Weitere Bestätigung, dass ich wirklich 64-Bit verwende:

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

Was ist hier los und was kann ich dagegen tun?

Bearbeitung 2:dmesg, dmidecode und meminfo, wie gewünscht. Ich habe im Moment keinen physischen Zugriff auf das System, also muss ich bis heute Abend warten, um einige Module herauszuziehen und zu sehen, was das bewirkt. (Beachten Sie, dass dmidecode 3 x 8 GB plus einen leeren DIMM-Steckplatz meldet. Beachten Sie auch die MTRR-Fehlanpassungsmeldung vom Kernel, die zu einem Verlust von 13 GB führt, was zumindest mit dem übereinstimmt, was das Motherboard selbst meldet.)

# 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 für e820 zeigt eine Reihe von Bereichen, die mit enden e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved). 43f000000 ist 16 GiB, bdf00000 ist 3039 MiB. Ichnichtsehe darin einen Zufall.

# 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 – Teilerfolg:

  • Das Upgrade des UEFI-BIOS von Version auf 0705 x64 08/23/2011hat 1007 02/10/2012nicht geholfen: Das exakt gleiche Problem blieb bestehen.
  • Durch das Entfernen eines DIMM-Moduls (ich habe zufällig geraten, welcher Steckplatz Nr. 4 war: der am weitesten von der CPU entfernte) konnte das BIOS die verbleibenden 24 GB erkennen und verwenden, obwohl eine Konfiguration mit drei DIMMs laut dem Diagramm im Benutzerhandbuch nicht „empfohlen“ wird. Insbesondere konnte eines der verbleibenden DIMMs in Steckplatz Nr. 4 weiterhin verwendet werden, sodass der Steckplatz in Ordnung ist. Durch erneutes Einsetzen des „ursprünglichen“ DIMMs in diesen Steckplatz war ich wieder am Ausgangspunkt angelangt.
  • Wenn Sie von der Debian 6.0.3 AMD64-Installations-CD in eine Rettungsumgebung booten und die dmesgAusgabe überprüfen, sehen Siekeine ähnlichen MTRR-Fehler. Außerdem werden in dieser Umgebung mit 3 x 8 GB, wenn sie installiert sind, 24 GB (plus oder minus Epsilon mal Pi oder so ungefähr; ich habe es nicht genau ausgerechnet) gemäß als nutzbar angezeigt free.
  • Das Aktualisieren/Neuinstallieren des Kernels (es war ein kleineres Upgrade verfügbar) scheint auch die MTRR-Probleme behoben zu haben. dmesgJetzt werden insgesamt 26198016 KB und keine MTRR-Fehler gemeldet, was meinen Erwartungen bei einer Installation von 3 x 8 GB entspricht. free -mJetzt werden insgesamt 24114 MB RAM gemeldet, was mir ehrlich gesagt nahe genug kommt.

Das riecht nach einem kaputten DIMM und einem Kernel, der aus irgendeinem Grund beschädigt wurde. LetztererMaiwährend des Stromausfalls aufgetreten sein (obwohl ich sagen muss, dass das eine seltsame Art ist, wie der Kernel kaputt gehen kann!). Das nicht funktionierende DIMM geht an den Wiederverkäufer zurück, sobald ich mit ihm gesprochen habe (hoffentlich morgen).

(hoffentlich) ENDGÜLTIGE BEARBEITUNG

Ich habe eines der beiden DIMM-Paare zurückgeschickt, der Wiederverkäufer hat es als beschädigt akzeptiert und mir ein neues Paar geschickt, das einwandfrei zu funktionieren scheint. Ich bin jetzt also im Grunde dort, wo ich es vor fast einem Monat ursprünglich vorhatte (obwohl ein großer Teil dieser Zeit nicht wirklich dem Wiederverkäufer zuzuschreiben war), mit 32 GB nutzbarem RAM, free -mmeldet 32194 MB Gesamtspeicher und der Kernel meldet 34586624kRAM bei der Initialisierung, was beides meinen Erwartungen entspricht.

Antwort1

Erstens: Wenn Ihr BIOS/UEFI Ihren RAM nicht richtig erkennt, wird Ihr Betriebssystem auch nicht besser abschneiden. Wenn Ihr BIOS falsche Informationen zu Ihrem Setup anzeigt, müssen Sie nicht weitermachen.

=> Sie haben wahrscheinlichmindestensein Hardwareproblem.

BEARBEITEN: Aus Ihrem dmesg | grep-Speicher scheint hervorzugehen, dass SieTatsächlichein Hardwareproblem in Ihrem eingebetteten BIOS. Zumindest hat Linux es erkannt und warnt Sie davor: WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM. Es scheint auch, dass eines Ihrer 4 RAM-Module falsch erkannt oder eingesetzt wurde.

Sie können es entweder Ihrem Hersteller melden, Ihr BIOS aktualisieren und Ihr Motherboard austauschen. Es besteht eine große Chance, dass dieser Fehler mit weniger RAM nicht auftritt.

Als Randbemerkung: Vielleicht stimmen Sie diesem berühmten Zitat zu:Linus Torvalds über BIOS-Hersteller:

BIOS-Autoren sind ausnahmslos völlig inkompetente Crack-süchtige Affen

Zweitens, wenn Ihr BIOS mit dem, was Sie wirklich auf Ihrem Motherboard haben, einverstanden ist, können Sie einen Blick auf Linux werfen /proc/meminfo. Dort ist oft sehr klar, was Ihr Linux-System weiß und mit Ihrem Speicher macht. Hier ist, was ich auf meinem 64-Bit/8 GB RAM habe:

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

Informationen zum Startvorgang und dazu, was vom Linux-Kernel verwendet/freigegeben wird, können Sie hier abrufen dmesg:

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

BEARBEITEN: Wie Gilles sagte, dmidecode --type memorykönnen Sie mit Details zu Ihrer Hardwarekonfiguration erhalten. Für ein 4x2Gb-System sieht das so aus:

$ 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]

Antwort2

Durchsuchen Sie /var/log/dmesg nach der Speicherzuordnung (grep für „e820“) und zählen Sie, wie viel Speicher dort als nutzbar gemeldet wird. Dies ist, was das BIOS dem geladenen Betriebssystem für den Speicher mitteilt.

(Dies ist nur beim Booten im alten Stil richtig. Ich weiß nicht, wie der Speicher gemeldet wird, wenn ein Booten im EFI-Stil verwendet wird, aber ich vermute, dass es eine ähnliche Meldung gibt.)

Wenn das BIOS 16 GB meldet, obwohl 32 GB installiert sind, deutet dies auf eine Merkwürdigkeit bei der Speicherkonfiguration hin. Versuchen Sie, den installierten Speicher auf 4 oder 8 GB zu reduzieren und vergleichen Sie die Auswirkungen.

Antwort3

Viele ältere AMD-Boards haben zwar 4 Steckplätze, aber wenn Sie den letzten Steckplatz belegen, ist das ein Problem. Es handelt sich um ein Chipsatzproblem, das nicht behoben werden kann.

verwandte Informationen