FS-Cache and FUSE for Media Playback QoS
Listing 8. Running simpleread against the FUSE Shim
# rm -rf /var/fscache/* # /etc/init.d/cachefilesd restart # mount fileserver:/HomeMovies /HomeMovies -o fsc # nfs-fuse-readahead-shim --fuse-forground \ -u /HomeMovies /Cached-HomeMovies \ >|/tmp/nfs-fuse-out 2>&1 \ & # simpleread /Cached-HomeMovies/venice-2001.dv 1000 using delay of usec:1000 offset:262144 offset:524288 ^C # fg ^C #
The simpleread was stopped after reading only a little more than half a megabyte. However, the FUSE module has an asynchronous IO call at the start, requesting 8MB of data be sent to it. Poking around in /var/fscache for a file with the same size as venice-2001.dv should reveal the cache file. Comparing the first 8MB of this cache file to the version on the NFS share should show that the first 8MB is identical. Note that the local cached file is read first to make sure that the subsequent use of the NFS share does not populate the cache file before it is read. This is shown in Listing 9.
Listing 9. Checking That the Cache Has Read the First 8MB
# cd /var/fscache # ll -R ... ---------- 1 root root 800M Jun 10 02:19 Ek0...000000 # dd if=./path/to/Ek0...000000 \ of=/tmp/8mb bs=1024 count=8192 # dd if=/HomeMovies/venice-2001.dv \ of=/tmp/8mb.real bs=1024 count=8192 # diff /tmp/8mb.real /tmp/8mb #
One restriction on FS-Cache is that it will not cache files opened with O_DIRECT or for writing.
By taking advantage of the kernel FS-Cache code, the FUSE module to handle read-ahead can be very simple to create. The Delegatefs C++ FUSE base class allows one to implement additional features very easily when applications perform IO.
The FUSE nfs-fuse-readahead-shim module is started just as shown in Listing 8 and when the --fuse-forground option is not passed, nfs-fuse-readahead-shim runs silently as a dæmon.
Filesystem in USErspace (FUSE): fuse.sourceforge.net
fuselagefs and Delegatefs: sourceforge.net/project/showfiles.php?group_id=16036&package_id=225200
NFS and fscache Kernel Patches: people.redhat.com/~dhowells/cachefs/patches
Ben Martin has been working on filesystems for more than ten years. He is currently working toward a PhD combining Semantic Filesystems with Formal Concept Analysis to improve human-filesystem interaction.
Practical books for the most technical people on the planet. Newly available books include:
- Agile Product Development by Ted Schmidt
- Improve Business Processes with an Enterprise Job Scheduler by Mike Diehl
- Finding Your Way: Mapping Your Network to Improve Manageability by Bill Childers
- DIY Commerce Site by Reven Lerner
Plus many more.
- Download "Linux Management with Red Hat Satellite: Measuring Business Impact and ROI"
- Unikernels, Docker, and Why You Should Care
- Happy GPL Birthday VLC!
- Handheld Emulation: Achievement Unlocked!
- Controversy at the Linux Foundation
- Giving Silos Their Due
- Don't Burn Your Android Yet
- Wine 1.8 Released
- Firefox OS