web-dev-qa-db-ja.com

memtestが複数のアドレス間で同じビットのビットフリップを表示するのはなぜですか?

今日、memtestに失敗するという不幸な経験をしましたが、結果は少し変わっているようで、いくつか質問があります。もちろん、これはおそらく私がRAMを返すことで終わるでしょうが、それでも私は何が悪かったのかを理解したいと思います。

MemtestログPastebin。

私が気づいたのは、複数のアドレスにわたって、失敗したのは常に最初のバイトの最後のビットであったということです。これを示すログのセクションは次のとおりです。

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

2台の異なるコンピューターでRAMをテストしたところ、同じエラーが発生しました。これらの結果は、発生している内部ロジックのエラーについて何か教えてくれますか?バイトのセットが共有しているためだと思います。同じアドレス指定ロジックですが、失敗はメモリバイトで順次発生すると予想されます。または、これらすべてのアドレスの失敗ビットが同じであり、何らかの理由で同じバイトに再実行ごとに異なるアドレスが割り当てられる可能性がありますか?

第二に、memtestはいくつかのテストに失敗しただけでした。具体的には、複数のmemtestを実行した後でも、テスト0から2に失敗しませんでした。私は各テストの基本的な知識しか持っていませんが、最初のいくつかのテストでエラーが発生しなかったことに驚いています。理由は何ですか?

2
Styil

これは、このウィキペディアの記事で説明されているレイアウトが原因である可能性があります: ロウハンマー

ダイナミックRAM(DRAM))では、格納されたデータの各ビットが個別のメモリセルを占有します[…]

メモリセル(図の青い四角)はさらにマトリックスに編成され、行と列でアドレス指定されます。マトリックスに適用されたメモリアドレスは、行アドレスと列アドレスに分割され、行アドレスデコーダーと列アドレスデコーダーによって処理されます(図では、それぞれ垂直方向と水平方向の緑色の長方形)。行アドレスが読み取り操作のために行を選択した後(選択は行アクティブ化とも呼ばれます)、行内のすべてのセルからのビットは、行バッファー(図の赤い四角)を形成するセンスアンプに転送され、そこから正確なビットは、列アドレスを使用して選択されます。

image

画像ソース(パブリックドメイン)

仮説:特定の行バッファー(赤い四角)の1ビットに問題があります。バッファが対応する行の読み取りに影響します。私は、それが毎回、すべての行と書き込まれたデータに対して発生するとは主張していません。しかし、この行列形式と行バッファー(または同様のもの)は、常に最初のバイトの最後のビットが失敗したという事実と関係があると思います。


第二に、memtestはいくつかのテストに失敗しただけで、具体的にはテスト0から2に失敗しませんでした[…]。最初のいくつかのテストでエラーが発生しなかったことに驚いています。理由は何ですか?

このマニュアル テストとは何かを説明しています:

  • テスト0 [アドレステスト、ウォーキングテスト、キャッシュなし]

ウォーキング1アドレスパターンを使用して、すべてのメモリバンクのすべてのアドレスビットをテストします。

  • テスト1 [アドレステスト、自分のアドレス、シーケンシャル]

各アドレスは独自のアドレスで書き込まれ、整合性がチェックされます。理論的には、以前のテストでメモリアドレスの問題を検出できたはずです。このテストでは、以前は検出されなかったアドレス指定エラーを検出する必要があります。このテストは、使用可能なCPUごとに順番に実行されます。

  • テスト2 [アドレステスト、自身のアドレス、並列]

テスト1と同じですが、テストはすべてのCPUを使用し、重複するアドレスを使用して並行して実行されます。

テスト0〜2は、必ずしも実際のデータエラーではなく、アドレス指定エラーをキャッチするように設計されていることを理解しています。すべてのエラーをキャッチできた場合は、それ以上のテストは必要ありません。

2