Jeff Bonwick's Blog |
Monday Jun 02, 2008
豪快なレイヤー分け違反
Andrew Morton が ZFS を「豪快なレイヤー違反」と呼んだのは有名ですが、その理由は、ファイルシステムの機能、ボリューム管理、RAID コントローラを統合していることにあります。 違反という言葉の意味をどう取るかで、解釈が異なると思います。 ZFS の設計に際して、ストレージスタックの標準的なレイヤー分けが、驚くほど大量の無駄手間と冗長な処理を含んでいることを発見しました。 問題点にちょっとしたリファクタリングを加えれば、つまり、レイヤーを分ける境界を移動させてやれば、全体をもっと単純化できるのではないかと気づきました。 n=1 から 無限大まで、1/n(n+1) について数列の和を計算しなければならないと仮定します。 項ごとにして開くと、次のような計算になります。 1/(1*2) + 1/(2*3) + 1/(3*4) + 1/(4*5) + ... つまり、 1/2 + 1/6 + 1/12 + 1/20 + ... 無限に足し算を続けるのはどうでしょうか。非常に難しいことのようですが、問題を正しく観察していないというだけのことです。 賢明な人は、各項を先ほどとは違うやり方で記述できることに気付いたかもしれません。 1/n(n+1) = 1/n - 1/(n+1) たとえば、 1/(1*2) = 1/1 - 1/2 1/(2*3) = 1/2 - 1/3 1/(3*4) = 1/3 - 1/4 そこで、次のように記述することができます。 (1/1 - 1/2) + (1/2 - 1/3) + (1/3 - 1/4) + (1/4 - 1/5) + ... 規則性に注目してください。各項の後半で引き算したのと同じ数を、その次の項で足し算する繰り返しになっています。 こういう計算で意味があるのは、学会の中だけです。 では、区切り方を変えてみましょう。つまり元の問題に対して、結合性を元に、豪快なレイヤー分け違反をします。そうして、隣接項の両端同士の計算にリファクタリングします。次のようになります。 1/1 + (-1/2 + 1/2) + (-1/3 + 1/3) + (-1/4 + 1/4) + ... つまり、 1/1 + 0 + 0 + 0 + ... 別の書き方をすると、 1. 賢いやり方ではないでしょうか。 このように、 連続した項の配置を変えて互いに消去することを、数学の用語で Telescoping (たたみ込み) と呼びます。折りたたみ式の携帯望遠鏡 (Telescope) に例えた言い方です。 簡単に言うと、ZFS がやっているのも同じことで、ストレージスタックをたたみ込んでいるのです。 それにより、ファイルシステム、ボリュームマネージャー、シングルパリティーとダブルパリティーに対応した RAID、圧縮、スナップショット、クローン作成、そのほかたくさんの有用な機能が、たった 80,000 行のコードで実現できたのです。 ストレージシステムはここまで単純ではありませんが、高いレベルで、同じ考えを実際に利用しているのです。 どのようなストレージスタックも、ある命名スキーマから別の命名スキーマへの、変換の連続だと考えることができます。最終的には、ファイルネームをディスク LBA (Logical Block Address) に変換します。 典型的な例として、次のようになるでしょう。
ファイルシステム (上位):ファイルネームをオブジェクトに (inode)
ファイルシステム (下位):オブジェクトをボリューム LBA に
ボリュームマネージャー:ボリューム LBA を アレイ LBA に
RAID コントローラ:アレイ LBA をディスク LBA に
これが、私たちがリファクタリングしようとしているスタックです。 ZPL:ファイルネームをオブジェクトに DMU:オブジェクトを DVA (Data Virtual Address) に SPA:DVA を ディスク LBA に DMU が物理ストレージの共通プールに、ファイルアクセスとブロックアクセスの両方を提供します。 ブロックアクセスは DMU オブジェクトへの直接的なマッピングですが、ファイルアクセスは ZPL 経由で行います。 DMU のトランザクション能力をもっとおもしろい方法で利用した、新しいデータアクセスメソッドも開発中で、後日紹介する予定です。 Posted at 06:24PM Jun 02, 2008 by Jun-Hui Paul Duan in ZFS | Comments[2] |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Japanese! How unexpected.
Posted by bbot on June 03, 2008 at 01:15 AM PDT #
I'm not an expert but it looks like Chinese to me.
Posted by Tobie on June 03, 2008 at 09:04 AM PDT #