2006年06月14日
そのメモリ、捨てる前に 〜EDACでECCエラーをキャッチ〜
かたちあるものいつかは壊れます。メモリモジュールも例外じゃありません。
DSAS はサーバが200台近くあり、複数枚メモリを積んでいるサーバもあるのでメモリの数はそれ以上です。これだけメモリがあると、どれかが壊れる確率はそれなりに・・・・
DSAS はサーバが200台近くあり、複数枚メモリを積んでいるサーバもあるのでメモリの数はそれ以上です。これだけメモリがあると、どれかが壊れる確率はそれなりに・・・・
と、前回のパクリはこのくらいにしてですね(^^;、ディスクは壊れると非常にわかりやすいログを吐いてくれたり、 SMART で簡単に状態をチェックできたりしますが、メモリが壊れた場合はちとやっかいです。いきなり固まったり電源が落ちたり挙動不審になったりと、全く予測不能な症状を引き起こしてしまいます。このような場合、メモリ不良を疑って BIOS でログを確認するとか、長時間かけて診断ツールかけたりしないとなかなか原因の特定に至らないので、原因不明なまま眠れない日々が続いてしまいます。
Linux でメモリエラーを検出するには、「 NMI 関連のログがでたらメモリを疑ってみる」くらいしか思いつかなかったのですが、Linux Kernel 2.6.14-rc5-mm1 にEDAC (旧Bluesmoke) が組み込まれたようで、2.6.16 のソースツリーにも含まれているようです。
これは、対応しているメモリコントローラをつかっているマシンにおいて、ECC エラーをハンドリングしてくれるものだそうで、ECC エラーが発生したら強制的にカーネルをパニックさせる等の芸当ができるようです。
まあ、壊れたメモリが手元にないので動作検証しにくいのが難点ですが、ここによるとメモリの12番プレートをマスクすると意図的にビットエラーを起こすことができるっぽいですね。
ということで、実際にやってみたところ、
こんなログが確認できました。
EDAC が対応してるマシンを使っている場合は、有効にしておくと良いかもしれません。
Linux でメモリエラーを検出するには、「 NMI 関連のログがでたらメモリを疑ってみる」くらいしか思いつかなかったのですが、Linux Kernel 2.6.14-rc5-mm1 にEDAC (旧Bluesmoke) が組み込まれたようで、2.6.16 のソースツリーにも含まれているようです。
これは、対応しているメモリコントローラをつかっているマシンにおいて、ECC エラーをハンドリングしてくれるものだそうで、ECC エラーが発生したら強制的にカーネルをパニックさせる等の芸当ができるようです。
まあ、壊れたメモリが手元にないので動作検証しにくいのが難点ですが、ここによるとメモリの12番プレートをマスクすると意図的にビットエラーを起こすことができるっぽいですね。
ということで、実際にやってみたところ、
kernel: MC0: CE page 0x1f405, offset 0x0, grain 4096, syndrome 0xc1, row 0, channel 1, label "": i82875p CE
こんなログが確認できました。
EDAC が対応してるマシンを使っている場合は、有効にしておくと良いかもしれません。
klab_gijutsu2 at 23:01│Comments(0)│TrackBack(0)