Commit | Line | Data |
---|---|---|
9a001fc1 VW |
1 | z3fold |
2 | ------ | |
3 | ||
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. | |
8 | ||
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. | |
14 | ||
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. | |
19 | ||
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. | |
23 | ||
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. |