hajichan.net technical version

サーバ管理

cachefs

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.
ページのトップへ戻る