Warum zeigt memtest einen Bitflip desselben Bits an mehreren Adressen an?

513
Styil

Ich hatte die unglückliche Erfahrung, heute einen Memtest nicht bestanden zu haben, aber die Ergebnisse scheinen etwas seltsam zu sein, und ich habe einige Fragen dazu. Natürlich wird dies wahrscheinlich dazu führen, dass ich den RAM zurückschicke, aber ich möchte trotzdem verstehen, was schief gelaufen ist.

Memtest Log Pastebin.

Ich habe festgestellt, dass es eigenartig war, dass bei mehreren Adressen immer das letzte Bit des ersten Bytes fehlgeschlagen ist. Hier ist ein Abschnitt des Protokolls, der dies zeigt.

2018-01-27 07:19:35 - [MEM ERROR - Data] Test: 6, CPU: 1, Address: 252A019F8, Expected: FEF7FFFF, Actual: FFF7FFFF 2018-01-27 07:19:35 - [MEM ERROR - Data] Test: 6, CPU: 1, Address: 253201A38, Expected: FEFEFFFF, Actual: FFFEFFFF 2018-01-27 07:19:35 - [MEM ERROR - Data] Test: 6, CPU: 2, Address: 255641A98, Expected: FEF7FFFF, Actual: FFF7FFFF 2018-01-27 07:19:35 - [MEM ERROR - Data] Test: 6, CPU: 2, Address: 255E41CB8, Expected: 00000000, Actual: 01000000 2018-01-27 07:19:35 - [MEM ERROR - Data] Test: 6, CPU: 2, Address: 257641A78, Expected: FEF7FFFF, Actual: FFF7FFFF 2018-01-27 07:19:35 - [MEM ERROR - Data] Test: 6, CPU: 2, Address: 257E41C98, Expected: 00000000, Actual: 01000000 2018-01-27 07:19:35 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 259201A58, Expected: FEFEFFFF, Actual: FFFEFFFF 2018-01-27 07:19:35 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 259201B58, Expected: FEEFFFFF, Actual: FFEFFFFF 2018-01-27 07:19:35 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 259645310, Expected: 01004000, Actual: 00004000 2018-01-27 07:19:36 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 259A01A18, Expected: FEFFF7FF, Actual: FFFFF7FF 2018-01-27 07:19:36 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 259A01AD8, Expected: FEFFBFFF, Actual: FFFFBFFF 2018-01-27 07:19:36 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 25B201A38, Expected: FEFEFFFF, Actual: FFFEFFFF 2018-01-27 07:19:36 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 25B201B38, Expected: FEEFFFFF, Actual: FFEFFFFF 

Ich habe den RAM auf zwei verschiedenen Computern getestet und zu demselben Fehler geführt. Sagen diese Ergebnisse mir etwas über den Fehler in der internen Logik, der sich ereignet? Ich würde denken, es liegt daran, dass ein Satz von Bytes dieselbe Adressierungslogik hat, aber ich würde erwarten, dass die Fehler dann im Speicher bytes sequentiell sind. Oder könnte es sein, dass das fehlerhafte Bit über alle diese Adressen hinweg gleich ist und dass das gleiche Byte aus irgendeinem Grund bei jeder Wiederholung eine andere Adresse erhält?

Zweitens hat der Memtest nur einige Tests nicht bestanden, insbesondere die Tests 0 bis 2, auch nach mehreren Memtests. Ich habe nur Grundkenntnisse über die einzelnen Tests, aber ich bin überrascht, dass die ersten Tests nie zu einem Fehler geführt haben. Grund warum?

0

1 Antwort auf die Frage

1
Kamil Maciorowski

Dies kann auf das in diesem Wikipedia-Artikel beschriebene Layout zurückzuführen sein: Reihenhammer .

Im dynamischen RAM (DRAM) belegt jedes Bit der gespeicherten Daten eine separate Speicherzelle […]

Speicherzellen (blaue Quadrate in der Abbildung) sind weiter in Matrizen organisiert und werden durch Zeilen und Spalten adressiert. Eine an eine Matrix angelegte Speicheradresse wird in die Zeilenadresse und die Spaltenadresse aufgeteilt, die von den Zeilen- und Spaltenadressendecodern (in der Abbildung jeweils vertikale und horizontale grüne Rechtecke) verarbeitet werden. Nachdem eine Zeilenadresse die Zeile für eine Leseoperation ausgewählt hat (die Auswahl wird auch als Zeilenaktivierung bezeichnet), werden Bits aus allen Zellen in der Zeile in die Leseverstärker übertragen, die den Zeilenpuffer bilden (rote Quadrate in der Abbildung) Das genaue Bit wird über die Spaltenadresse ausgewählt.

Bild

Bildquelle (gemeinfrei)

Hypothese: mit einem Bit eines bestimmten Zeilenpuffers (rote Quadrate) stimmt etwas nicht; Dies beeinflusst das Lesen einer Zeile, der der Puffer entspricht. Ich behaupte nicht, dass es jedes Mal, für jede Zeile und alle geschriebenen Daten geschehen wird. Ich glaube jedoch, dass diese Matrixform und der Reihenpuffer (oder ähnliches) etwas damit zu tun haben, dass es immer das letzte Bit des ersten Bytes ist, das versagt hat.


Zweitens hat der memtest nur ein paar Tests bestanden, insbesondere die Tests 0 bis 2 […]. Ich bin überrascht, dass die ersten Tests nie zu einem Fehler geführt haben. Grund warum?

Dieses Handbuch beschreibt die Tests:

  • Test 0 [Adresstest, gehende, kein Cache]

Testet alle Adressbits in allen Speicherbänken unter Verwendung eines Adressierungsmusters.

  • Test 1 [Adressprüfung, eigene Adresse, sequenziell]

Jede Adresse wird mit einer eigenen Adresse geschrieben und anschließend auf Konsistenz geprüft. Theoretisch sollten frühere Tests Probleme mit dem Speicher aufgefangen haben. Dieser Test sollte Adressierungsfehler abfangen, die zuvor nicht erkannt wurden. Dieser Test wird nacheinander mit jeder verfügbaren CPU durchgeführt.

  • Test 2 [Adresstest, eigene Adresse, parallel]

Wie Test 1, aber der Test wird parallel mit allen CPUs und überlappenden Adressen durchgeführt.

Ich verstehe, dass die Tests 0-2 Adressfehler abfangen, nicht unbedingt tatsächliche Datenfehler. Wenn sie alle Fehler abfangen konnten, wären keine weiteren Tests erforderlich.