From: Andrew Morton <akpm@linux-foundation.org>
To: mm-commits@vger.kernel.org, suleiman@google.com,
nphamcs@gmail.com, ngupta@vflare.org, minchan@kernel.org,
avromanov@sberdevices.ru, senozhatsky@chromium.org,
akpm@linux-foundation.org
Subject: [merged mm-stable] zram-add-algo-parameter-support-to-zram_recompress.patch removed from -mm tree
Date: Wed, 30 Nov 2022 16:01:34 -0800 [thread overview]
Message-ID: <20221201000135.99FAEC433B5@smtp.kernel.org> (raw)
The quilt patch titled
Subject: zram: add algo parameter support to zram_recompress()
has been removed from the -mm tree. Its filename was
zram-add-algo-parameter-support-to-zram_recompress.patch
This patch was dropped because it was merged into the mm-stable branch
of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Sergey Senozhatsky <senozhatsky@chromium.org>
Subject: zram: add algo parameter support to zram_recompress()
Date: Wed, 9 Nov 2022 20:50:44 +0900
Recompression iterates through all the registered secondary compression
algorithms in order of their priorities so that we have higher chances of
finding the algorithm that compresses a particular page. This, however,
may not always be best approach and sometimes we may want to limit
recompression to only one particular algorithm. For instance, when a
higher priority algorithm uses too much power and device has a relatively
low battery level we may want to limit recompression to use only a lower
priority algorithm, which uses less power.
Introduce algo= parameter support to recompression sysfs knob so that
user-sapce can request recompression with particular algorithm only:
echo "type=idle algo=zstd" > /sys/block/zramX/recompress
Link: https://lkml.kernel.org/r/20221109115047.2921851-11-senozhatsky@chromium.org
Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Acked-by: Minchan Kim <minchan@kernel.org>
Cc: Alexey Romanov <avromanov@sberdevices.ru>
Cc: Nhat Pham <nphamcs@gmail.com>
Cc: Nitin Gupta <ngupta@vflare.org>
Cc: Suleiman Souhlal <suleiman@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
drivers/block/zram/zram_drv.c | 54 ++++++++++++++++++++++++++------
drivers/block/zram/zram_drv.h | 1
2 files changed, 46 insertions(+), 9 deletions(-)
--- a/drivers/block/zram/zram_drv.c~zram-add-algo-parameter-support-to-zram_recompress
+++ a/drivers/block/zram/zram_drv.c
@@ -1674,6 +1674,7 @@ static int zram_recompress(struct zram *
unsigned int comp_len_new;
unsigned int class_index_old;
unsigned int class_index_new;
+ u32 num_recomps = 0;
void *src, *dst;
int ret;
@@ -1708,6 +1709,7 @@ static int zram_recompress(struct zram *
if (prio <= zram_get_priority(zram, index))
continue;
+ num_recomps++;
zstrm = zcomp_stream_get(zram->comps[prio]);
src = kmap_atomic(page);
ret = zcomp_compress(zstrm, src, &comp_len_new);
@@ -1740,13 +1742,19 @@ static int zram_recompress(struct zram *
if (!zstrm)
return 0;
- /*
- * All secondary algorithms failed to re-compress the page in a way
- * that would save memory, mark the object as incompressible so that
- * we will not try to compress it again.
- */
if (class_index_new >= class_index_old) {
- zram_set_flag(zram, index, ZRAM_INCOMPRESSIBLE);
+ /*
+ * Secondary algorithms failed to re-compress the page
+ * in a way that would save memory, mark the object as
+ * incompressible so that we will not try to compress
+ * it again.
+ *
+ * We need to make sure that all secondary algorithms have
+ * failed, so we test if the number of recompressions matches
+ * the number of active secondary algorithms.
+ */
+ if (num_recomps == zram->num_active_comps - 1)
+ zram_set_flag(zram, index, ZRAM_INCOMPRESSIBLE);
return 0;
}
@@ -1795,10 +1803,11 @@ static ssize_t recompress_store(struct d
struct device_attribute *attr,
const char *buf, size_t len)
{
+ u32 prio = ZRAM_SECONDARY_COMP, prio_max = ZRAM_MAX_COMPS;
struct zram *zram = dev_to_zram(dev);
- u32 mode = 0, threshold = 0, prio = ZRAM_SECONDARY_COMP;
unsigned long nr_pages = zram->disksize >> PAGE_SHIFT;
- char *args, *param, *val;
+ char *args, *param, *val, *algo = NULL;
+ u32 mode = 0, threshold = 0;
unsigned long index;
struct page *page;
ssize_t ret;
@@ -1830,6 +1839,11 @@ static ssize_t recompress_store(struct d
return ret;
continue;
}
+
+ if (!strcmp(param, "algo")) {
+ algo = val;
+ continue;
+ }
}
if (threshold >= PAGE_SIZE)
@@ -1841,6 +1855,26 @@ static ssize_t recompress_store(struct d
goto release_init_lock;
}
+ if (algo) {
+ bool found = false;
+
+ for (; prio < ZRAM_MAX_COMPS; prio++) {
+ if (!zram->comp_algs[prio])
+ continue;
+
+ if (!strcmp(zram->comp_algs[prio], algo)) {
+ prio_max = min(prio + 1, ZRAM_MAX_COMPS);
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ ret = -EINVAL;
+ goto release_init_lock;
+ }
+ }
+
page = alloc_page(GFP_KERNEL);
if (!page) {
ret = -ENOMEM;
@@ -1871,7 +1905,7 @@ static ssize_t recompress_store(struct d
goto next;
err = zram_recompress(zram, index, page, threshold,
- prio, ZRAM_MAX_COMPS);
+ prio, prio_max);
next:
zram_slot_unlock(zram, index);
if (err) {
@@ -2107,6 +2141,7 @@ static void zram_destroy_comps(struct zr
if (!comp)
continue;
zcomp_destroy(comp);
+ zram->num_active_comps--;
}
}
@@ -2174,6 +2209,7 @@ static ssize_t disksize_store(struct dev
}
zram->comps[prio] = comp;
+ zram->num_active_comps++;
}
zram->disksize = disksize;
set_capacity_and_notify(zram->disk, zram->disksize >> SECTOR_SHIFT);
--- a/drivers/block/zram/zram_drv.h~zram-add-algo-parameter-support-to-zram_recompress
+++ a/drivers/block/zram/zram_drv.h
@@ -125,6 +125,7 @@ struct zram {
*/
u64 disksize; /* bytes */
const char *comp_algs[ZRAM_MAX_COMPS];
+ s8 num_active_comps;
/*
* zram is claimed so open request will be failed
*/
_
Patches currently in -mm which might be from senozhatsky@chromium.org are
reply other threads:[~2022-12-01 0:05 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20221201000135.99FAEC433B5@smtp.kernel.org \
--to=akpm@linux-foundation.org \
--cc=avromanov@sberdevices.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=minchan@kernel.org \
--cc=mm-commits@vger.kernel.org \
--cc=ngupta@vflare.org \
--cc=nphamcs@gmail.com \
--cc=senozhatsky@chromium.org \
--cc=suleiman@google.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.