Linuxにはメモリを「スクラブ」するメカニズムがありますか?例えば不良RAMチップがインストールされていてもシステムが「安全に」動作し続けることができるように、メモリをテストし、障害が発生した場合は領域をダーティとしてマークしますか?!
答えは「はい」であり、透過的に実行されます(エラーを検出するためのECCメモリがあり、安全に動作し続けるためにカーネルバージョンが少なくとも2.6.30である場合)。
基本的に、メモリはプロセッサからの読み取りごとにチェックされ、定期的にスクラブされて*、エラー訂正コード(ECC)との整合性がチェックされます。エラーが発生した場合は、マシンチェック例外が発生します。この例外はログに記録され、mcelog( http://www.mcelog.org/ )によって取得されます。
エラーが修正可能である場合、「リーキーバケット」カウンターがインクリメントされます。これにより、頻繁に失敗する物理DIMMが透過的に別のDIMMに交換されなくなります。したがって、メモリページは新しい場所にコピーされ、仮想メモリアドレスは新しいページを指すように更新され、古いページはOSによって使用されないようにマークされます。
これは、Linuxでは「ソフトオフライン」と呼ばれます(Solarisではメモリページのリタイア、他のOSについてはわかりません)。
ただし、エラーが修正できなかった場合は、いわゆる「ハードオフライン」が発生します。つまり、メモリページが通常のオペレーティングシステムのメモリ管理から削除され、アプリケーションが強制終了されます(注:どこにあるかを示すキャッチ可能なSIGBUS信号によって)エラーが発生しましたが、気にせずにキャッチしようとすることはめったにありません)。メモリページがファイルからマップされてクリーンアップされている場合、OSはプロセスを強制終了する代わりに、別の物理的な場所に透過的にリロードすることもできます。
Mcelogの詳細を読むことができ、多くの構成オプションがあり、他の動作をトリガーすることができ、オプション、および何を読むか、mcelogがシステムで実行されていることを確認する方法に関する他のリードを得ることができます。
*スクラビング、または「パトロールスクラビング」は、メモリの読み取り、ECCに対するエラーのチェック、およびエラーが検出された場合の修正されたメモリワードでの上書きで構成されます。パトロールスクラビングという用語は、メモリ読み取りのエラーに関する誤ったデータを上書きすることに反対するために使用されます。これは、「デマンドスクラビング」と呼ばれることもあります。スクラビングは、通常はBIOSを介して有効にできるハードウェア手順です。
これは実際には悪い考えです。クイックスイープでメモリを確実にテストすることはできません。これが、memtest86のようなソフトウェアがメモリをテストするために異なるビットパターンで複数のパスを使用する理由です。解決:
memtest86 、できれば長いテストでメモリをテストし、一晩実行したままにします。長い時間がかかります。
不良メモリが検出された場合は、memmap
カーネルパラメータ を使用して、カーネルにそのメモリを使用しないように強制します。
memmap = nn [KMG] $ ss [KMG] [KNL、ACPI]特定のメモリを予約済みとしてマークします。 使用するメモリの領域(ssからss + nnまで)。 例:0x18690000-0x1869ffff memmap = 64K $ 0x18690000 または memmap = 0x10000 $ 0x18690000 からメモリを除外します。
さらに、1ビットエラーを修正し、メモリ内の2ビットエラーを自動的に検出するECCメモリを使用できます(修正できないメモリの問題が発生した場合は、カーネルからログメッセージを受け取ります)
投稿と回答は問題を誤解しています。メモリスクラビングは、修正可能なシングルビットエラーが修正不可能なダブルエラーに変わるのを防ぐことを目的としています。スクラバーは、たまにすべての物理メモリ(キャッシュミスを強制する)にすぎません。シングルビットエラーがある場合、それらは修正され(そして、修正はコンペアアンドスワップを使用して正しい値を書き換える必要があります)、エラーをクリアします。
そうしないと、すでに1つのエラーが発生しているWordで2番目のエラーが発生した場合、Word全体が修正不能になり、OSは大幅な処理を行う必要があります。
スクラブがないと、(コードページのように)読み取られても書き込まれないメモリが時間の経過とともにエラーを蓄積する可能性があるため、スクラブは重要です。
ECCメモリがある場合は、 https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac を詳しく調べてください。 (「sdram_scrub_rate」は特に興味深いと思いました。)
(このリンクがどこかで壊れた場合(実際にはそうすべきではありません)、適切なLinuxドキュメントをダウンロードして、「スクラブ」を検索することをお勧めします。)