「エラー忘却型コンピューティング」なんて言い出したのは誰だ!
正確にはFailure-oblivious computingを「エラー」忘却型コンピューティングって訳したのは誰だという話。訳す過程でfailureがerrorに入れ替わっている。情報系の人間は「名前重要!」とか言う割に、障害(fault)、異常(error)、故障(failure)という用語の定義、使い方に無自覚な人が少なくない。Twitterで意外と反応があったので、(自戒を込めて)書き起こしてみる。
Failure-oblivious computingは、2004年のOSDIでMITのMartin Rinardらが論文"Enhancing Server Availability and Security Through Failure-Oblivious Computing"で提案した技術。Cのような言語で不正ポインタ参照が発生しても、これを検出してなかったことにして(適当な値を返すなどの処理に書き替える)処理を継続する一種のコンパイラ技術のようだ。Wikipediaに書かれているように、GoogleはFailure-oblivious computingを適用することで処理の大規模化、高速化を実現したというのは、概念の拡大解釈じゃないかという気がするは、ここでは本題じゃないので無視する(参照)。
翻訳の過程でfailureがerrorに入れ替わってしまった。何を細かいことをと言われそうだが、failureとerror、そしてfaultの違いを理解しているだろうか? 訳した人は違いをちゃんと理解していたけど、語呂がいいから「エラー」にしたのかもしれない。さらに、fault、error、failureという用語をどう訳すかというのも頭の痛い問題。ここではJIS X 0014にならい、障害(fault)、異常(error)、故障(failure)とする。「障害」と「故障」なんて使い分けて使ってないよ、というソフトウェア技術者は多いだろう(私もそうだった)。まぁ、何はともあれ、技術者であればこの辺は一度ちゃんと押さえておくのがよろしい。
@ichiro_satohさんが文例を示してくれたが、「障害(fault)によって、異常(error)や故障(failure)がおき、これが事故(accident)につながる。」ということ。つまり、ソフトウェアのバグなどは障害(fault)で、これが原因でソフトウェアが仕様を満たす機能を提供できない現象を故障(failure)と呼ぶ。だから、single point of failureであって、single point of faultではない。そして、計算結果が理論的に正しい値と違うことを異常(error)と呼ぶ。つまり、潜在的には故障を引き起こすかもしれない状態にあることをいう。
Failure-oblivious computingに話を戻す。例えばソフトウェアのバグによってmemory errorが起こると、従来はerrorを通知して、プログラムをアボートしていた。Failure-oblivious computingでは、errorを無視して実行を継続してもたいていはちゃんと動くと。(ちゃんと論文を読んでないので間違っているかもしれないけど)errorを無視するのでerror-obliviousでもよい気もするけど、肝心なのはfailureをユーザに見せない方なので、failure-obliviousなんだろう。ここ、ツッコミ歓迎です。
耐障害性(fault tolerance)は障害が起きても、その影響が伝播して故障にならない性質のことを言う。チェックポイント・リスタートは耐障害性を実現する技術の一つで、どこかで障害が起きても、その前の状態にロールバックすることで、システム全体としての故障を回避することができる。
また、最近HPC業界などでよく耳にするfault resilience(こちらにはまだ訳語が存在してないと思う)というのは、システムの各要素がそれぞれ耐障害性を持つことで、多重的、多層的に故障発生を防止するというもの。アプリもシステムもハードウェアも協調して障害に対応しないと、2018年頃に登場すると言われている1エクサマシン(京の100倍の性能)はまともに動かないと言われている。京はハードウェアの冗長化、ECC、冷却技術などにコストをかけることで、LINPACKが28時間動くという驚異的な信頼性を実現しているが(この辺のすごさはいまいち理解しにくとは思うが。。。)、エクサマシンではMTBFが5分程度という試算もある。あ、話が脱線しちゃった。
と言うわけで、障害(fault)、異常(error)、故障(failure)の違いを意識しようという話でした。時間があればIECとかJISの定義をちゃんと読んでみるのもいいかもしれない。