Linux-Block Archive mirror
 help / color / mirror / Atom feed
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: [PATCHv4 00/21] zram: custom comp API and comp algorithms tunables
Date: Wed, 15 May 2024 16:12:37 +0900	[thread overview]
Message-ID: <20240515071645.1788128-1-senozhatsky@chromium.org> (raw)


---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


             reply	other threads:[~2024-05-15  7:16 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-15  7:12 Sergey Senozhatsky [this message]
2024-05-15  7:12 ` [PATCHv4 01/21] zram: move from crypto API to custom comp backends API Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 02/21] zram: add lzo and lzorle compression backends support Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 03/21] zram: add lz4 compression backend support Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 04/21] zram: add lz4hc " Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 05/21] zram: add zstd " Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 06/21] zram: pass estimated src size hint to zstd Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 07/21] zram: add zlib compression backend support Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 08/21] zram: add 842 " Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 09/21] zram: check that backends array has at least one backend Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 10/21] zram: introduce zcomp_config structure Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 11/21] zram: extend comp_algorithm attr write handling Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 12/21] zram: support compression level comp config Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 13/21] zram: add support for dict " Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 14/21] lib/zstd: export API needed for dictionary support Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 15/21] zram: add dictionary support to zstd backend Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 16/21] zram: add config init/release backend callbacks Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 17/21] zram: share dictionaries between per-CPU contexts Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 18/21] zram: add dictionary support to lz4 Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 19/21] lib/lz4hc: export LZ4_resetStreamHC symbol Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 20/21] zram: add dictionary support to lz4hc Sergey Senozhatsky
2024-05-15  7:12 ` [PATCHv4 21/21] Documentation/zram: add documentation for algorithm parameters 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=20240515071645.1788128-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).