無停止サービスにおけるメモリーエラー対策

メモリーのエラーはハードエラーとソフトエラーの2つに分類して対策を考えます。

ソフトエラー

ソフトエラーはハードエラーと違って非破壊的にメモリー値が反転するエラーです。一時的なものでメモリーデバイスを交換する必要はありませんが、システムを停止させる原因になります。ただし、発生頻度が低いことから、一般的なパソコンではソフトエラーに対する対策は行われていません。

ソフトエラーの実際の頻度はどれくらいになるのでしょうか?Googleのサーバの大半の約2年半にわたるデータ収集をもとに行った研究によると、平均でGoogleのサーバの3台に1台ほどで1年当たり1回の訂正可能なメモリエラーが発生し、100台に1台で1回の訂正不可能なエラーが発生すると報告しています。この研究から考えると、ソフトエラーによるシステムの停止は ECC なしでは 年に 1/3 回で、 ECC 付きだと 年に 1/100 となると考えて良さそうです。また、ソフトエラーによる停止の確率を 0 にすることは出来ませんが ECC付きメモリーが有効な対策であること分かります。

パリティチェック
パリティチェックは多くのエラーを検出できますが、パリティチェックではシングルビットエラーが奇数個存在する場合だけ検出できます。また、エラーとなったビットの位置を特定して訂正することができません。従ってパリティチェックでエラーを検出してもエラー訂正できませんのでサーバは停止します。
ECCメモリ
ECCはシングルビットエラーを訂正できますので、シングルビットエラーの場合には、システムを停止させずに済みます。ECCはパリティチェックよりソフトエラーによる停止の確率を大幅に下げます。

ハードエラー

ハードエラーは回路自体がダメージを受けて発生するエラーで、初期不良や、経年劣化で電気的な特性が変わり動作不良を起こすと考えられ、ハードエラーが原因である場合には回復せず、ハードエラーでのビット化けはマルチビットエラーになる事が多いので、ECC 付きメモリーでも対策になりません。従って、メモリーデバイス自体を交換することになります。

システムの稼働中にメモリーを交換できるメモリーのホットプラグをサポートするシステムはかなりマイナーで限られており高価になります。サーバーが SPOF(単一障害点) でもなければ多重化することでサービスの停止時間をなくす対応ができますので、SPOFを無くす設計を行う対策が一般的になります。