ECCメモリ(Error Check and Correct Memory)
サーバ製品にはECCメモリと呼ばれるエラー訂正機能をもったメモリが利用されています。ここではそのECCメモリの仕組みと、メモリエラーの検出方法、ソフトエラーとは何か、スクラビングの仕組みなどについて簡単に解説します。
-
DDR2の2GB,ECC対応メモリ。2GBの容量(1Gbit×16)に対して1Gbitのメモリチップが18個(片面9個)取り付けられている。

ECCメモリとは
メモリは故障してしまった場合、あるいは正常な製品であっても宇宙線などの影響でメモリ素子のビットに反転が生じそれによってメモリ上に記録されているデータが壊れてしまうことがあります。ECCメモリとはこのメモリ素子のビットの反転を検出して、可能であれば正しいビットに修正してくれる機能をもったメモリです。
一般的なECCメモリで64ビット単位で反転を検出します。64ビットの内、1ビットだけ反転しただけの場合は正しいにビットに修正できます。64ビットの内、2ビットが反転してしまうと正しいビットに修正することはできませんが、ビットの反転が生じたことは検知できます。
はじめにメモリにデータを記録するときにあとでビットの反転を検証するために利用する符号(検査ビット)を計算して、それを実データ(情報ビット)と一緒にメモリ上に保存しておきます(ハミング符号)。その後、読み出すときにその検査ビットを利用してデータが正しく読み出せているかを検証する仕組みです。つまりECCメモリでは検査ビットを保存しておく分だけ実際に表記されている容量よりも多くのメモリを搭載していることになります。検査ビットの長さは情報ビットの長さによって決まります。例えば情報ビット64bit単位でエラーの修正検出する場合必要な検査ビットの長さは7ビットになります。

実際のデータ(情報ビット)に誤り検出用の検査ビットを付加して作成したハミング符号をメモリ上に保存しておく。

ECCメモリはメモリ上のデータが読み出される際に、検査ビットを利用してデータに誤りがないかを検証する。1bitの誤りであれば訂正して正しいデータにすることが可能。2bitが誤っていた場合、訂正はできないが誤りがあることを検出することはできる
ECCエラーのロギング
ECCメモリのエラーの修正/検出の機能はハードウェアだけで完結している仕組みなので、メインボード/CPUがECCに対応していればメモリを取り付けておくだけで、OSにドライバなどとは必要有りません。ただし、メモリのエラーが発生して、それがどのようなエラーだったのか(修正可能な1ビットエラーなのか不可能な2ビットエラーなのか等)を知るためにはそのための仕組み、例えば専用のソフトウェアやハードウェアが必要です。
Linuxの場合、カーネルモジュールであるEDACモジュールや、mcelogツールなのでメモリエラーのログを取得できます。また最近のサーバではBMCと呼ばれる専用チップを搭載してハードウェア的な仕組みでシステムのイベントログを取得できるものもあり、その中でECCのエラーログも取得が可能です。
ECCメモリの動作状況をモニタリングしておくことは、メモリの物理的な故障をいち早く推測したり、2ビット以上のエラーが発生した際に、システムに対して適切な処理を取らせるためにも重要です。たとえば、特定のメモリアドレス上で継続的にエラーが発生している場合、物理的な故障が発生している可能性が考えられます。また、メモリ上で修正不可能なエラーが発生した場合、そのまま稼働しているとシステムが不安定になる可能性もあるのでシャットダウンなどの処置が必要となります。
ソフトエラー
メモリのビットの反転は物理的にメモリが故障している場合以外にも、宇宙線(α線や中性子線)などがメモリに衝突した際に発生することもあります。これがソフトエラーと呼ばれるエラーです。このソフトエラーはメモリの品質の向上に伴ない以前よりも発生しにくくなっているようですが、半導体の集積度が上がると発生しやすくなってしまう関係上、メモリの大容量化のトレンドのなかでどうしてもある程度は発生してしまうようです。
ソフトエラーは一般的な環境下では単純な確率的現象と考えられていてメモリ上のどこの素子で発生するかはランダムです。必ずしもシステムにとってクリティカルなメモリ領域で発生するわけではなく、システムから利用されていない領域に発生した場合さほど問題にならないと考えられます。またシステムが稼働している時間が短ければ発生する可能性も低くなります。
ソフトエラーはメモリの物理的故障に起因するものではありせんのでソフトエラーが発生してもシステムの再起動をすれば元に戻ります。
したがって、システムに対してソフトエラーがクリティカルな影響を与える可能性はソフトエラーの発生確率よりも低く、短時間の稼働でそれが発生する可能性はもっと低くなります。また、いざとなったら再起動すればいいわけですから、毎日電源をON/OFFする家庭用のパソコンなどではあまり問題としなくてもいいとも考えられます。
しかし、メモリ上にクリティカルな領域が広く存在し、長時間稼働し続ける必要があり、おいそれとシステムの再起動ができないサーバなどではその発生は無視できないものとなります。
ECCメモリを利用すれば、ソフトエラーによる1ビットの反転が発生しても、それを修正してそのままシステムを稼働しつづけることができます。たとえ2ビットのエラーが発生した場合でもそれを検知して速やかにシステムに対し適切な処理(例えばシャットダウン)を取ることができれば被害は最小限に抑えられると考えられます。

太陽や周囲の環境由来の宇宙線によってもビットの反転は引き起こされる。ECCメモリはビットの反転した瞬間にそのエラーを検出訂正してくれるわけではないので、長時間その反転した箇所にアクセスが無い場合、更にもう1bit反転して訂正が不可能になってしまう可能性がある。
メモリスクラビング
ECCメモリを利用すれば1ビットのエラーの発生にはサーバの再起動等なしに対処が可能です。ただし、あくまでそのエラーを検知して修正してくれるのは、そのエラーの発生した箇所のデータが参照されたときです。例えば、宇宙線がメモリに衝突してビットを反転させてしまったとしてその瞬間にそのエラーを検知してくれるわけではありません。つぎにその反転されたビットがOSによって参照されるまでそのビットは反転された状態のままです。そして運悪く、そのビットがOSによってに参照される前にその箇所の(近傍の)ビットに宇宙線が衝突してもう1ビット反転してしまったら、2ビット反転した状態になりもうエラーの修正はできなくなってしまいます。
このような事態を防ぐためにメモリスクラビングと呼ばれる機能が最近のサーバにはついています。メモリスクラビングとは直訳すればメモリを磨くといった意味ですが、OS側のメモリ参照要求とは関係なしに定期的にメモリ全体を読み出して、エラーが発生していないかを確認する機能です。エラーが確認された場合、1ビットの反転で修正が可能であればメモリ上のビットを反転させてエラーの発生している状態を解消します。また。2ビットのエラーだった場合はシステムに通知して適切な処理を促します。この機能によりビットが反転した状態のままメモリが長時間放置されてしまうことを防ぐことが可能です。
大容量メモリを搭載しているシステムではデータベースのキャッシュなどとしてアプリケーションに確保されたメモリ領域が長時間アクセスも解放もされずに放置されてしまうようなケースが考えられます。OSや各アプリケーションで利用されるメモリ上のキャッシュはサーバの電源喪失によってその内容が失われたりすることに対してはハードウェア的あるいはソフトウェア的な対策が取られていることが多いですが、その内容が変化してしまうことに対してはあまり対策は取られていないと思われ、このような仕組みによってキャッシュ上のデータの一貫性を確保することは大切でであると考えられます。
このスクラビングにはメモリの帯域を利用するのでシステムに負荷がかかります。基本的にはシステムが低負荷でメモリをあまり利用していないときを狙って実行するようになっているようです。また余分なメモリの読み込みが実行されることになるので、その分電力を消費します。その関係かデフォルトではこの機能は無効になっている場合が多いようです。BIOS等の設定を有効にする必要があるかもしれません。

定期的メモリスクラビングを実行することにより、メモリが1bitエラーの状態で長時間放置されないようにする。メモリスクラビングには定期的に実行する(パトロールスクラブ)モードの他に、メモリ読み出し時に通常のエラー検出訂正動作に加えて、正しい値をメモリに書き戻す動作をする(デマンドスクラブ)モードもある。
まとめ
ECCメモリはサーバが対応していれば搭載しておくだけでメモリエラー対策に有効です。しかしながら、より信頼性をなどを高めるためにはエラーログをモニタリングしたりメモリスクラビングといった機能と組み合わせることが大切です。
BMCチップを搭載したサーバ製品では、OSによらずメモリのエラーのモニタリングが可能です。メモリエラーによりOSがフリーズしてしまった場合でもシステムのモニタリングの継続が可能です。
ECCメモリ対応、BMCチップ搭載サーバ
ECCメモリ対応、BMCチップ搭載のサーバはもメモリエラーはじめ様々なシステムの異常を遠隔地からでも確認、対処が可能です。信頼性の高いシステム構築が可能なサーバ製品について、ぜひ詳細をご確認ください。
ECCメモリ対応、BMCチップ搭載のサーバの詳細ADAPTEC MaxIQ SSD キャッシュパフォーマンスキット
近年注目を浴びている高速ドライブであるSSDと従来のHDDとの組み合わせでHDDアレイ全体のパフォーマンス向上を実現するADAPTEC MaxIQ SSDキャッシュパフォーマンスキットの評価テストを行ってみました。
今回はX7DBi+Xeon E5440の構成で、HDD無しの場合とHDDを8台搭載した場合の処理速度と消費電流を計測しました。
今回は、Supermicro X7SBiとIntel Xeon L3360(2.83GHz, Quad)の構成での処理速度と消費電流を計測しました。
前回の記事では、Supermicro X7DVLiとIntel Xeon L5420(2.5GHz Quad Core)のデュアルプロセッサ構成でのベンチマークと消費電力をしました。 今回はそれと同一のマシンに、3ware 9690SA-4Iを追加し、HDDを2台から4台に追加した状態での消費電流を計測しました。
Supermicro X7DVLiに、Intel Xeon L5420(2.5GHz Quad Core)を二つ乗せたマシンでLinuxカーネルのコンパイルを行い、消費電力と性能を調べてみました。