エラーロギング

また、DRAMにハード故障が発生し記憶セルが壊れてしまうと、その番地を読むと常にエラー(正確には、"1"固定の故障の場合は、"0"を書き込んだ場合だけがエラーになり、"1"を書き込んだ場合は、正常に動作しているように見えてしまう)が起きる。しかし、1ビットエラーであるとSECDEDコードでエラー訂正ができるので、サーバは正常に動作できてしまう。

しかし、このような固定故障がある状態では、その番地にソフトエラーが発生すると2ビットエラーになってSECDEDコードでは訂正不能になる。仮に全部の番地に1ビットの固定故障がある状態では、前記の例では230,400,000fitで、全体の100万分の1の番地に1ビット固定故障がある状態でも230fitと0.08fitと比べると各段に高い2ビットエラー率となってしまう。

「DRAM Errors in the Wild: A Large-Scale Field Study」というGoogleの大量のサーバのDIMMのエラーを調査した論文があるが、Googleでは1ビット固定故障は放置し、2ビットエラーとなったDIMMだけを交換するという方法をとっており、1ビット固定故障の番地が繰り返し使われるので、DRAMのエラー率は20,000~75,000fit/Mbitになったという。これは256MbitのDRAMチップでは500万~2000万fitのエラー率であり、前記の10万fitより大幅に高い値である。

従って、1ビット固定故障が発生したDIMMは早期に交換することが望ましい。このため、ハイエンドのミッションクリティカルサーバでは、訂正可能な1ビットエラーが起こった場合でもその番地を記録する。これを「エラーロギング」という。そして、適当な頻度でエラーログをチェックし、同一の番地で一定の回数以上の訂正可能なエラーが記録されていると、その番地に固定故障が発生しているとみなして、ページテーブルからその番地を含むブロックを削除してその番地のメモリを使用しないようにする、そして、定期保守などの時点でDIMMを交換するという対策をとる。このようにすると1ビットの固定故障が蓄積して行き、訂正不能な2ビットエラーの発生確率が増加するのを抑えることができる。