From: Sergey Senozhatsky <senozhatsky@chromium.org>
To: Andrew Morton <akpm@linux-foundation.org>,
Minchan Kim <minchan@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
Sergey Senozhatsky <senozhatsky@chromium.org>
Subject: [PATCHv3 00/19] zram: convert to custom compression API and allow algorithms tuning
Date: Wed, 8 May 2024 16:41:53 +0900 [thread overview]
Message-ID: <20240508074223.652784-1-senozhatsky@chromium.org> (raw)
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. Basically,
this seroes brings back the bits of comp "backend" code that we had
many years ago. This means that if we want zram to support new
compression algorithms we need to implement corresponding backends.
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:
- changes default compression level
echo "algo=zstd level=11" > /sys/block/zram0/comp_algorithm
- passes path to a pre-trained dictionary
echo "algo=zstd 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
v3:
-- support pre-trained dictionary in lz4
-- support pre-trained dictionary in lz4hc
v2:
-- forcibly select LZO when none backeneds were selected (Masahiro Yamada)
-- add 842 compression backend
-- added comp config preprocessing and caching
-- reworked zstd dict handling
Sergey Senozhatsky (19):
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
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
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 | 123 +++++++++++
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 | 221 ++++++++++++++++++++
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 +
21 files changed, 1203 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
next reply other threads:[~2024-05-08 7:42 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-08 7:41 Sergey Senozhatsky [this message]
2024-05-08 7:41 ` [PATCHv3 01/19] zram: move from crypto API to custom comp backends API Sergey Senozhatsky
2024-05-08 7:41 ` [PATCHv3 02/19] zram: add lzo and lzorle compression backends support Sergey Senozhatsky
2024-05-09 11:23 ` kernel test robot
2024-05-10 5:33 ` Sergey Senozhatsky
2024-05-08 7:41 ` [PATCHv3 03/19] zram: add lz4 compression backend support Sergey Senozhatsky
2024-05-10 7:00 ` Sergey Senozhatsky
2024-05-08 7:41 ` [PATCHv3 04/19] zram: add lz4hc " Sergey Senozhatsky
2024-05-08 7:41 ` [PATCHv3 05/19] zram: add zstd " Sergey Senozhatsky
2024-05-08 7:41 ` [PATCHv3 06/19] zram: pass estimated src size hint to zstd Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 07/19] zram: add zlib compression backend support Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 08/19] zram: add 842 " Sergey Senozhatsky
2024-05-09 12:42 ` Christoph Hellwig
2024-05-10 4:43 ` Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 09/19] zram: check that backends array has at least one backend Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 10/19] zram: introduce zcomp_config structure Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 11/19] zram: extend comp_algorithm attr write handling Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 12/19] zram: support compression level comp config Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 13/19] zram: add support for dict " Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 14/19] zram: add dictionary support to zstd backend Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 15/19] zram: add config init/release backend callbacks Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 16/19] zram: share dictionaries between per-CPU contexts Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 17/19] zram: add dictionary support to lz4 Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 18/19] zram: add dictionary support to lz4hc Sergey Senozhatsky
2024-05-08 7:42 ` [PATCHv3 19/19] Documentation/zram: add documentation for algorithm parameters Sergey Senozhatsky
2024-05-09 12:43 ` [PATCHv3 00/19] zram: convert to custom compression API and allow algorithms tuning Christoph Hellwig
2024-05-10 5:15 ` Sergey Senozhatsky
2024-05-10 7:40 ` Herbert Xu
2024-05-10 8:08 ` Sergey Senozhatsky
2024-05-10 8:12 ` Herbert Xu
2024-05-10 8:28 ` Sergey Senozhatsky
2024-05-10 8:30 ` Herbert Xu
2024-05-10 8:40 ` Sergey Senozhatsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240508074223.652784-1-senozhatsky@chromium.org \
--to=senozhatsky@chromium.org \
--cc=akpm@linux-foundation.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=minchan@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).