FreeBSD in FUSE : だいたいの流れメモ
AsiaBSDCon2012 3日目 P6A: FUSE and FreeBSDなるセッションを受けて、FUSEの内部実装を追いかける気力が(FreeBSDに関しては)復活したので軽く流れを追いかけて見るテスト。
対象となるコードは下記のパッチ
RFC: FUSE kernel module for the kernel...
http://lists.freebsd.org/pipermail/freebsd-current/2012-March/032374.html
※ なお、上記パッチは2012/3/8に投稿されたものでありその後RFCへの応答によっては一部書き換わっている可能性があります。
一番の興味がカーネル <-> ユーザランドの通信部分なので、そこのフローを重点的に書き起こしてみる。シナリオはユーザプロセスが、FUSEで作られたファイルシステム(実体はユーザランドのデーモンプロセス)からデータをreadするときにどういうパスをたどるか。基本的な条件として、readはO_DIRECTフラグ付きであると仮定(おいかけるの楽だから)。
エセ・シーケンス図でなんとなく書いてみるとこんな感じ?
ユーザからのI/Oが発生した際はこれをキューに詰み待機、デーモン側での/dev/fuse*へのread時にこれを取得、writeで応答してたたき起こすというフローらしい。