ECCメモリとは
ECCメモリ(Error-correcting code memory)は、
コンピュータの
記憶装置の一種で、データの破損を検出し、修正する機能を持つメモリです。これにより、長期連続稼働におけるデータ化けやシステム異常終了を防ぐことができます。
ECCメモリの必要性
ECCメモリは、特に以下のような環境で重要となります。
科学技術計算やCGレンダリング:計算に時間を要する処理では、データのわずかな破損が結果に大きな影響を与える可能性があります。
金融機関:データの正確性が非常に重要で、データの破損は大きな損失につながる可能性があります。
データセンター:年中無休でWebサイトやクラウドサービスを提供するため、システムの安定性とデータの信頼性が求められます。
これらの環境では、ECCメモリのエラー訂正機能がシステムの安定稼働に不可欠です。
ECCメモリの仕組み
ECCメモリは、1ビットのエラーが発生しても、データを修正して維持することができます。もしビットが反転した場合でも、読み出されるデータは常に書き込まれたときと同じになるように修正されます。
一方、非ECCメモリはエラーを修正できません。パリティ付きの非ECCメモリはエラーを検出できますが、訂正はできません。
ECCメモリの性能劣化
初期のECCメモリは、エラー検出・訂正処理のために非ECCメモリに比べて数%程度の性能劣化が発生するとされていました。しかし、CPUにECC機能が統合されてからは、この問題はほぼ解決されています。
背景にある問題
コンピュータシステム内部では、電磁気的な干渉によってダイナミックRAM(DRAM)のビットが自発的に反転することがあります。この現象は、かつてはチップのパッケージに含まれる不純物から放射されるアルファ粒子が主な原因だと考えられていましたが、現在では環境放射線、特に二次宇宙線に含まれる中性子によってメモリセルの内容が変化することが主な原因であることがわかっています。
エラー発生率と環境
エラー発生率は標高とともに上昇します。例えば、標高1,500mでは海面よりも中性子束が3.5倍に増え、旅客機の巡航高度(10〜12km)では300倍にもなります。そのため、高度の高い場所で運用される機器には特別な信頼性対策が必要となります。
宇宙環境での事例
1997年に打ち上げられた土星探査機カッシーニは、市販のDRAMチップを搭載したフライトレコーダーを2つ搭載していました。組み込みの誤り検出訂正機能(EDAC)により、1ビットエラーと2ビットエラーの数を報告していました。初期の2年半の飛行で、探査機は1日に約280回の1ビットエラーを検知していましたが、太陽フレアの影響で1日のエラー数が4倍以上に増加したことがありました。
メモリの高密度化とエラー
DRAMの高密度化とチップの微細化が進むにつれて、DRAMチップが放射線の影響を受けやすくなることが懸念されています。しかし、近年の研究では、プロセスの進化やメモリセルの構造改善により、宇宙線によるソフトエラー(SEU)が劇的に減少していることも示されています。
実験によるエラー率の観測
Googleの大規模なサーバーを対象にした研究では、観測されたエラー発生率が小規模な研究よりも数桁高く、1メガビットあたり10億時間ごとに25,000〜70,000回(8ギガバイトのRAMで1時間に5ビットのエラー)でした。また、毎年8%以上のDIMMがエラーの影響を受けていたと報告されています。
メモリエラーの影響
メモリエラーは、システムクラッシュやデータの損失を引き起こす可能性があります。また、セキュリティの脆弱性の原因にもなることがわかっています。メモリエラーは、観測可能な誤動作の原因になったり、計算や保存に使われるデータに影響を与えたりする可能性があります。
ロウハンマー攻撃のような特殊なケースでは、隣接するメモリセルへの意図的なアクセスによって、DRAMメモリセル間の分離を迂回し、近傍の行の内容を書き換えることが可能です。この現象はセキュリティ上のリスクにつながります。
解決策
ビット反転に対処するために、以下のようなアプローチが開発されています。
障害許容性プログラミング(immunity-aware programming)
パリティ付きRAM
ECCメモリ
これらのうち、ECCメモリは最も効果的な解決策の一つです。ECCメモリは、余分な
ビットを持ち、これらの
ビットを使ってパリティや誤り訂正符号(ECC)を記録します。最も一般的な誤り訂正符号はハミング符号で、1
ビットのエラーを訂正でき、2
ビットのエラーを検出できます(SECDED)。
その他のエラー訂正技術
Chipkill ECC:メモリチップ全体のデータ損失を含む複数ビットのエラーを訂正できます。
メモリスクラブ:定期的にすべてのアドレスを読み、エラーを訂正したデータを書き戻すことで、ソフトエラーを解消します。
インターリーブ:複数の物理的に隣接したビットを異なるワードに配置することで、単一の宇宙線による影響を軽減します。
実装
初期のコンピュータではパリティチェックが利用されていましたが、その後、多くのPCではパリティチェックが省略されています。現在では、マイクロプロセッサの多くがECCメモリをサポートしていますが、マザーボードによってはECCメモリをサポートしていないものもあります。
ECC対応のメモリコントローラは、64ビットワードごとに1ビットのエラーを訂正し、2ビットのエラーを検出できます。コンピュータのBIOSやOSによっては、検出・訂正したメモリエラーを計数し、故障したメモリモジュールの特定に役立てることができます。
DRAMチップには誤り訂正回路を内蔵するものもあり、ECCメモリコントローラを持たないシステムでもECCメモリの恩恵を受けられることがあります。また、システムによっては、EOSメモリモジュールを使用することで同様の効果を得ることができます。
誤り訂正符号の種類
ハミング符号:1
ビットのエラーを訂正し、2
ビットのエラーを検出できます(SECDED)。
シャオ符号(Hsiao code):ハミング符号よりもハードウェアを小型で高速にできます。
その他、多ビット訂正符号として、DECTED、SNCDND、リード・ソロモン符号などが提案されていますが、実際には複数のSECDED符号をインターリーブして実装されることが多いです。
ECCの進化
初期のECC実装では、訂正可能なエラーをマスクし、訂正不可能なエラーのみを報告していました。しかし、新しい実装では、訂正可能なエラー(CE)と訂正不可能なエラー(UE)の両方を記録します。
多くのプロセッサは、チップ上のキャッシュメモリでも誤り訂正符号を使用しています。主な手法としては、以下の2つがあります。
EDC/ECC:レベル1キャッシュで誤り検出符号(EDC)を使用し、エラーが検出された場合は、ECCで保護されたレベル2キャッシュからデータを復元します。
ECC/ECC:レベル1とレベル2の両方のキャッシュでECCを使用します。
レジスタードメモリ
レジスタードメモリは、ECCメモリとは異なる目的を持つメモリです。レジスタードメモリは、多くのメモリモジュールを使用するサーバーで、電気的な問題を回避するために使用されます。一般的には、サーバーで使用されるメモリは、レジスタードであり、かつデータ完全性のためにECCです。一方、デスクトップパソコンで使用されるメモリは、経済性のためにレジスタードでもECCでもないことが多いです。
利点と欠点
ECCメモリの主な利点は、検出されないデータの破損から保護できることです。これは、特に科学技術計算、金融情報処理、ファイルサーバーなど、データの正確性が求められる環境で重要です。また、ECCメモリは、特にマルチユーザーのサーバーや高可用性システムにおいて、システムクラッシュの回数を減らすことができます。
ECCメモリの主な欠点は、非ECCメモリよりも高価であることです。これは、ECCメモリモジュールの製造に余分な回路が必要であり、生産量が少ないためです。また、ECCメモリ対応のマザーボードやチップセットも高価になります。
ECCメモリは、アプリケーションや実装によってはメモリ性能がわずかに低下する可能性があります。しかし、CPUにECC機能が統合された新しいシステムでは、この遅延はほぼなくなっています。
コンシューマー向けECC
AMDのコンシューマー向けプロセッサの一部には、ECC機能が実装されており、ファームウェアで無効とされていないマザーボードでは、通常の価格帯でECCメモリを使用できます。
まとめ
ECCメモリは、データ破損からシステムを保護するための重要な技術です。特にデータの正確性やシステムの安定稼働が求められる環境では、ECCメモリの導入を検討すべきでしょう。一方で、コストやわずかな性能低下があることも考慮に入れる必要があります。
参考文献
SoftECC: A System for Software Memory Integrity Checking
A Tunable, Software-based DRAM Error Detection and Correction Library for HPC
Detection and Correction of Silent Data Corruption for Large-Scale High-Performance Computing
Single-Bit Errors: A Memory Module Supplier’s perspective on cause, impact and detection
Intel Xeon Processor E3 - 1200 Product Family Memory Configuration Guide