Re: Compression filter for Loopback device

From: Phillip Lougher
Date: Fri Jul 23 2004 - 14:12:33 EST


On Thu, 2004-07-23 Paulo Marques wrote:
>
>I did start working on something like that a while ago. I even
>registered for a project on sourceforge:
>
>http://sourceforge.net/projects/zloop/
>
> - The block device doesn't understand anything about files. This is
>an advantage because it will compress the filesystem metadata
>transparently, but it is bad because it compresses "unused" blocks of
>data. This could probably be avoided with a patch I saw floating around
>a while ago that zero'ed delete ext2 files. Zero'ed blocks didn't accupy
>any space at all in my compressed scheme, only metadata (only 2 bytes
>per block).
>

The fact the block device doesn't understand anything about the filesystem is a *major* disadvantage. Cloop has a I/O and seeking performance hit because it doesn't understand the filesystem, and this will be far worse for write compression. Every time a block update is seen by your block layer you'll have to recompress the block, it is going to be difficult to cache the block because you're below the block cache (any writes you see shouldn't be cached). If you use a larger compressed block size than the block size, you'll also have to decompress each compressed block to obtain the missing data to recompress. Obviously Linux I/O scheduling has a large part to play, and you better hope to see bursts of writes to consecutive disk blocks.

>I did a proof of concept using a nbd server. This way I could test
>everything in user space.
>
>With this NBD server I tested the compression ratios that my scheme
>could achieve, and they were much better than those achieved by cramfs,
>and close to tar.gz ratios. This I wasn't expecting, but it was a nice
>surprise :)

I'm very surprised you got ratios better than CramFS, which were close to tar.gz. Cramfs is actually quite efficient in it's use of metadata, what lets cramfs down is that it compresses in units of the page size or 4K blocks. Cloop/Squashfs/tar.gz use much larger blocks which obtain much better compression ratios.

What size blocks did you do your compression and/or what compression algorithm did you use? There is a dramatic performance trade-off here. If you used larger than 4K blocks every time your compressing block device is presented with a (probably 4K) block update, you need to decompress your larger compression block, very slow. If you used 4K blocks then I cannot see how you obtained better compression than cramfs.

Phillip

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/