[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20221109115047.2921851-1-senozhatsky@chromium.org>
Date: Wed, 9 Nov 2022 20:50:34 +0900
From: Sergey Senozhatsky <senozhatsky@...omium.org>
To: Minchan Kim <minchan@...nel.org>,
Andrew Morton <akpm@...ux-foundation.org>
Cc: Nitin Gupta <ngupta@...are.org>,
Suleiman Souhlal <suleiman@...gle.com>,
linux-kernel@...r.kernel.org, linux-mm@...ck.org,
Sergey Senozhatsky <senozhatsky@...omium.org>
Subject: [PATCHv5 00/13] zram: Support multiple compression streams
Hello,
This series adds support for multiple compression streams.
The main idea is that different compression algorithms have different
characteristics and zram may benefit when it uses a combination of
algorithms: a default algorithm that is faster but have lower
compression rate and a secondary algorithm that can use higher
compression rate at a price of slower compression/decompression.
There are several use-case for this functionality:
- huge pages re-compression: zstd or deflate can successfully
compress huge pages (~50% of huge pages on my synthetic ChromeOS
tests), IOW pages that lzo was not able to compress.
- idle pages re-compression: idle/cold pages sit in the memory
and we may reduce zsmalloc memory usage if we recompress those
idle pages.
User-space has a number of ways to control the behavior
and impact of zram recompression: what type of pages should be
recompressed, size watermarks, etc. Please refer to documentation
patch.
v5:
-- Addressed (very valuable) review feedback from Minchan
-- Extended documentation
-- We now do chain recompression, tryin algos in order of their priority
-- Support up to 4 compression streams
-- Added named parameters to recomp_algorithm and recompress sysfs knobs
-- Cherry-picked patch from Alexey
-- Store algo priority in mete flags
-- Renamed some fo the flags
-- Added incompressible bit to block state output
-- Added incompressible writeback
-- etc.
v4:
-- added IS_ERR_VALUE patch (Andrew)
-- documented SIZE units (bytes) (Andrew)
-- re-phrased writeback BIO error comment (Andrew)
-- return zs_malloc() error code from zram_recompress()
-- do not lose zram_recompress() error in recompress_store()
-- corrected a typo
-- fixed previous rebase errors
-- rebased the series
v3:
-- conditionally reschedule during recompression loop so that
we don't stall RCU grace periods
-- fixed a false-positive WARN_ON
v2:
-- rebased
-- mark completely incompressible pages (neither default nor secondary
algorithm can compress them) with a new flag so that we don't attempt
to recompress them all the time
Alexey Romanov (1):
zram: add size class equals check into recompression
Sergey Senozhatsky (12):
zram: Preparation for multi-zcomp support
zram: Add recompression algorithm sysfs knob
zram: Factor out WB and non-WB zram read functions
zram: Introduce recompress sysfs knob
zram: Add recompress flag to read_block_state()
zram: Clarify writeback_store() comment
zram: Use IS_ERR_VALUE() to check for zs_malloc() errors
zram: remove redundant checks from zram_recompress()
zram: Add algo parameter support to zram_recompress()
documentation: Add zram recompression documentation
zram: add incompressible writeback
zram: Add incompressible flag to read_block_state()
Documentation/admin-guide/blockdev/zram.rst | 100 +++-
drivers/block/zram/Kconfig | 9 +
drivers/block/zram/zcomp.c | 6 +-
drivers/block/zram/zcomp.h | 2 +-
drivers/block/zram/zram_drv.c | 604 +++++++++++++++++---
drivers/block/zram/zram_drv.h | 22 +-
include/linux/zsmalloc.h | 2 +
mm/zsmalloc.c | 21 +
8 files changed, 685 insertions(+), 81 deletions(-)
--
2.38.1.431.g37b22c650d-goog
Powered by blists - more mailing lists