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.
|September 2015 Issue of Linux Journal: HOW-TOs||Sep 01, 2015|
|September 2015 Video Preview||Sep 01, 2015|
|Using tshark to Watch and Inspect Network Traffic||Aug 31, 2015|
|Where's That Pesky Hidden Word?||Aug 28, 2015|
|A Project to Guarantee Better Security for Open-Source Projects||Aug 27, 2015|
|Concerning Containers' Connections: on Docker Networking||Aug 26, 2015|
- Optimization in GCC
- Using tshark to Watch and Inspect Network Traffic
- September 2015 Issue of Linux Journal: HOW-TOs
- Problems with Ubuntu's Software Center and How Canonical Plans to Fix Them
- Concerning Containers' Connections: on Docker Networking
- A Project to Guarantee Better Security for Open-Source Projects
- Firefox Security Exploit Targets Linux Users and Web Developers
- Where's That Pesky Hidden Word?
- My Network Go-Bag
- Doing Astronomy with Python