[Linux-cachefs] FS-Cache/CacheFS mark II

David Howells dhowells at redhat.com
Tue Jul 5 20:57:27 UTC 2005


I've written a new version of FS-Cache and CacheFS. It's not quite complete
yet, but I thought I'd wave it in front of you.

What's changed:

 (*) FS-Cache/general:

     - Readpages now supported.
     - Caches are now "tagged" for easier selection from multiple caches.
     - Entries in one index need not have keys of the same size.
     - Netfs interface simplification - page tokens no longer exist.
     - Cookie definitions now belong to cookies not their parents.
     - Data objects now have definitions.
     - Objects can have arbitrary types other than index and data file.
     - Any object can have child objects.
     - Any non-index object can have data.
     - Cookies aren't allocated for any uncached non-index object.
     - Operations on negative cookie are dealt with in inline wrapper funcs.
     - Netfs must set file size on data object before accessing pages.

 (*) CacheFS:

     - Now based on a single metadata tree.
     - No discrete indexes.
     - Journalling much simplified: wandering tree algorithm used.
     - Full filesystem integrity _and_ data integrity.
     - More space available for cache.
     - Object entries consume one sector (512 bytes) each.
     - Object entries can hold up to ~400 bytes of key and aux data.
     - Objects can hold pages with index values up to 2^32 or 2^64.
     - Netfs aux object information updated on disk in passing on write page.

See the patched documentation for more specific information.

What remains to be done / future developments:

 (*) FS-Cache/general:

     - Userspace control operations (pioctl?):
       - Object pinning.
       - Object space reservation.
       - Object retirement.
     - Allocate page(s) with no read.
     - Write multiple pages.
     - Use kobjects for cache tags so they can be accessed through sysfs.
     - Lots of testing.

 (*) CacheFS:

     - Autowander timer (currently only wanders on allocator underrun, sync or
       unmount).
     - Tree scanner:
       - Object culling to make space.
       - Orphaned object deletion.
     - Issuing ENOBUFS if no space can be made available.
     - Use CacheFS mount as filesystem, perhaps for /tmp or ccache?

 (*) CacheFiles facility (caching through files on already mounted filesystem).


The patches can be downloaded from here:

 (*) http://people.redhat.com/~dhowells/cachefs/signcmp-fix-2612mm1-10.diff

	Fix a signed/unsigned comparison to prevent -Wsign-compare from
	complaining all over the place.

 (*) http://people.redhat.com/~dhowells/cachefs/fscache-bits-2612mm1-10.diff

	Some changes to the core code to enable the new stuff.

 (*) http://people.redhat.com/~dhowells/cachefs/fscache-docs-2612mm1-10.diff

	Updated documentation.

 (*) http://people.redhat.com/~dhowells/cachefs/fscache-core-2612mm1-10.diff

	FS-Cache changes.

 (*) http://people.redhat.com/~dhowells/cachefs/fscache-cachefs-2612mm1-10.diff

	CacheFS changes.

 (*) http://people.redhat.com/~dhowells/cachefs/fscache-afs-2612mm1-10.diff

	Cached AFS changes.

 (*) http://people.redhat.com/~dhowells/cachefs/fscache-nfs-2612mm1-10.diff

	Cached NFS changes.

These were made against 2.6.12-mm1.

And there's a debugging utility as well:

	http://people.redhat.com/~dhowells/cachefs/dump-cachefs.c

This can be used to examine a block device containing a cache.

David




More information about the Linux-cachefs mailing list