Mike Rapoport | 44bc09e | 2018-03-21 21:22:44 +0200 | [diff] [blame] | 1 | .. _z3fold: |
| 2 | |
| 3 | ====== |
Vitaly Wool | 9a001fc | 2016-05-20 16:58:30 -0700 | [diff] [blame] | 4 | z3fold |
Mike Rapoport | 44bc09e | 2018-03-21 21:22:44 +0200 | [diff] [blame] | 5 | ====== |
Vitaly Wool | 9a001fc | 2016-05-20 16:58:30 -0700 | [diff] [blame] | 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: |
Mike Rapoport | 44bc09e | 2018-03-21 21:22:44 +0200 | [diff] [blame] | 13 | |
Vitaly Wool | 9a001fc | 2016-05-20 16:58:30 -0700 | [diff] [blame] | 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. |