性能向上は大きな課題
同期書き込みから遅延書き込みへ
- 短縮 削除
- 書き戻し処理を完全に止めることも出来る→クライアントの時間の短縮
遅延書き込みにも問題
- 一貫性の提供
- エラーの伝達に問題
- ローカルにキャッシュしててディスクがいっぱいになったら、ファイルはクローズしているのでデータは永遠に失われる
- fsyncをあちこちやると面倒
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/fsync.2.html
折衷案 非同期書き込み
- 同期 完全に処理が終わってから通信すうr
- 遅延 データをキャッシュに書き込んで、キャッシュの情報をサーバに送る
- 非同期 キャッシュに書き込みつつ、アプリに対しての結果通知とサーバに対する通信を同時に行う
Sprite
http://en.wikipedia.org/wiki/Sprite_(operating_system)
NFSは独自方式
非同期書き込みと遅延書き込みの組み合わせ
キャッシュを使うたびに内容を確認し、さらにサーバへ確認する キャッシュの記録時刻とサーバから帰ってきた時刻が一致すればキャッシュのデータを使い、一致しなければキャッシュを更新
RPC要求が押し寄せてくるので遅い
コールバック
サーバがクライアントがキャッシュしているすべてのファイルを管理する
- 要求の数が劇的に減った
- サーバが状態を保持しないといけない
FreeBSD
- ファイルオープン時には非同期書き込みで、書き戻されるのを同期的に待機する