0001 .. _z3fold:
0002
0003 ======
0004 z3fold
0005 ======
0006
0007 z3fold is a special purpose allocator for storing compressed pages.
0008 It is designed to store up to three compressed pages per physical page.
0009 It is a zbud derivative which allows for higher compression
0010 ratio keeping the simplicity and determinism of its predecessor.
0011
0012 The main differences between z3fold and zbud are:
0013
0014 * unlike zbud, z3fold allows for up to PAGE_SIZE allocations
0015 * z3fold can hold up to 3 compressed pages in its page
0016 * z3fold doesn't export any API itself and is thus intended to be used
0017 via the zpool API.
0018
0019 To keep the determinism and simplicity, z3fold, just like zbud, always
0020 stores an integral number of compressed pages per page, but it can store
0021 up to 3 pages unlike zbud which can store at most 2. Therefore the
0022 compression ratio goes to around 2.7x while zbud's one is around 1.7x.
0023
0024 Unlike zbud (but like zsmalloc for that matter) z3fold_alloc() does not
0025 return a dereferenceable pointer. Instead, it returns an unsigned long
0026 handle which encodes actual location of the allocated object.
0027
0028 Keeping effective compression ratio close to zsmalloc's, z3fold doesn't
0029 depend on MMU enabled and provides more predictable reclaim behavior
0030 which makes it a better fit for small and response-critical systems.