[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240515071645.1788128-1-senozhatsky@chromium.org>
Date: Wed, 15 May 2024 16:12:37 +0900
From: Sergey Senozhatsky <senozhatsky@...omium.org>
To: Andrew Morton <akpm@...ux-foundation.org>,
Minchan Kim <minchan@...nel.org>
Cc: linux-kernel@...r.kernel.org,
linux-block@...r.kernel.org,
Sergey Senozhatsky <senozhatsky@...omium.org>
Subject: [PATCHv4 00/21] zram: custom comp API and comp algorithms tunables
---8<---8<---
This series contains important patches which we either can apply
as is (if zram makes a switch to compression backends) or cherry-pick
(if zram sticks to crypto API), as compression drivers/backends still
need to be patches regardless of direction zram takes. Sending it out
so that the patches don't get lost.
---8<---8<---
This patch set moves zram from crypto API to a custom compression
API which allows us to tune and configure compression algorithms,
something that crypto API, unfortunately, doesn't support yet.
Basically, this series brings back the bits of compression "backends"
code that we had many years ago.
Currently, zram supports a pretty decent number of comp backends:
lzo, lzorle, lz4, lz4hc, 842, deflate, zstd
At this point we handle 2 parameters: a compression level and
a pre-trained compression dictionary. Which seems like a good enough
start. The list will be extended in the future.
Examples:
- tunes compression level
echo "algo=zstd level=11" > /sys/block/zram0/comp_algorithm
- uses a pre-trained dictionary and tunes compression level
echo "algo=zstd level=11 dict=/etc/dictionary" > /sys/block/zram0/comp_algorithm
Benchmarks
==========
*** zstd
/sys/block/zram0/mm_stat
1750302720 504600204 514416640 0 514416640 1 0 34204 34204
*** zstd level=5
/sys/block/zram0/mm_stat
1750331392 488449001 497905664 0 497905664 1 0 34204 34204
*** zstd dict=/etc/dictionary
/sys/block/zram0/mm_stat
1750335488 464838883 474210304 0 474210304 1 0 34204 34204
*** zstd level=5 dict=/etc/dictionary
/sys/block/zram0/mm_stat
1750319104 451907185 461299712 0 461299712 1 0 34204 34204
*** lz4
/sys/block/zram0/mm_stat
1750319104 664253635 676859904 0 676859904 1 0 34288 34288
*** lz4 dict=/etc/dictionary
/sys/block/zram0/mm_stat
1750319104 620602911 632705024 0 632705024 1 0 34288 34288
*** lz4hc
/sys/block/zram0/mm_stat
1750315008 609004936 621092864 0 621092864 1 0 34288 34288
*** lz4hc level=5 dict=/etc/dictionary
/sys/block/zram0/mm_stat
1750323200 501315128 511303680 0 511303680 1 0 34288 34288
v4:
-- fixed ZRAM=m build error (kernel test robot @intel)
-- added compression level tunable to lz4
-- export lz4hc symbol needed for dictionary support
-- export advanced zstd API needed for dictionary support
Sergey Senozhatsky (21):
zram: move from crypto API to custom comp backends API
zram: add lzo and lzorle compression backends support
zram: add lz4 compression backend support
zram: add lz4hc compression backend support
zram: add zstd compression backend support
zram: pass estimated src size hint to zstd
zram: add zlib compression backend support
zram: add 842 compression backend support
zram: check that backends array has at least one backend
zram: introduce zcomp_config structure
zram: extend comp_algorithm attr write handling
zram: support compression level comp config
zram: add support for dict comp config
lib/zstd: export API needed for dictionary support
zram: add dictionary support to zstd backend
zram: add config init/release backend callbacks
zram: share dictionaries between per-CPU contexts
zram: add dictionary support to lz4
lib/lz4hc: export LZ4_resetStreamHC symbol
zram: add dictionary support to lz4hc
Documentation/zram: add documentation for algorithm parameters
Documentation/admin-guide/blockdev/zram.rst | 38 +++-
drivers/block/zram/Kconfig | 76 +++++--
drivers/block/zram/Makefile | 8 +
drivers/block/zram/backend_842.c | 79 +++++++
drivers/block/zram/backend_842.h | 10 +
drivers/block/zram/backend_deflate.c | 143 +++++++++++++
drivers/block/zram/backend_deflate.h | 10 +
drivers/block/zram/backend_lz4.c | 128 +++++++++++
drivers/block/zram/backend_lz4.h | 10 +
drivers/block/zram/backend_lz4hc.c | 128 +++++++++++
drivers/block/zram/backend_lz4hc.h | 10 +
drivers/block/zram/backend_lzo.c | 55 +++++
drivers/block/zram/backend_lzo.h | 10 +
drivers/block/zram/backend_lzorle.c | 55 +++++
drivers/block/zram/backend_lzorle.h | 10 +
drivers/block/zram/backend_zstd.c | 223 ++++++++++++++++++++
drivers/block/zram/backend_zstd.h | 10 +
drivers/block/zram/zcomp.c | 155 +++++++-------
drivers/block/zram/zcomp.h | 42 +++-
drivers/block/zram/zram_drv.c | 120 ++++++++++-
drivers/block/zram/zram_drv.h | 1 +
include/linux/zstd.h | 165 +++++++++++++++
lib/lz4/lz4hc_compress.c | 1 +
lib/zstd/zstd_compress_module.c | 52 +++++
lib/zstd/zstd_decompress_module.c | 38 ++++
25 files changed, 1466 insertions(+), 111 deletions(-)
create mode 100644 drivers/block/zram/backend_842.c
create mode 100644 drivers/block/zram/backend_842.h
create mode 100644 drivers/block/zram/backend_deflate.c
create mode 100644 drivers/block/zram/backend_deflate.h
create mode 100644 drivers/block/zram/backend_lz4.c
create mode 100644 drivers/block/zram/backend_lz4.h
create mode 100644 drivers/block/zram/backend_lz4hc.c
create mode 100644 drivers/block/zram/backend_lz4hc.h
create mode 100644 drivers/block/zram/backend_lzo.c
create mode 100644 drivers/block/zram/backend_lzo.h
create mode 100644 drivers/block/zram/backend_lzorle.c
create mode 100644 drivers/block/zram/backend_lzorle.h
create mode 100644 drivers/block/zram/backend_zstd.c
create mode 100644 drivers/block/zram/backend_zstd.h
--
2.45.0.rc1.225.g2a3ae87e7f-goog
Powered by blists - more mailing lists