データが消えた!!
ZFSを開発した
ビル・ムーア(左)とジェフ・ボンウィック(右) 画期的な発明やこれまでの常識を覆す様な技術革新というのは、ちょっとした偶然の出来事やたわいもない会話などがトリガーとなって生まれることが多いものだ。Solaris 10の画期的な新ファイルシステム「ZFS」の開発プロジェクトも、些細な出来事がきっかけで始まったと言えよう。 1996年、Solaris開発チームがカリフォルニア州メンロパークの新しい拠点に引っ越したばかりのある日のことである。ハードディスクをアップグレードした途端、いきなりサーバがダウンしてしまった。 ジェフは現在、サンでDistinguished Engineer(サンの開発技術者の最高の位)の肩書を持ち、ストレージ部門のCTO(最高技術責任者)を務める人物である。 皆して、ああだ、こうだと言い合うばかりで、誰も何もできない状態が数時間続いた。 メモリで出来ることがなぜハードディスクでできないのか? 「これがメモリをマシンに追加する場合なら、こんな大げさなことにはならないんだよね。ただマシンのカバーを外して、DIMMを何枚か差して電源を入れるだけで、全て問題なく動作するのに・・・」とジェフがつぶやく。 しかし、その瞬間、ジェフは自分の一言に、閃いた。 これについては、この一件のずっと後にZFSの副主任としてジェフのチームに加わったアーキテクトのビル・ムーアという男が、分かりやすい例でこんなふうに説明している。 2000年、ジェフにはちょうど特に担当するプロジェクトがなく、次にやりたいことを決めようとしていたところだった。その頃、サン内には新たなファイルシステムを開発する許可を得ていたグループが、名目上は3つあったが、優れたアイデアがいくつか出ていたにもかかわらず、それをまとめ上げようとするグループがなかった。 苦難の日々~知らないからこそ困難に立ち向かえた~ しかし、それが形になるまでに、4年もの歳月を費やすことになろうとは、当時のジェフには予測ができなかった。 「それがどれほど困難なことになるか少しでも分かっていたら、そんな決心はしなかっただろうな。知らないからこそ厳しい困難にも立ち向かえたんだと思う。」ことジェフは回想する。 このプロジェクトの為にジェフは、5~6人という小さなチームを要請した。ところが上司は、大胆にも彼に80人もの部下を与えたのである。ジェフは、この様に突拍子のないアイデアを持って不意に上司の元に押しかけた挙句、80人もの部下を割り当ててもらえるなんてことは予想だにしていなかった。上司は何も言わなかったが、まるで『お前ならできる。』と背中を押された様な気分であった。 ![]() 一見、幸先の良いスタートに見えたプロジェクトだったが、しかしながら、世の中そんなに甘くはなかった。斬新的なプロジェクトに対する社内の抵抗や反対、政治的な駆け引きはどの企業にもつきものである。1年もの間、ジェフは技術的な問題とは関係ないことにさんざん体力を消耗することとなり、なんとかプロジェクトをうまく進めようと努力したのだが、結局、初めから仕切り直すことを決意する。 ジェフは、社内の軋轢に嫌気がさしていたのに、開発プロジェクトを諦めてしまわなかったのは、マット・アーレンズというエンジニアがこのプロジェクトに携わる為に、1年も前から雇われていたことを知ったからである。ジェフは、彼の存在を知ってプロジェクトを見限るという宣告をするわけにはいかなかった。 マットとジェフは2人きりになると、ホワイトボードの前で1日に5時間もかけて、あらゆるアイデアを検証しながら濃密な時間を過ごし、すぐさまコーディングを開始した。2001年7月のことだ。こうしてその4ヶ月後には、新しいファイルシステムの最初の基本バージョンがユーザ領域で動作するようになり、その1年後には、Solarisのカーネル内で動作するまでになったのである。 助っ人、現る。 ビル・ムーアがこのプロジェクトに参加したのは、新しいファイルシステムが UNIX カーネルにマウントできるようになった約6ヶ月後、2003年6月のことである。 ビルは1996年に最初にサンに入社し、サーバサイドの仕事に取り組んでいたが1999年には退社して、企業向けストレージの新興企業である3PARdataを設立、ハードウェア及びソフトウェアの設計全般をはじめ、同社のあらゆる側面に関与していた。このときの経験は、彼が2003年にサンに戻ってきたときに大いに役立つことになる。 「僕はx86のパフォーマンスに取り組む為にサンに再雇用されたんだが、ジェフに会う度に『ほら、このファイルシステムを調べてみて。僕たちがここでやっていることを見てくれよ』と言われたものだ。」と、ビルはその頃のことを振り返る。「彼とは非常に親しい関係になっていたんだよね。『さあ、僕のマシンの電源を抜いて。違うよ、本当に抜くんだってば。』と言うのでその通りにしたところ、そのマシンには全てのファイルがそのままの状態で残っていたんだ。」 ジェフが、マシンにZFSをインストールして試しに使い始めたところ、いくつかのファイルの書き込みを始めて直ぐにハードディスクから『ウィー、ウィー、ズズズ』と悲鳴をあげるような音がした。ジェフはストレージ機器の新興企業で働いた経験があったので、この音を聞いてパフォーマンスに問題があるのでは?と感じた。 ![]() そこに、ブライアンという同じSolarisチームの同僚が現れ、『僕が取り組んでいるこのDTraceという機能を使ってみたらどうだろう』とビルに助言してくれた。その時点では、SolarisにDTraceは組み込まれていなかったので、ビルは、ある時点のビルドを彼のホームディレクトリから取り出して自分のデスクトップマシンにDTraceをインストールして、試してみたのである。ビルはこうして5分もしないうちに、必要としていた入出力データを手に入れた。正に、Solarisエンジニア達はDTraceをSolarisのカーネルそのものの開発に役立てていたのである。 ビルは、そこで、時間に対して論理ブロックのアドレスをプロットしたところ、論理ブロックアドレスの値の小さい部分と値の大きい部分に、はっきりとした帯状の分布が浮かび上がった。これは、基本的にハードディスクのシーク操作が、この2つの帯の間において最高速度で行われている、ということを示している。ビルにはこの問題の修正方法が分かっていた。 ビルが、ジェフに『入出力スケジューリングの周辺で何かしようとしてないか?』と尋ねたところ、『いや、ハードディスクはだんだん賢くなっているからね。我々は全ての入出力データをただハードディスクに送り、処理させているだけなんだ』とのこと。
「心を解き放て」~今までの考え方では問題は解決しない~ 簡単に言うと「ZFS」とは、単純な管理機能、トランザクション・セマンティクス、及びエンドツーエンドのデータ整合性を備えた、新しい種類のファイルシステムである。現在、ZFSは、Solaris 10を世界中で最も進んだオペレーティングシステムたらしめている特徴の1つとして認識されているが、ここに至るまでに、政治的にも技術的にも数々の障害が立ち塞がってきたのである。 技術者にとっての最も大きな政治的問題は、ZFSを試しに使ってみてくれる人はあっても、開発責任担当を引き受けてくれる人がなかったのだ。例えば、プロジェクトが長引くと、途中で担当役員が変わるということはよくあるが、元の役員は別の役割に就き、新しい役員は別の優先事項を抱えてやってくる、という可能性がある。そうこうするうちに、新しい担当役員が持ってきた別の優先事項に、ジェフの非常に優秀なスタッフを5~6名も持って行かれてしまうという事態に陥ってしまった。 しかし、彼の場合、新しい問題が発生した時に、“前はどうやっていたか?”などということには興味がなかった。ただ知りたかったのは、今まで、“○○は出来ない”と、多くの人が思い込んでいた制限の中には、実は単なる習慣的な思考があったりするものだ。『前からそうしていたから』『誰も出来た人がいないから』という、過去から引きずっている知識や経験が、新しい発想を邪魔するのである。 ジェフは言う。「知らないこと、そしてその無知を積極的に利用することだよ。」 「心を解き放て。」(Free Your Mind) ビルが呟いた。「これは映画『マトリックス』の台詞だよね。心に留めておきたい言葉なんだ。ZFSに先立つテクノロジを作り上げた人々だって、全くの門外漢というわけではなかったんだ。彼らは、当時としては妥当な理由から、あらゆることをやってみた。しかし、現在の世界は15年前の世界とは違う。そこで、『そうした根拠は今でも妥当なのだろうか?』という疑問が湧いてきたんだ。」 エンドツーエンドのデータ整合性が最重要課題だ! ![]() 「結局、ファイルシステムがやっているのは、読み取るブロックの内容が以前書き込んだものと同じになる様に、ブロックに読み書きすること。これはシステムのストレージにとっては基本的な保証事項だけど、その通りに動作しなくなる原因はいくつも存在するんだ。」とジェフは説明する。 ハードディスクのメディアエラーが起こってビットデータの一部がおかしくなることもあれば、ハードディスクの1つが故障することもある。ハードディスクからマシンへの読み込みの途中でビット反転が起こる可能性もある。それにハードディスクに関するファームウェアの間違いで、誤ったブロックが与えられることもある。とにかく、ありとあらゆるおかしな現象が生じる可能性があるのだ。だから、将来はエンドツーエンドのデータ整合性を提供することが、もっと重要になってくると、ジェフは考えた。 「ファイルシステムの設計では、これまでずっと『bcopy()は使うな。そのデータには触れるな』ということが最優先事項だった。」 そこでZFSでは、処理の1つとして、データのチェックサム計算を毎回行っている。 ZFSを用いれば、エンドツーエンドのデータ整合性は、もはやエンタープライズ向けのストレージシステムだけのものではなくなる、とジェフは言う。例えば、ノートPCに内蔵されている80GBのハードディスクのうち、1GBの領域が失われても、残りの79GBは完全にアクセス可能なままである。これは、ZFSのメタデータのコピーを、ハードディスク内の物理的に十分に離れた別の場所に保存しているからなのだ。 ZFSの目玉、DMU(データ管理ユニット) ファイルシステム、ボリュームマネージャ、ハードディスクというストレージ・アーキテクチャの各階層間のインタフェースは、以前からきわめて単純なものだった。ブロックを読み取ってブロックを書き込む、単にそれだけである。 これには利点もあるが、欠点もある。例えば、「次の5つのブロックは一緒に書き込まれるか、1つも書き込まれないかのどちらかでなければならない」という指示ができないのだ。また、こうしたソフトウェアには、その場でパフォーマンスの最適化を行う方法がなかった。しかし、ZFSではそれが可能になっている。 「全てのファイルシステムに等しく負荷がかかっているなら、従来のモデルの方が優れているだろう。しかし、普通は負荷が急激に増減するので、5つのファイルシステムには全く負荷がかかっていないのに、1つのファイルシステムは巨大なファイルを転送している、という状況が起こり得るわけだ。」とジェフは説明する。 そこでジェフらが取りかかったのが、ZFSの最重要項目であるデータ管理ユニット(DMU)だった。 「DMUの興味深い点は、外界に対して提供しているインタフェースが、ファイルやディレクトリの類ではないことだ。オブジェクトとそれに対するトランザクションがインタフェースになっているのだ。」とビルは言う。 例えば、ファイルのリネームを行う場合、DMUでは行うべき処理を、次のように記述する。
これはもう、ランダムな書き込みのストリームではない。DMUは、こうした各トランザクションを1つのトランザクショングループとしてまとめる役目をする。このトランザクショングループ内の処理は、全て成功するか全て失敗するかのどちらかだ。正にデータベースの様なものなのである。 信念と努力が日の目を見る喜び ジェフとビルはどちらも頻繁に顧客に対して講演を行っているが、ZFSに対する顧客の反応には驚きと喜びを感じている。
その後、ジェフとビルは、各地で「ジェフとビルによる説明会(Jeff and Bill Show)」を開催した。彼らにとって長い間の苦労が報われた最も誇らしく楽しい日々であった。「僕たちがZFSの売り込みをしなければならなかったことは一度もないんだ。ただZFSについて説明するだけでよかったから。それに、会場の雰囲気が変わっていく様子を観察するのは楽しいもんだよ。腕を組んだ大勢の人々を前にして、説明会は大抵45分の時間枠で始まるんだけど、ところが2時間経っても説明会は終わっておらず、誰もが身を乗り出し、驚いた顔で質問を投げかけているんだ。」
| Sun Fun Times
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||