2008年12月23日火曜日

メモリエラー検出ができるEDACドライバ

~X38チップセット及びECC対応メモリ搭載マシンをご利用の方に~

 みなさん、こんにちは。かわらばん編集長の安藤です。今年からプチかわらばんを始めましたが、いかがでしょうか?昨年はリーマン・ショックの影響で日本経済にも大きな打撃がありました。今後しばらくこのような状況が続きそうですが、がんばって行きたいと思います。

 以前の“かわらばん”でECC機能の不具合修正についてお伝えしましたが、今回は、Intel社X38チップセット用のEDACドライバの作成についてのお話です。


 サーバやワークステーションのメインメモリにはDRAMが使われていますが、そのメモリに記憶されているデータは、時として、内容が書き換わってしまうエラーが生じることがあります。そのエラーにはソフトエラーとハードエラーの2種類があります。
 ソフトエラーは、宇宙から地上にやってくる宇宙線がメモリチップに衝突し、メモリセルに蓄えられた電荷の値を変化させてしまうことにより生じます。この現象は、メモリが壊れてしまっているわけではないですが、避けることができません。
 一方、ハードエラーはDRAMのメモリセル自体が壊れてしまったり、セルに蓄えられている電荷の“0”、“1”の情報を読み取るセンスアンプが壊れてしまったりして生じます。これはハード的に壊れた状態であるので、恒久的に正しいデータを読み取ることはできません。

 大切なデータが反転してしまっては困りますので、サーバやワークステーションでは、例えばビットエラーを自動で修正したり、修正不能な場合でもビットエラーが起こったことを、検出することができるECCメモリが使われています。
LinuxにはEDACというドライバがあり、それを用いることでメインメモリやPCIバスのビットエラーを検出することが出来ます。

 具体的には、Memory Controller Hub(一般にノースブリッジと呼ばれるマザーボード上のチップ)をPCIデバイスとして扱うことで、そこから Correctable Error(訂正可能エラー) 、 Uncorrectable Error(訂正不可能エラー) といったエラー情報を読み出し、ログに残したりカーネルパニックを起こしたりするといった動作をします。

 EDACはチップセットの機能を利用するので、チップセット毎に対応するドライバを用意しなければなりません。 ところがIntel社のX38チップセット用のEDACドライバは用意されていませんでしたので、今回それを作成しました。(コードはこちらです。)

 このコードを、EDACを管理しているbluesmokeプロジェクトのメーリングリストにそのモジュールを投稿したところ、Linuxカーネルの2.6.28-rc3にマージされました(ChangeLog、X38 という文字列で検索)。

 当社で扱っているサーバでも、X38を利用しているものがあります。実際にこのサーバとECCのチェックのためにデータピンを削ったメモリを使用し、動作を確認しています

 現時点では、まだRC版の段階なので正式リリースではありませんが、2.6.28のリリースには含まれる予定です。チップセットとしてX38を搭載し、ECC対応のメモリを搭載したマシンを利用している場合は、このモジュールを利用することでメモリエラーを検出することが可能になります。是非お使い下さい。

 本年も引き続き、最新情報や商品紹介などの情報を発信していきますので、どうぞよろしくお願いいたします。

0 件のコメント: