とんでもなくスケールする分散ファイルシステム

を作りたいんですが。ロックをやらないといけない反面、ロックがあるので(?)、ブロックデバイスより作りやすい気がする。


プロトコルはほぼできた感じ。
はてなに書いたエントリ(「第2案」)に、非同期IO、バイト単位ロック、共有データ→HDDブロックのマッピングとその逆変換を加えたもの。

例のごとく利用環境はLAN。

問題は2点。
・分散されたデータの整合性を保つために分散トランザクションが必要だが、何か良くワカラン上に、たぶん遅い。非同期IOの実装は難しくないけど、信頼性が落ちる。
カーネルモードはイヤだけど、FUSEもイヤ


ファイルをinode(数字)で識別したい。カーネルモードだとそのあたりやってくれる。FUSEだとファイルパス(文字列)になってしまってイヤ。いちいちハッシュ取るのも何かイヤ。

それから、FUSEだとカーネルキャッシュをコントロールできないっぽい。それでもってユーザースペースでキャッシュをやると遅い。

かと言ってカーネルモードはデバッグがorz Cだし。
GFSとかOCFSとかカーネルモードだけど、すごいなと思う。



で、ちょっと見つけたのが、システムコールをフックして、全部ユーザーランドでファイルシステムを完結させる方法LD_PRELOADでフックライブラリをリンクさせて、readやらwriteやらを全部フックする。
http://datafarm.apgrid.org/document/html/ja/user/samba-hook.html

ファイルシステムデーモンとライブラリ間は共有メモリかを何か使うのかな?

が、フックライブラリだとカーネルから使えない。たとえばNFSカーネルモードサーバーからは見えない。同じようにeCryptFSやCacheFSはたぶん使えない。
それからGfarmFSのフックライブラリの説明を読むと、mmap()を使えないらしい。原理的な問題?





…さて、今のところコレをやっている暇が無い。ぐぁぁ。