A general caching filesystem
Linux, however, has no mechanism which allows filesystems to perform local disk caching. Or, at least, it didn't have such a mechanism; David Howells's CacheFS patch changes that.
With CacheFS, the system administrator can set aside a partition on a block device for file caching. CacheFS will then present an interface which may be used by other filesystems. There is a basic registration interface, and a fairly elaborate mechanism for assigning an index to each file. Different filesystems will have different ways of creating identifiers for files, so CacheFS tries to impose as little policy as possible and let the filesystem code do what it wants. Finally, of course, there is an interface for caching a page from a file, noting changes, removing pages from the cache, etc.
CacheFS does not attempt to cache entire files; it must be able to deal with the possibility that somebody will try to work with a file which is bigger than the entire cache. It also does not actually guarantee to cache anything; it must be able to perform its own space management, and things must still function even in the absence of an actual cache device. This should not be an obstacle for most filesystems which, by their nature, must be prepared to deal with the real source for their files in the first place.
CacheFS is meant to work with other filesystems, rather than being used as a standalone filesystem in its own right. Its partitions must be mounted before use, however, and CacheFS uses the mount point to provide a view into the cached filesystem(s). The administrator can even manually force files out of the cache by simply deleting them from the mounted filesystem.
Interposing a cache between the user and the real filesystem clearly adds another failure point which could result in lost data. CacheFS addresses this issue by performing journaling on the cache contents. If things come to an abrupt halt, CacheFS will be able to replay any lost operations once everything is up and functioning again.
The current CacheFS patch is used only by the AFS filesystem, but work is
in progress to adapt others as well. NFS, in particular, should benefit
greatly from CacheFS, especially when NFSv4 (which is designed to allow
local caching) is used. Expect this patch to have a relatively easy
journey into the mainstream kernel. For those wanting more information,
see the documentation file included with
the patch.
Index entries for this article | |
---|---|
Kernel | CacheFS |
Kernel | Network filesystems/Caching layer |
Posted Sep 2, 2004 16:41 UTC (Thu)
by scripter (subscriber, #2654)
[Link] (2 responses)
Posted Sep 3, 2004 19:49 UTC (Fri)
by hppnq (guest, #14462)
[Link]
Posted Sep 13, 2004 18:49 UTC (Mon)
by AnswerGuy (guest, #1256)
[Link]
Other than that CacheFS should preserve the same permissions semantics as if a given user/host were accessing the backend filesystem/service directly.
Posted Sep 14, 2004 2:13 UTC (Tue)
by xoddam (guest, #2322)
[Link] (1 responses)
Posted Oct 25, 2004 0:55 UTC (Mon)
by jcm (subscriber, #18262)
[Link]
> This seems to me like a really complicated reimplementation of
No it's really not. By virtual memory your are referring to an aspect of VM implementations known as paging, and that in itself only really impacts upon so called ``anonymous memory''. There is a page cache for certain regular filesystems but it's not possible for all filesystems to exploit the page cache to full effect and in any case this patch adds the ability to use a local disk as an additional cache storage for even slower stuff like network mounted filesystems - so the page cache can always sit between this disk and user processes which use it.
Jon.
Posted Oct 7, 2004 18:57 UTC (Thu)
by BrucePerens (guest, #2510)
[Link]
Put a cache filesystem on a FLASH disk plugged into my laptop. My laptop has a 512M MagicGate card, which looks like a USB disk. Use it to cache all recently read and written blocks from the hard disk, and allow the hard disk to remain spun down most of the time. Anytime the disk has to be spun up, flush any pending write blocks to it.
This would be an improvement over "laptop mode" in that it would not require system RAM and could thus be larger, and would not be as volatile as a RAM write cache. Bruce
I wonder what the security implications of CacheFS are. Does each file inherit the permissions of the original? Is confidentiality a problem? What if you want to securely erase a file?CacheFS & Security
Not knowing anything about CacheFS internals, I would say these are cases of "don't do it, then". ;-)
CacheFS & Security
The only difference between accessing a filesystem directly and through CacheFS should be that the CacheFS can store copies of the accessed data on a local block device. In other words that there's a (potentially persistent) footprint of all accesses.CacheFS & Security
This seems to me like a really complicated reimplementation of virtual A general caching filesystem
memory.
All filesystems already use VM pages for caching, don't they?
I'd have thought that attaching backing store to those pages would have
been a much simpler task than writing a whole new cache interface.
But then I'm not really a filesystem hacker.
xoddam writes:A general caching filesystem
> virtual memory.
I haven't looked at the CacheFS code yet, but this is what I would like to do with it, or something like it.Improve "Laptop mode"