Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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