Merge tag 'mfd-fixes-4.9.1' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd
[linux/fpc-iii.git] / Documentation / vm / z3fold.txt
blob38e4dac810b62b2092f845d2a436ae15455ae9a4
1 z3fold
2 ------
4 z3fold is a special purpose allocator for storing compressed pages.
5 It is designed to store up to three compressed pages per physical page.
6 It is a zbud derivative which allows for higher compression
7 ratio keeping the simplicity and determinism of its predecessor.
9 The main differences between z3fold and zbud are:
10 * unlike zbud, z3fold allows for up to PAGE_SIZE allocations
11 * z3fold can hold up to 3 compressed pages in its page
12 * z3fold doesn't export any API itself and is thus intended to be used
13   via the zpool API.
15 To keep the determinism and simplicity, z3fold, just like zbud, always
16 stores an integral number of compressed pages per page, but it can store
17 up to 3 pages unlike zbud which can store at most 2. Therefore the
18 compression ratio goes to around 2.7x while zbud's one is around 1.7x.
20 Unlike zbud (but like zsmalloc for that matter) z3fold_alloc() does not
21 return a dereferenceable pointer. Instead, it returns an unsigned long
22 handle which encodes actual location of the allocated object.
24 Keeping effective compression ratio close to zsmalloc's, z3fold doesn't
25 depend on MMU enabled and provides more predictable reclaim behavior
26 which makes it a better fit for small and response-critical systems.