
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 -m
meldet 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 -r
es erscheint 2.6.32-5-amd64
eindeutig 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/2011
hat1007 02/10/2012
nicht 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
dmesg
Ausgabe ü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 angezeigtfree
. - Das Aktualisieren/Neuinstallieren des Kernels (es war ein kleineres Upgrade verfügbar) scheint auch die MTRR-Probleme behoben zu haben.
dmesg
Jetzt werden insgesamt 26198016 KB und keine MTRR-Fehler gemeldet, was meinen Erwartungen bei einer Installation von 3 x 8 GB entspricht.free -m
Jetzt 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 -m
meldet 32194 MB Gesamtspeicher und der Kernel meldet 34586624k
RAM 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 memory
kö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.