19 December 2016
FS Cache is persistent local cache of file system mounter over network (typically using NFS). It can minimize network traffic. When network bandwidth is low or delay between server and host is hight it can also improve performance.
Note: Keep in mind that this documentation is still work in progress.
When you use NFS share and you want to improve performace with FS Cache, then you need not to do any changes at NFS server. All you have to do is prepare some disk partition (new and empty is the best) for caching and install caching daemon called: cachefilesd
When you use RedHat 7 or CentOS 7, then you can install cachefilesd
using following command:
$ yum -y install cachefilesd
You can use existing disk partition for caching, but it is recommended to use special partition only for caching. The first reason is a little bit better performance and the second is no need to set up cache cull limits.
The partition used for caching has to support extended attributes, because it is used for storing coherence maintenance information. Following file systems support extended attributes y default: ext4, xfs, btrfs. When you prefer to use ext3, then extended attributes has to be enabled:
$ tune2fs -o user_xattr /dev/device # ext3 only
To format some empty partition using e.g. ext4 you have to type following command:
$ mkfs.ext4 /dev/device
Try to mount device to some directory:
$ mount /dev/device /some/directory
We will used it for caching of FS Cache and default directory used for caching is /var/cache/fscache
. So we can use this directory as mount point. Don’t forget to add one record to /etc/fstab
to automatically mount partition during start of the system:
/dev/device /var/cache/fscache ext4 defaults 0 0
When you will use different mount point, then you will have to change recored in configuration file of cachefilesd
. Configuration file /etc/cachefilesd.conf
contains by default something like this:
dir /var/cache/fscache
tag mycache
brun 10%
bcull 7%
bstop 3%
frun 10%
fcull 7%
fstop 3%
secctx system_u:system_r:cachefiles_kernel_t:s0
It is assumed that you are able to mount NFS share using following command:
$ mount nfsshare.company.com:/ /nfsshare/local/mountpoint
When you configured FS Cache daemon, then you can try to start it using:
$ systemctl start cachefilesd
To automatically start this service during start of system type:
$ systemctl enable cachefilesd
To try caching of NFS share you have to unmount NFS share:
$ umount /nfsshare/local/mountpoint
and then you have to mount it again with following option:
$ mount nfsshare.company.com:/ /nfsshare/local/mountpoint -o fsc
When NFS share is mounted, then you can check statistics using:
$ watch -n 1 "cat /proc/fs/fscache/stats"
The cachefilesd will also create local caches in /var/cache/fscache
To use FS Caching automatically, when NFS share is mounted, you have to add fsc
option to your /etc/fstab
e.g.:
nfserver.company.cz:/ /nfsshare/local/mountpoint nfs4 rw,soft,intr,noatime,rsize=32768,wsize=32768,fsc,comment=systemd.automount 0 0
You can check that your NFS share is mounted with fcs
option using:
$ mount | grep "nfserver.company.cz"
To test disk performance you can use several tools: