[PATCHv4 0/9] zsmalloc/zram: configurable zspage size

From: Sergey Senozhatsky
Date: Mon Oct 31 2022 - 01:41:24 EST


Hello,

Some use-cases and/or data patterns may benefit from
larger zspages. Currently the limit on the number of physical
pages that are linked into a zspage is hardcoded to 4. Higher
limit changes key characteristics of a number of the size
classes, improving compactness of the pool and redusing the
amount of memory zsmalloc pool uses. More on this in 0002
commit message.

v4:
-- Fixed type of the max_pages_per_zspage (kbuild reported a
"warning: right shift count >= width of type" warning)
-- Renamed max_pages_per_zspage variable

v3:
-- Removed lots of text from 0002 commit message. Now it's shorter
and simpler.

v2:
-- Cherry picked a patch from Alexey (minor code tweaks to move
it ahead of this series)
-- zsmalloc does not require anymore pages-per-zspage limit to be a
pow of 2 value, and overall doesn't use "order" any longer
-- zram does not require "zspage order" (pow of 2) value anymore
and instead accepts an integer in [1,16] range
-- There is no global huge_class_size in zsmalloc anymore.
huge_class_size is per-pool, since it depends on pager-per-zspage,
which can be different for different pools.
-- There is no global huge_class_size in zram anymore. It should
be per-pool (per-device).
-- Updated documentation
-- Fixed documentation htmldocs warning (Stephen)
-- Dropped get_pages_per_zspage() patch
-- Renamed zram sysfs knob (device attribute)
-- Re-worked "synthetic test" section in the first commit: more numbers,
objects distribution analysis, etc.

Alexey Romanov (1):
zram: add size class equals check into recompression

Sergey Senozhatsky (8):
zsmalloc: turn zspage order into runtime variable
zsmalloc: move away from page order defines
zsmalloc: make huge class watermark zs_pool member
zram: huge size watermark cannot be global
zsmalloc: pass limit on pages per-zspage to zs_create_pool()
zram: add pages_per_pool_page device attribute
Documentation: document zram pages_per_pool_page attribute
zsmalloc: break out of loop when found perfect zspage order

Documentation/admin-guide/blockdev/zram.rst | 38 +++++--
drivers/block/zram/zram_drv.c | 63 +++++++++--
drivers/block/zram/zram_drv.h | 7 ++
include/linux/zsmalloc.h | 14 ++-
mm/zsmalloc.c | 112 +++++++++++++-------
5 files changed, 176 insertions(+), 58 deletions(-)

--
2.38.1.273.g43a17bfeac-goog