[OpenAFS-devel] Re: afscache on UFS+logging or ZFS?

Mattias Pantzare pantzer@ludd.ltu.se
Thu, 5 Aug 2010 10:40:55 +0200


>>> Can AFS cache be placed on any local filesystem like ZFS, VxFS or
>>> UFS+logging?
>>>
>>
>> ZFS and UFS have been used (with and without logging). I'm not sure if
>> anyone has tried to use VxFS, but in theory I think it should work as
>> our cache I/O mechanisms are supposed to be FS-agnostic.
>>
>> Note that there is a known (unfixable) issue with ZFS caches that can
>> cause them to take up far more disk space than you have configured.
>>
>> <http://www.openafs.org/pipermail/openafs-devel/2009-September/017033.html>
>> has some information. Decreasing the ZFS recordsize makes it not as bad,
>> though the issue is still always there.
>>
>>
>
> This should't be a big issue. You can always set recordsize to something
> smaller.
> Well, one could even enable compression on zfs (depending on what data is
> being cached).
> From the afs point of view as someone else suggested instead of truncating a
> file we would create a new one and unlink the old one.
>
> Actually I believe there is another way which is less expensive. The
> underlying problem is that once zfs sets a recordsize for a given file it
> will stick to it forever. So if you create a new file and initially write
> more than 128KB of data with a default recordsize of 128KB zfs will use a fs
> blocksize of 128KB, even if file is truncated later on. However if you would
> create a file and initially write only lets say 1KB it will choose a 1KB
> recordsize and then stick to it regardless of how much data is being
> written. But then it is easier for a sysadmin to just limit the recordsize
> to 8kb (or 1kb, or whatever) I guess. Afsd could check recordsize during
> startup and issue a warning with recommendation to lower it to a smaller
> value.

No, that is not how it works. A file will stick to the recordsize that
was set for the filesystem when the file was created, regardless of
the size of inital writes.

A file smaller than recordsize will have a smaller record but that
will grow to recordsize when you write more data.