回答:
答えは「はい」であり、透過的に行われます(エラーを検出するための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つのエラーがある単語で2番目のエラーが発生すると、単語全体が修正不能になり、OSが大幅な処理を行う必要があります。
スクラブは重要です。スクラブを行わないと、読み取りは行われるが書き込まれない(コードページのような)メモリが時間の経過とともにエラーを蓄積する可能性があるためです。
ECCメモリを使用している場合は、https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edacをよく確認してください。(「sdram_scrub_rate」は特に興味深いものでした。)
(このリンクがどこかの時点で壊れた場合(実際にはそうならないはずです)、適切なLinuxドキュメントをダウンロードして「scrub」を検索することをお勧めします。)