これは実際には悪い考えです。クイック スイープでは、メモリを確実にテストすることはできません。これが、memtest86 のようなソフトウェアが異なるビット パターンの複数のパスを使用してメモリをテストする理由です。解決策:
<オール>memtest86 でメモリをテストします。できれば長時間のテストです。一晩実行したままにします。長い時間がかかります。
不良メモリが検出された場合は、memmap
を使用します カーネルがそのメモリを使用しないように強制するカーネル パラメータ:
memmap=nn[KMG]$ss[KMG] [KNL,ACPI] Mark specific memory as reserved. Region of memory to be used, from ss to ss+nn. Example: Exclude memory from 0x18690000-0x1869ffff memmap=64K$0x18690000 or memmap=0x10000$0x18690000
さらに、メモリ内の 1 ビット エラーを修正し、2 ビット エラーを自動的に検出する ECC メモリを使用できます (また、修正不可能なメモリの問題が発生した場合は、カーネルからログ メッセージを取得します)。
投稿と回答は問題を誤解しています。メモリ スクラビングは、訂正可能なシングル ビット エラーが訂正不能なダブル エラーにならないようにすることを目的としています。スクラバーは物理メモリをすべて使用するだけです (キャッシュ ミスを強制的に行う)。シングル ビット エラーがある場合は、それらが修正されます (また、修正では、コンペア アンド スワップを使用して正しい値を書き換える必要があります)。したがって、エラーはクリアされます。
そうしないと、既に 1 つのエラーがある単語に 2 つ目のエラーが発生した場合、単語全体が修正できなくなり、OS は抜本的な処理を行う必要があります。
スクラブがないと、(コードページのように) 読み取られるが書き込まれないメモリは時間の経過とともにエラーを蓄積する可能性があるため、スクラブは重要です。
答えはイエスです。これは透過的に行われます (エラーを検出するための ECC メモリがあり、安全に動作し続けるためのカーネル バージョンが少なくとも 2.6.30 である場合)。
基本的に、メモリはプロセッサからの読み取りごとにチェックされ、定期的に*スクラブされて、エラー修正コード (ECC) との整合性がチェックされます。エラーが発生した場合、Machine Check Exception が発生し、ログに記録され、mcelog (http://www.mcelog.org/) によって取得されます。
エラーが修正可能であった場合は、「リーキー バケット」カウンターがインクリメントされ、頻繁に故障する物理 DIMM が透過的に別の DIMM に交換されます。したがって、メモリ ページは新しい場所にコピーされ、仮想メモリ アドレスは新しいページを指すように更新され、古いページは OS によって使用されないようにマークされます。
これは、Linux では「ソフト オフライン」と呼ばれます (Solaris ではメモリ ページのリタイアメントです。他の OS については知りません)。
ただし、エラーが修正できなかった場合、いわゆる「ハード オフライン」が発生します。つまり、メモリ ページが通常のオペレーティング システムのメモリ管理から削除され、アプリケーションが強制終了されます (NB :キャッチ可能な SIGBUS シグナルによって、どこにあるかがわかります)。エラーが発生しましたが、気にせずキャッチしようとすることはめったにありません。メモリページがファイルからマップされてクリーンな場合、OS はプロセスを強制終了する代わりに、別の物理的な場所で透過的に再読み込みすることもできます。
mcelog で詳細を読むことができます。多くの構成オプションがあり、他の動作をトリガーしたり、オプションを取得したり、何を読むべきか、システムで mcelog が実行されていることを確認する方法についての他のリードを取得したりできます。
* スクラビング、または「パトロール スクラビング」は、メモリの読み取り、エラーの ECC に対するチェック、およびエラーが発見された場合の修正されたメモリ ワードでの上書きで構成されます。パトロール スクラビングという用語は、「デマンド スクラビング」と呼ばれることもある、メモリ読み取りのエラーで誤ったデータを上書きすることに反対して使用されます。スクラビングは、通常 BIOS を通じて有効にできるハードウェア手順です。