Googleのサーバでの実際の使用時のDRAMエラーの発生状況を調査したところ、従来言われているより、桁違いにエラーが多く、25,000~70,000エラー/109時間/Mbitであったというトロント大学とGoogleの共著の論文が2009年に発表され、話題になった。

今回のSC12で、Oak Ridge国立研究所のJaguarスパコンのDRAMエラーを11カ月にわたって調査したという論文がAMDから発表された。

JaguarスパコンのDRAMエラーを分析した論文を発表するAMDのVilas Sridharan氏

DRAMエラーを考えるとき、フォールト(Fault:故障)とエラー(Error:誤り)は分けて考える必要がある。フォールトはトランジスタの破損や配線のショートやオープンなどの物理的な故障や放射線などで記憶した情報が反転してしまうということをいう。一方、エラーはフォールトが原因で、読み出しデータが誤ることをいう。

Faultの原因が中性子ヒットのような一過性のものである場合は、記憶した情報が反転しても、そのビットを読まなければエラーにはならないし、そのビットを含むワードを読んでエラーが見つかれば、ECCで訂正して正しい情報に書き直されてしまうので、たかだか1回しかエラーにならない。

しかし、トランジスタの破損や配線のショートなどの固定したフォールトの場合は、そのメモリを交換しない限り、そのビットをアクセスすれば毎回エラーになる。同じアドレスでのエラー回数が一定の値を超えると、OSがその番地を含むブロックを使わないようにするというものもあるが、それでも1つのフォールトが多くのエラーを引き起こす。

GoogleはMap-Reduceでサーバにエラーがあってもやり直せるので、メモリにエラーが起こってもECCで訂正できる1bitエラーの内は交換せず、そのDIMMを使い続けるので1つのフォールトが原因のエラーの回数が非常に多くなる。筆者は、これがトロント大の論文で「桁違いにエラーが多い」原因であると思っている。

AMDの論文では、同一番地でのエラーが連続する場合は、それは1つのフォールトから引き起こされたと考え、エラーの発生パターンからフォールトの回数を推定している。このようなデータ処理を行った結果が次の図である。

JaguarスパコンでのDRAMのエラー回数は20~30万回/月であるが、フォールトの発生は100~200回/月(以下のスライドはAMDのVilas Sridharan氏の発表資料より抜粋)

エラーの回数はおおよそ20~30万回/月であるが、フォールトの発生は、調査開始前の期間の影響が残っていると考えられる最初の2カ月を除くと100~200回/月である。そして、フォールトが発生したDRAMチップの比率は0.09%、フォールトが発生したDIMMの比率は1.6%である。これはMbitあたりのDRAMの故障率にすると0.066FIT(1FITは10億時間に1回の故障率)となる。

トロント大の論文はエラーの回数から25,000~70,000FITという値を出しているので、40万から100万倍の開きがある。しかし、Jaguarの場合もエラーはフォールトの1000~2000倍の回数であり、ECCで救える1bitエラーの状態でも使い続けるというGoogleのメンテナンス方針を考えると、定性的にはこの違いは理解できる。

また、JaguarのDRAMチップの故障率は66.1FITとなる。この値は、通常言われている値とおおよそ一致している。

Jaguarのメモリシステムは、定期的に全アドレスを読み出し、エラーが見つかるとECCで訂正したデータを書き戻すスクラブ(Scrub:ごしごしと磨いて汚れを落とす)を行っている。この論文でスクラブの周期を"エポック"と呼んでいる。一過性のエラーはスクラブで訂正されてしまうので、複数エポックにわたって同一アドレスでエラーが起こる場合は、固定フォールトである可能性が高い。フォールトの性質を分析するため、同一アドレスのエラーが何エポック続いたかをプロットしたのが次の図である。

同じアドレスのエラーが何エポック続いたかの分布

1エポックしかエラーしなかったフォールトは全体の28.8%でこれは中性子ヒットなどの一過性のフォールトが原因と考えられる。また、1~3エポックのエラーの詳細を調べたものが図の中の左下の表で、1エポックのエラーの98%は1個のDRAMのエラー、2個のDRAMのエラーになるのは1.7%、3個のDRAMのエラーになるのは0.3%であった。2エポック、3エポックのエラーも表の欄の意味も同様である。

1つのフォールトで複数のDRAMにエラーが発生するのはおかしいと思うかもしれないが、出力ピンの値を固定してしまうようなフォールトでは、複数のDRAMがエラーしたように見える場合がある。そのような観点から、1エポック1DRAMと2エポック2DRAMのケースは一過性のフォールトと見なしている。

また、エラーの発生パターンから、どのようなエラーが起こったかを分析したのが次の図である。

フォールトが1ビットエラーとなった、1ワードの中の複数ビットエラーとなったなどの分析

1つのフォールトによるエラーが1bitだけに発生したのは49.7%であり、複数のbitにエラーを発生したケースはその他の50.7%であり、複数ビットのエラーを惹き起こすフォールトがほぼ半分ある。また、1つのカラムやローに複数のエラーが発生するというケースもそれぞれ12.7%と10.6%存在する。さらに、1バンク、複数バンク、複数ランクにエラーがまたがるというケースもあり、これらはDRAMの記憶アレイのフォールトではなく、制御回路やチップの入出力などの共通部分のフォールトである可能性が高い。

Jaguarでは、1チップに4ビットのデータI/O端子があるDRAMを使っており、それぞれのタイプのフォールトで何ビットのエラーが発生したかを調べたのが次の図である。

1カラムの場合は、1出力だけのエラーが多いが、4出力全部がエラーする場合も10%存在する。マルチバンクやマルチランクにエラーが見られる場合は、4出力全部にエラーがある場合が多い

1カラムだけにエラーが見られる場合は1出力だけにエラーが発生するケースが85.8%であり、これらは1ビットエラーの訂正ができるSECDED(Single-bit Error Correction Double-bit Error Detection)コードで救える。しかし、1カラムのエラーの場合も2つ以上の出力にエラーが見られるケースが14.2%であり、その中でも4出力全部がエラーするケースが10%ある。このように複数ビットが誤った場合はSECDEDコードではエラーを訂正できない。 Jaguarでは各DRAMチップからは1つの出力だけを選んで集めてワードを構成し、そのワードにSECDEDコードを付けるという構成ができるようになっている。このようにすると、1つのDRAMチップの中の複数の出力ビットが同時に誤っても、1ワードの中では1bit誤りであるので訂正できる。このような構成をChipkillという。この調査でのエラーの発生パターンから、 Chipkillを用いた場合と同一ワードに1個のDRAMのすべての出力を含んでSECDEDコードを使った場合を比較すると、Chipkillを使うことにより訂正不能なエラーの発生率は1/42になるという結論が得られたという。

トロント大の論文のように「従来言われているより、桁違いにエラーが多い」というようなセンセーショナルな結論ではないので地味であるが、11カ月間のJaguarスパコンのメモリエラーログを詳細に分析した力作であり、価値の高い論文である。