cachefsはデータをローカルにキャッシュすることで高速アクセスを可能にする機能です。例えばNFSと併用すれば、ネットワーク越しのリソースにアクセスする際に、ローカルキャッシュにアクセスするため効果が期待できます。以下、簡単にその機能を記載します。詳細はマニュアルを参照下さい。
クライアント側でcfsadminコマンドでキャッシュディレクトリの設定をします。そして、マウントする際に、ファイルシステムはcachefsを指定し、オプションでバックグラウンドで動作しているファイルシステムと、作成したキャッシュディレクトリを指定します。
/var/cacheに100MBのキャッシュディレクトリを作成する。
# cfsadmin -c -o maxfilesize=100 /var/cache
設定内容を確認してみる。
# cfsadmin -l /var/cache --- cfsadmin: list cache FS information maxblocks 90% minblocks 0% threshblocks 85% maxfiles 90% minfiles 0% threshfiles 85% maxfilesize 100MB
マウントする。
# mount -F cachefs -o backfstype=nfs,cachedir=/var/cache \ nfs-srv:/export/home/data /mnt
demandconstオプションを付けてマウントすると、定期的にキャッシュの整合性チェックに行かないのでネットワークトラフィックを抑えることができます。但し、キャッシュの整合性チェックをかけるには、手動で
cfsadmin -s <mount point>
を実行する必要があります
# mount -F cachefs -o backfstype=nfs,cachedir=/var/cache,demandconst \ nfs-srv:/export/home/data /mnt
cachefsstatコマンドでキャッシュの統計情報を取得できます。
# cachefsstat /mnt --- /mnt cache hit rate: 100% (0 hits, 0 misses) consistency checks: 2 (2 pass, 0 fail) modifies: 0 garbage collection: 0
キャッシュサイズが適正であるかどうか判断するには、cachefslogコマンドで一定期間ログを取得しておいて、cachefswssizeコマンドでそのログを解析することで判断できます。キャッシュサイズが小さいとアクセス遅延が発生し、キャッシュサイズが大きいと領域が無駄になってしまいます。
キャッシュログ取得。
# cachefslog -f /var/tmp/clog /mnt --- /var/tmp/clog: /mnt
キャッシュログ停止。
# cachefslog -h /mnt --- not logged: /mnt
キャッシュサイズ解析。
# cachefswssize /var/tmp/clog --- /mnt end size: 56k high water size: 56k total for cache initial size: 17968k end size: 56k high water size: 56k
一般的に、キャッシュの初期サイズ(initial size)とキャッシュの最大作業サイズ(high water size)が同じ場合は、割り当てたキャッシュサイズは小さく、キャッシュの初期サイズ(initial size)がキャッシュの最大作業サイズ(high water size)よりかなり大きい場合は、割り当てたキャッシュサイズは大きいようです。
後片づけ方法を記載します。
# umount /mnt --- umount -F cachefs: cachefsd is not running # cfsadmin -d all /var/cache # cfsadmin -l /var/cache --- cfsadmin: File /var/cache/.cfs_label does not exist. cfsadmin: Reading /var/cache/.cfs_label failed.