ECCメモリ
[Wikipedia|▼Menu]
多くの ECCメモリ DIMM は片面につき、非ECC DIMM より1個多い9個のメモリチップを搭載している。(モジュールによっては5個または18個のこともある)[1]

ECCメモリ(Error-correcting code memory、Error checking and correction memory、Error check and correct memory)とは、コンピュータの記憶装置の種類の1つで、最も一般的な種類の内部データ破損(英語版)を検出し修正することができるものである。ECCメモリは科学技術計算や金融機関など、どんな状況でもデータの破損が許されないコンピュータの多くで使われている。

一般に、ECCメモリは1ビットのエラーでは影響を受けないように記憶装置を維持する。もし1ビットまたはそれ以上のビットが実際に反転して壊れたとしても、各ワードから読み出されるデータは常に書き込まれたときのデータと同じである。ほとんどの非ECCメモリは誤りを検出できない。パリティをサポートする非ECCメモリは誤りを検出できるが、訂正はできない。
目次

1 背景の問題

2 解決策

3 実装

4 キャッシュ

5 レジスタード・メモリ 

6 利点と欠点

7 参考文献

8 外部リンク

背景の問題

コンピュータシステム内部の電磁気的な干渉により、ダイナミックRAM(DRAM)の1ビットが自発的に反転することがある。はじめはチップのパッケージに含まれる不純物から放射されるアルファ粒子が主な原因だと考えられていたが、DRAM チップの単発的なソフトエラーの多くは環境放射線、主に二次宇宙線に含まれる中性子によって1つかそれ以上のメモリセル(英語版)の内容が変化するか、読み出しまたは書き込み回路が妨害されるためであることが研究で示された[2]。したがって誤り率は標高とともに急速に上昇する。たとえば、標高1,500mでは海面よりも中性子束が3.5倍に増え、10?12kmの高度(旅客機の巡航高度)では300倍にもなる[3]。 その結果、高度の高い場所で運用される装置には特別な信頼性対策が必要となる[4]

一例として、1997年に打ち上げられた土星探査機・カッシーニは、それぞれ2.5ギガビットの市販のDRAMチップを持つ同型のフライトレコーダーを2つ搭載していた。組み込みの誤り検出訂正機能(英語版)(EDAC)のおかげで、探査機のエンジニアリングテレメトリは(訂正可能な)ワードあたり1ビットのエラーと(訂正不可能な)ワードあたり2ビットのエラーの数を報告してきた。はじめの2年半の飛行で、探査機は1日に約280回でほぼ一定の1ビットエラーを知らせてきた。しかし1997年11月6日、1日のエラーの数は4倍以上だった。これは GOES 9 衛星が検知した太陽フレアの影響だった[5]

DRAMがどんどん高密度になり、チップ上の部品が微小化すると同時に、動作電圧が低下し続けるため、DRAMチップがそのような放射線の影響をより頻繁に受けるようになることが懸念された。低エネルギーの粒子がメモリセルの状態を変化させられるようになるからである[3]。一方、メモリセルが小さくなれば標的が小さくなるわけであり、またSOIのような技術への移行により、個々のメモリセルの感受性は従来と変わりないか、むしろ低下するかもしれない。最近の研究は、プロセスの形状により、またメモリセルのエラー発生率が上昇するという予測に根拠がなかったことにより、宇宙線によるシングル・イベント・アップセット(SEU、一時的なソフトエラー)が劇的に減少したことを示している[6]

2007?2009年の研究で、エラーの発生率が10?10 エラー/ビット・時(およそ1ギガバイトのメモリで1時間に1ビットのエラー)から 10?17 エラー/ビット・時(およそ1ギガバイトのメモリで千年に1ビットのエラー)まで7桁にわたってざまざまであることが発表された[6][7][8]。グーグルの非常に多くのサーバーを対象にした大規模な研究がSIGMETRICS/Performance’09 conference で発表された[7]。実際に観測されたエラー発生率は小規模な研究よりも数桁高く、1メガビットあたり10億時間ごとに 25,000?70,000回だった (およそ 2.5?7 × 10?11 エラー/ビット・時、つまり8ギガバイトのRAMで1時間に5ビットのエラー)。毎年8%以上の DIMM がエラーの影響を受けていた。

メモリエラーの結果はシステムによって異なる。ECCのないシステムでは、エラーはクラッシュかデータの損失を招く。大規模な工場では、メモリエラーはマシンのクラッシュを起こすもっとも一般的なハードウェア的原因の1つである[7]。メモリエラーはまた、セキュリティ脆弱性の原因にもなる[7]。観測可能な誤動作の原因になったり、計算または保存に使われるデータに影響したりしなければ、メモリエラーの影響を受けないことがある。2010年のシミュレーション研究から、ウェブブラウザに対して、メモリエラーのわずかな一部分のみがデータの損失を引き起こすが、しかし多くのメモリエラーは断続的で相関的なので、メモリエラーの影響は独立なソフトエラーから予期されるよりも大きいことが示された[9]

隣接したメモリセルへの特別に細工したアクセスによる意図しない副作用により、DRAMメモリセルどうしの分離が迂回されうるといくつかの実験は結論づけている。したがって、近年のメモリセル密度の上昇に伴い、DRAMに格納されたデータへのアクセスがメモリセルに電荷の漏れと電気的な相互作用を引き起こし、元のメモリアクセスで指定されていない近傍の行の内容が書き換わる。この効果はロウハンマーとして知られており、コンピュータセキュリティ上いくつかの特権昇格(英語版)攻撃に使われている[10][11]

例として、1ビットエラーは、エラーチェックのないシステムでは無視されるだろう。パリティチェックのあるマシンは停止するだろうし、またはECCによって自動的に訂正されるかもしれない。ASCII形式で数字を保持している表計算ソフトが読み込まれているとしよう。"8"の文字(2進数で 0011 1000)が格納されたバイトの最下位ビットが、チップの故障で1に固定されてしまうか、環境放射線や宇宙線によって1に変化してしまうと、表計算ソフトとその保存データが変化する。結果として"8"はこっそりと"9"(2進数で 0011 1001)になってしまう。
解決策

望ましくないビット反転に対処するため、いくつかのアプローチが開発されている。耐障害性プログラミング[訳語疑問点](immunity-aware programming)、パリティつきRAM(英語版)、ECCメモリなどである。

余分なビットを持つメモリとこれらのビットを使うメモリコントローラを持つDRAMモジュールを使うことで、この問題を緩和することができる。これらの余分なビットにはパリティまたは誤り訂正符号(ECC)を記録する。パリティは1ビット(実際上は奇数ビット)のエラーを検出できる。最も一般的な誤り訂正符号はハミング符号(ハミングコード)で、1ビットのエラーを訂正でき、(普通の構成では余分なパリティビットを使って)2ビットのエラーを検出できる一訂二検[訳語疑問点](SECDED、single-error correction and double-error detection)である。Chipkill ECCはより効果的なバージョンで、メモリチップ全体のデータ損失を含む複数ビットの訂正ができる。
実装

なぜCDC 6600からパリティをはずしたのかと問われたシーモア・クレイが「パリティは農夫のためのものだ」と答えたのは有名である(→w:en:Doctrine of parity)[12]。次のCDC 7600にはパリティを組み込んだため、専門家から「多くの農夫がコンピュータを買うだろう」と皮肉られた(→w:en:Parity bit#History)。初代IBM PCと、その後1990年代初期までのPCはパリティチェックを使っていた[13]。その後のPCのほとんどはパリティを使っていない。AMDのほとんどすべての64ビット製品を含む現在のマイクロプロセッサ用メモリコントローラの多くはECCメモリをサポートしているが、多くのマザーボード、特にローエンドチップセットを使っているものはECCメモリをサポートしていない。[要出典]

ECC対応のメモリコントローラは、64ビットワードバス転送幅)につき1ビットのエラーを訂正でき、2ビットのエラーを検出できる(訂正はできない)。ある種のコンピュータBIOSは、あるバージョンのLinuxmacOSウインドウズといったOSとの組み合わせにより、大きな故障に至る前に不具合を起こしたメモリモジュールの特定に役立てるため、検出・訂正したメモリエラーを計数することができる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:42 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef