]>
Commit | Line | Data |
---|---|---|
44bc09eb MR |
1 | .. _z3fold: |
2 | ||
3 | ====== | |
9a001fc1 | 4 | z3fold |
44bc09eb | 5 | ====== |
9a001fc1 VW |
6 | |
7 | z3fold is a special purpose allocator for storing compressed pages. | |
8 | It is designed to store up to three compressed pages per physical page. | |
9 | It is a zbud derivative which allows for higher compression | |
10 | ratio keeping the simplicity and determinism of its predecessor. | |
11 | ||
12 | The main differences between z3fold and zbud are: | |
44bc09eb | 13 | |
9a001fc1 VW |
14 | * unlike zbud, z3fold allows for up to PAGE_SIZE allocations |
15 | * z3fold can hold up to 3 compressed pages in its page | |
16 | * z3fold doesn't export any API itself and is thus intended to be used | |
17 | via the zpool API. | |
18 | ||
19 | To keep the determinism and simplicity, z3fold, just like zbud, always | |
20 | stores an integral number of compressed pages per page, but it can store | |
21 | up to 3 pages unlike zbud which can store at most 2. Therefore the | |
22 | compression ratio goes to around 2.7x while zbud's one is around 1.7x. | |
23 | ||
24 | Unlike zbud (but like zsmalloc for that matter) z3fold_alloc() does not | |
25 | return a dereferenceable pointer. Instead, it returns an unsigned long | |
26 | handle which encodes actual location of the allocated object. | |
27 | ||
28 | Keeping effective compression ratio close to zsmalloc's, z3fold doesn't | |
29 | depend on MMU enabled and provides more predictable reclaim behavior | |
30 | which makes it a better fit for small and response-critical systems. |