memtest86 +は、それ自体を実行するために使用されるメモリをテストしますか?


65

一般的なサーバー障害シナリオの1つは、DRAMの不良であり、ECCメモリが使用されている場合もあります。

memtest86+DRAMの問題を診断する最も便利なツールの1つです。メモリの開始時に自動的にロードされるmemtest86+ため、memtest86+ロードされるメモリの部分をチェックするかどうか疑問に思っていました。

割り当てられたメモリはmemtest86+非常に小さいので、重要ではありませんか、それが存在memtest86+するメモリの場所をテストできないためにDRAMの欠陥を見逃す可能性がありますか?


8
この質問はサーバーに関連していますが、通常のPCにも関連しているので、この質問をより多くの人に届くことができるスーパーユーザーに移動することに投票しました。
クリスチャン・シウピトゥ

回答:


78

明らかに、memtest86 +は、現在memtest86 +実行可能コードを含むメモリ領域をテストできません(ただし、その領域にメモリエラーがある場合、テスト自体がクラッシュする可能性が非常に高くなります)。ただし、me​​mtest86 +は実行時に独自のコードを別のアドレスに再配置できます。このトリックを使用することで、ファームウェア(BIOS)で使用を許可されているすべてのメモリをテストできます。

このコードの再配置は、memtest86 +ソースコードアーカイブ内のREADME.backgroundで説明されています(ファイルは少し古くなっています。たとえば、memtest86 +コードに使用されるアドレスは0x2000および0x200000ですが、ソースで定義されている下位アドレスは実際には0x10000で、上位アドレスはマシンのメモリ量に応じて0x2000000または0x300000です。

ただし、この再配置トリックを使用しても、memtest86 +は次の理由ですべてのメモリをテストすることはできません。

  • 通常、ファームウェア(BIOS)は、独自の使用のためにいくつかのRAM領域(ACPIテーブルなど)を予約します。これらのRAM領域はCPUからアクセスできますが、何かを書き込むと、予期しない動作が発生する可能性があります。

  • RAMの一部はシステム管理モードに使用され、特権SMMコード以外のCPUからもアクセスできません。

  • 640Kから1MまでのRAMアドレス範囲は、レガシーPCメモリレイアウトの癖によりアクセスできません(このRAMの一部はBIOS ROMおよびSMMのシャドウとして使用される場合があり、他の部分は完全にアクセスできない場合があります)。


1
興味深いことに、私はその移転能力を逃しました。SMMなどは明らかに範囲外です(特定のBIOSサポートは除く)。
shodanshok

それらのマップされた領域は、一般に他の「モジュール外」が対処されているため、DRAMを除外しますか?ROMと周辺機器が言う。
mckenzm

3
あなたは、いくつかのRAMモジュールを持っている場合は、それらを入れ替えた後、第2のテストを実行...
JFL

命令を書き直したために、memtestが誤って成功を報告するように、メモリを適切な方法で失敗させることは可能ですか?むしろ、それはいくつの障害がかかりますか?
ジョンドボラック

3
@JanDvorak:理論的には、もちろん可能です。実際には、キーボードで頭を叩いたり、シェイクスピアのソネットをランダムに入力したりするよりも少しだけ可能性が高いと思います。
イルマリカロネン

5

いいえ、memtestは独自のメモリをテストできません。ただし、非常に小さいため(KBのみ)、ほとんど問題になりません。編集:選択した回答に記載されているように、memtestは動的に自分自身を再配置して、すべてのユーザーアドレス可能メモリをテストできるため、このステートメントは間違っています。

-

理論的には、最新のプロセッサはブート時にキャッシュの一部をプログラム可能なメモリとして構成でき、非常に小さなプログラム内から(memtestとして)DRAMにまったく触れることなく実行できます。

ただし、これはモデル固有の機能(BIOSサポートが必要)であり、memtestがそれを使用しているとは思わない。


ご回答ありがとうございます。memtestCPUキャッシュもテストしています。もしそうならmemtest、このキャッシュにロードされるだろう、キャッシュのこの部分は、それがメモリよりもはるかに小さいですので、より問題である、テストすることができませんでしたか?
ロビン

2
memtest86のドキュメントにこだわって、少なくとも直接的な方法では、プロセッサキャッシュをテストしませ。さらに、最新のプロセッサには、個別の命令とデータキャッシュ(I $とD $)があります。実行可能コードは命令キャッシュにロードされ、直接変更/上書きすることはできません
-shodanshok

1
memtest86 +はCPUのデータキャッシュを確実にテストしますが、この質問には関係ありません。回答ありがとうございます。
ロビン

3
あなたはこれについて確信を持っていますか?通常のメモリをテストしているときに、他の場所に自分自身をコピーすると思った。だから、すべてのテストには遅い部分(メモリの大部分)と非常に速い部分(コード/データが保存される小さなビット)がある。
ピーターコーデス

1
@DmitryGrigoryev:ああ大丈夫..だから私はもっと何かを学んだ:-)どうもありがとう!
ロビン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.