davfs2 の キャッシュディレクトリを tmpfs にしたら大きいファイルのコピーがエラーになった
以下、最初はベンチマークとってみたって記事にしようと思って書いた文章です。 あと以下の記事の続きです。
スペック
ちなみに http (not https) です。over SSL だったらもっと違うかも。 そんな真面目にベンチマークやるつもりなかったけど一応バージョンも。*1
- サーバ
- クライアント
試行1:CentOS 7の ISO image (4329570304 B, 4.1 GB)
まずはファイルサイズの大きい手頃なファイルとして CentOS 7 の ISO image があったので単純に cp でホームディレクトリにコピーしてみる。
$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' $ time cp /mnt/dav/{iso image} . real 1m6.660s user 0m0.049s sys 0m4.311s
だいたい 500 Mbps *2。
試行2:ログファイル (ファイル数:多い、ファイルサイズ:小さい)
ファイル数が多くて1個1個のファイルサイズが小さいやつ。
$ sudo du -cksh /mnt/dav/{ログファイルのディレクトリ} 152M /mnt/dav/{ログファイルのディレクトリ} 152M 合計 $ sudo find /mnt/dav/{ログファイルのディレクトリ} -type f | wc -l 107 $ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' $ sudo bash -c 'time cp -R /mnt/dav/{ログファイルのディレクトリ} .' real 0m2.178s user 0m0.006s sys 0m0.190s
パフォーマンスチューニング
単にクライアント側のキャッシュ用のディレクトリを tmpfs にしただけ。
デフォルトの use_locks 1
だと {書き込もうとしたディレクトリ}/.DAV/.locknull
とかにも書き込んでるみたいだけど、use_locks 0
は前述した通りしたくないので見送った。
できるだけデフォルトの設定のままにしたいのもある。
/etc/fstab
tmpfs /var/cache/davfs2 tmpfs defaults 0 0
/etc/davfs2/davfs2.conf
有効にしてる設定は下記だけ。
cache_dir
にはデフォルトだと /var/cache/davfs2
と ~/.davfs2/cache
らしいけど後者がいつ使われるかわからなかったので1つだけにして tmpfs のディレクトリを指定。
ask_auth 0 cache_dir /var/cache/davfs2 # system wide cache only cache_size 50 # MiByte delay_upload 0
…と思ったけど大きいファイルをコピーしようとすると cache_size
を無視して cache_dir
にキャッシュファイルを置こうとするらしくコピーがエラーになった (man 5 davfs2.conf より引用)。 *3
cache_size
The amount of disk space in MiByte that may be used. mount.davfs will always take enough space to cache open files, ignoring this value if necessary.
結論
ちゃんと試しておいてよかった。