web-dev-qa-db-ja.com

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

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

memtest86+は、DRAMの問題を診断するための最も有用なツールの1つです。それはメモリの最初にそれ自体をロードするので、memtest86+memtest86+がロードされるメモリの部分をチェックするかどうか疑問に思っていました。

memtest86+に割り当てられたメモリは小さいので問題ないのですか、それともmemtest86+はメモリの場所をテストできないため、DRAMの欠陥を見逃す可能性がありますか?

65
Robin

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

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

しかし、この再配置のトリックがあっても、memtest86 +は次の理由ですべてのメモリをテストできません。

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

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

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

78
Sergey Vlasov

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

-

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

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

5
shodanshok