メモリスクラビングは、コンピュータの各メモリ位置からデータを読み出し、エラー訂正コード(ECC )を使用してビットエラー(存在する場合)を訂正し、訂正されたデータを同じ場所に書き戻すことから成ります。[ 1 ]
現代のコンピュータのメモリチップは集積密度が高いため、個々のメモリセル構造が小さくなり、宇宙線やアルファ粒子の放出の影響を受けやすくなっています。これらの現象によって引き起こされるエラーはソフト エラーと呼ばれます。デュアル インライン メモリ モジュール ( DIMM ) の 8% 以上が、年間少なくとも 1 つの訂正可能なエラーを経験しています。[ 2 ]これは、 DRAMおよびSRAMベースのメモリにとって問題となる可能性があります。個々のメモリ ビットでソフト エラーが発生する確率は非常に小さいです。しかし、現代のコンピュータ、特にサーバーに搭載されているメモリの量が多く、稼働時間が長いため、インストールされているメモリ全体でソフト エラーが発生する確率は大きくなります。
ECCメモリ内の情報は、メモリワードごとに1ビットのエラーを訂正できるほど冗長性をもって格納されています。そのため、ECCメモリはメモリ内容のスクラビングをサポートできます。つまり、メモリコントローラがメモリを系統的にスキャンすることで、1ビットのエラーを検出し、ECCチェックサムを用いてエラービットを特定し、訂正されたデータをメモリに書き戻すことができます。
同じワード内で複数のビットエラーが発生する可能性が高くなる前に、各メモリ位置を定期的に、十分な頻度でチェックすることが重要です。なぜなら、 1ビットエラーは訂正できますが、一般的な(2008年時点の)ECCメモリモジュールでは、複数のビットエラーは訂正できないからです。
CPUからの通常のメモリ要求を妨げず、パフォーマンスの低下を防ぐため、スクラビングは通常、アイドル状態のときにのみ実行されます。スクラビングは通常の読み書き操作で構成されるため、スクラビングを行わない場合と比較してメモリの消費電力が増加する可能性があります。そのため、スクラビングは継続的にではなく、定期的に実行されます。多くのサーバーでは、 BIOSセットアッププログラムでスクラビングの間隔を設定できます。
CPUやDMAデバイスによって発行される通常のメモリ読み出しではECCエラーがチェックされますが、データ局所性の理由から、読み出し対象は限られたアドレス範囲に限定され、他のメモリ位置は長期間アクセスされないままになることがあります。これらの位置は複数のソフトエラーに対して脆弱になる可能性がありますが、スクラビング処理によってメモリ全体が一定時間内にチェックされることが保証されます。
システムによっては、メインメモリ(DRAMベース)だけでなく、CPUキャッシュ(SRAMベース)もスクラビングできます。ほとんどのシステムでは、両方のスクラビング頻度を個別に設定できます。キャッシュはメインメモリよりもはるかに小さいため、キャッシュのスクラビングはそれほど頻繁に行う必要はありません。
メモリスクラビングは信頼性を向上させるため、信頼性、可用性、保守性(RAS)機能として分類できる。
通常、パトロールスクラビングとデマンドスクラビングという2つのバリアントがあります。どちらも基本的にメモリスクラビングと関連するエラー訂正(可能な場合)を実行しますが、主な違いは、これら2つのバリアントの開始方法と実行方法です。パトロールスクラビングはシステムがアイドル状態のときに自動的に実行されますが、デマンドスクラビングはデータが実際にメインメモリから要求されたときにエラー訂正を実行します。[ 3 ]