From nobody Mon Feb 9 04:29:01 2026 Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D7C81A314F for ; Sun, 26 Oct 2025 01:05:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761440733; cv=none; b=lhKxErPBipT6y5ATdTSy3f8YWJocIqVu0WuOQaiOaWTFHAL3BCvFgQzUF5+VbJYTOYbYO5SGBPJ09jA3jjzqX+DRlL1sZfL5zbOrUW0B0XPhgXxeDwtCHyp3VrMHgl8SzVACPMRSwUQcwv1A43X1643kLkAGIETBCJYTYodvhCM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761440733; c=relaxed/simple; bh=U5EN1inT/kWM5m4A5MzxqH+G+G2lk8n2GRDVD/piabQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KLBKq350AIeoIGOt0WrB6iuYV5YTIyV5o8DtZP2y/gHMuLQNQ2HWhoveQtXKENNGoIhV7NhJmNahSk71vfIbmGA8KhE4OUEVWzsgaL6/Ipx2+XE1dCDkeVpOYvTZ05iABF8mqYL+PPYxh7oGCHDaKe55Hh0nPvEewn9YZ8ctIXk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=j1Iy9f2T; arc=none smtp.client-ip=209.85.210.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="j1Iy9f2T" Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-7a4176547bfso615493b3a.2 for ; Sat, 25 Oct 2025 18:05:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761440731; x=1762045531; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=N36vhbRkSG6GC2TdNjzZ1OMz+RKJl4mIAfGLbGj75+A=; b=j1Iy9f2TPRyMJwkKPAyvnPC1tYWEIeFChtNr/s6cVRRys/vLihi499e2NJ7oHEyHrN KGrGbLXQGwxWQlbckgT1uODniyVUWl/g4hdoTb3PRsxO8yXa+U0XSVWckRqDAxUXaXMJ N/tRdXqjaGCtUDlU4B/KI2KLSBKNgQVMZlkJFumzr4P436F4/CEkBW9MozD8CN0kUVdJ zV0f0hsHgpzJzBDk5Uf/uoj/W2QTCyyx4ZmGfT0jRzcbwbU0VeMbN2Pd6oXWcnIJ2pRH v7syxewPeEEjzsHCVtpvLxSL37pmn5RUQL3Kt1Ae6ge3+8w7CiFTiWQgV6neqZ26gNdU jaTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761440731; x=1762045531; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N36vhbRkSG6GC2TdNjzZ1OMz+RKJl4mIAfGLbGj75+A=; b=QBk5Mk9rANeDJwUXuGMVFbIMStFrplRyHsL0SPV4o+gsb3jmNJgd3z9yhLq1wQvG+N NSdw/N2rC8octbP+yuZWadFGFMqliH/yLxTj/epFduO9clDg6IkL0D73OmO38xtiG65k fcjm1sDaW/L+UVe6AStOcOuxI2IRzXV5KhInllZs6WXsMhLrj6C73pCwv7QK1QfYvDdq Sb4Hz2nhoZMgVwt88nQhwBQ4289e7MqdtpUnPwM+d9CMXiKcwVi/VUa7kegwHXPCUDN5 6hzngarwiGWgrbRgaxKIE8qNodZOHrv9UBO+n8T1ehfzxE2B4oBUhEKRqL+obysyrGbW KzOQ== X-Forwarded-Encrypted: i=1; AJvYcCW3lkoIhwrAgX1udUMclwNOoyyEmFVkJtzhs0wJ9Qzfiyqt3hi+EnX34KBP8e65W0qMy54wcUfd9qgfvWc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0zwK9Ill5Jge3Kj1TLFMVy0IK2xs9eyzqLIZwNrm+nXEjOKpm FDuDVKOXNlRxhP9dPzZxR73qDnx8T3oJvAGsLLsobPOep4PUjUs0ewkR X-Gm-Gg: ASbGncs4IoWmLmQJ/+RhqJUyUaiZWpT4As7SXCsgqM8jBVybd96Sqx3XJIwg2PrTEJ/ jMlgqNJ+6TUdAwu9ohKNPsX9stLoZsWuO3EqclK0Xv1E6YyMkTBaOO08Cd7a8fTwbYxiRVr4u// Nz9IPdSOgi4pcdswg2TWCeuWpEhkIciSteO2BuBRb0iatfwq24zVn9v9/QiYRaXYr93mGQsgA2y zajgtU4Ff6hA3Ywlcew0TzIZv4MwgGfrBC9X8IuKXhU9XYoCNLOQco0/XAwDygH23shi27hfHcW HzFX2db6DOXPLrihz45H7zGv6wqJplGhwggXyISMovPZwiUd5zRLPd6ZSHQvEUkghHcxJXOD+A1 kcBahNvG9VOW6I0QFDYOfivMC9SRvsXgAlSjGu6I0MYS+UjcoIy27ZkaXp7z//iyFXDVhSfXeRB lhIko= X-Google-Smtp-Source: AGHT+IFqnGHut/11Suj2FeTeWv27UHLAlLr0nFmnErIj4agIj4rm3uNWP4XEpAPa8D23/k1s6P6wnQ== X-Received: by 2002:a05:6a21:4cc5:b0:340:6a50:7e9d with SMTP id adf61e73a8af0-3406a50809cmr6289528637.54.1761440731426; Sat, 25 Oct 2025 18:05:31 -0700 (PDT) Received: from daniel.. ([221.218.137.209]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7a41404987esm3371597b3a.36.2025.10.25.18.05.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Oct 2025 18:05:31 -0700 (PDT) From: jinji zhong To: minchan@kernel.org, senozhatsky@chromium.org, philipp.reisner@linbit.com, lars.ellenberg@linbit.com, christoph.boehmwalder@linbit.com, corbet@lwn.net, tj@kernel.org, hannes@cmpxchg.org, mkoutny@suse.com, axboe@kernel.dk, mhocko@kernel.org, roman.gushchin@linux.dev, shakeel.butt@linux.dev, akpm@linux-foundation.org, terrelln@fb.com, dsterba@suse.com Cc: muchun.song@linux.dev, linux-kernel@vger.kernel.org, drbd-dev@lists.linbit.com, linux-doc@vger.kernel.org, cgroups@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, zhongjinji@honor.com, liulu.liu@honor.com, feng.han@honor.com, jinji zhong Subject: [RFC PATCH 1/3] mm/memcontrol: Introduce per-cgroup compression priority Date: Sun, 26 Oct 2025 01:05:08 +0000 Message-ID: <18d8e6b876ea3ae98bff710474423a9a530f4a8a.1761439133.git.jinji.z.zhong@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" On Android, applications have varying tolerance for decompression speed. Background and lightweight applications tolerate slower decompression better than large, foreground applications. They are suitable for algorithms like ZSTD, which has a high compression ratio but slower decompression. Other applications may prefer algorithms with faster decompression. This patch introduces a per-cgroup compression priority mechanism. Different compression priorities map to different algorithms. This allows administrators to select the appropriate compression algorithm on a per-cgroup basis. --- include/linux/memcontrol.h | 19 +++++++++++++++++++ mm/memcontrol.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 873e510d6f8d..a91670b8c469 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -228,6 +228,9 @@ struct mem_cgroup { =20 int swappiness; =20 + /* The priority of the compression algorithm used by the cgroup. */ + int comp_priority; + /* memory.events and memory.events.local */ struct cgroup_file events_file; struct cgroup_file events_local_file; @@ -523,6 +526,22 @@ static inline struct mem_cgroup *get_mem_cgroup_from_o= bjcg(struct obj_cgroup *ob return memcg; } =20 +#define DEF_COMP_PRIORITY 0 + +/* +* get_cgroup_comp_priority - Get the compression priority of the memcg +* @page: Pointer to the page. +* Returns the compression priority of the memcg the page belongs to. +*/ +static inline int get_cgroup_comp_priority(struct page *page) +{ + struct mem_cgroup *memcg =3D folio_memcg(page_folio(page)); + if (!memcg) + return DEF_COMP_PRIORITY; + + return memcg->comp_priority; +} + /* * folio_memcg_kmem - Check if the folio has the memcg_kmem flag set. * @folio: Pointer to the folio. diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 4deda33625f4..436cbc8ddcc2 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5356,6 +5356,31 @@ static int swap_events_show(struct seq_file *m, void= *v) return 0; } =20 +static int swap_comp_priority_show(struct seq_file *m, void *v) +{ + struct mem_cgroup *memcg =3D mem_cgroup_from_seq(m); + + seq_printf(m, "%d\n", READ_ONCE(memcg->comp_priority)); + return 0; +} + +static ssize_t swap_comp_priority_write(struct kernfs_open_file *of, + char *buf, size_t nbytes, loff_t off) +{ + struct mem_cgroup *memcg =3D mem_cgroup_from_css(of_css(of)); + int comp_priority; + ssize_t parse_ret =3D kstrtoint(strstrip(buf), 10, &comp_priority); + + if (parse_ret) + return parse_ret; + + if (comp_priority < 0) + return -EINVAL; + + WRITE_ONCE(memcg->comp_priority, comp_priority); + return nbytes; +} + static struct cftype swap_files[] =3D { { .name =3D "swap.current", @@ -5388,6 +5413,12 @@ static struct cftype swap_files[] =3D { .file_offset =3D offsetof(struct mem_cgroup, swap_events_file), .seq_show =3D swap_events_show, }, + { + .name =3D "swap.comp_priority", + .flags =3D CFTYPE_NOT_ON_ROOT, + .seq_show =3D swap_comp_priority_show, + .write =3D swap_comp_priority_write, + }, { } /* terminate */ }; =20 --=20 2.48.1 From nobody Mon Feb 9 04:29:01 2026 Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E34EE23EAB5 for ; Sun, 26 Oct 2025 01:05:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761440742; cv=none; b=Z8Li9HlLk4WHKntbT5HXTLKWIyYeQBCwESoRIKKDznlx1lpo5J98vEz5h3z+CynZ4p4yim4yNIiY29eHrLQ5X8gq2Q/Asrug8i5EqEWtZ+qzYUrcDpIIFegAsNuXaBMY+4fooYl1JclLtxatJWdLZI7Le3iW+Ac1vtpy/v6am1c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761440742; c=relaxed/simple; bh=Gp+VLR61Dl9CsyJ61qEVNObKOU3+x56JQIrKxWVLSgw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q1y5Ze+dB0gnLXMKByCw//APK3Ff4kJ0zt0m8aKatP5mu0EEwxELGuAI3wU+8nCIjKAh8GtUDwGGPnHaX9PwKTgz4cZZY0OyXmLHMZJWEYNZaKqSAQE/Bl0JPbNkuWn2GfNqeQk+AoIZQ9jhbWOhvE+tjlhfulcLZB9vXXpwyJA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OZFgbfL/; arc=none smtp.client-ip=209.85.210.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OZFgbfL/" Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-7a2754a7f6aso4241572b3a.1 for ; Sat, 25 Oct 2025 18:05:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761440740; x=1762045540; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=S45Vd5RIAYqg0q86pnKyuOv36CWTtcQIjH0J0fCtYok=; b=OZFgbfL/R16jY5xLMT6zm5P/ULKLCNNWRqrgwJxpIKscH+yCCCzlAPqvio2ehgfZZD SIbmtIngnPlVSttwEZqbjXxsqcj5hSx/63tmXRvzmfiW4MSlXsfV4wwvcRQKD0f8kMBy pVOAknVOhs7eIgBonKRPzPUcW2QK01VqF5aIcUzXDApQsbF1Ju4rge2OQIObntgMecRj ufYGXSwUrA8kTSxE9p9yEYwH9xXLDUUmVTPRn8OWaiOtVaMAsSIHB6m4EnAfPe+qVDWj smOHjBB+lQaw6OZwoLKfZgwru4/E2cnkNwXh/Ma8tXSjfKg6wKrlmuMWxyn0eV64Pksx 8Gvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761440740; x=1762045540; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=S45Vd5RIAYqg0q86pnKyuOv36CWTtcQIjH0J0fCtYok=; b=qIfnrQ4bcR6h75cCMf8p/O0PWs1jtF5V2Ujz7TVFtbgjzlwo5s2t8EZgukrqXlWxOz SK0331eueGO0GMiQu0tmXj1Ye1Erl4o4wq7RIKZaX+TiGfRHPuUiTCrRuw9eYGmw/rNr Y2P8PibIot6/1K16UHLZh2g6W+dB/3LZRDyNzrjqR8A0gDn4thzHMoCr5XYX42JPX0ba mXeH7WqBdG31k0Rf0r9QGXZDCD1GN4Z7hPPiH5kmkD41B4tKA6DL809VxzAVaaZ0fnHM oDeVBHMxVwWyyHOwzGWpffZWnXKakG6hd8BAuIHt0mujJOEv7LY9/1Fhp7RVnS7G5R5E zLHw== X-Forwarded-Encrypted: i=1; AJvYcCXbq1Fb9OnDI7lQ3MihlPzqHHVobge1TJKHmOmpObit676QpaTLAU5ozDwsIc8+2qicDU5LzisnJpp3gH8=@vger.kernel.org X-Gm-Message-State: AOJu0YzFGiyx+bSEIsQRXL4zQPWRCTWLFBOAYy592OSAsY3KgPSDvjKS f1OvV7n2EOZKhVxiMup/qqdymzPdVUJtz5UKSC72i3E6oQFFkDIvSQAt X-Gm-Gg: ASbGncuVoBx6noVj42fgDLKWYLxUloxa6pVHYPKs2ojhU23YAgNUyElZHgTHf1QJf8l aRqHFaewYhCInBNINAOsrAUXrmsiit3vNdBjd9vfFQs9Ibr5NnTDBmxDIIrHnbqIrPf/m+0tfhB TvcAEsc6KYaBP3GzGcQqfyoY/wauhQqVbk7CQSz7HCJxnXmyl4p7QGPOqkPE6c2eZc1ytQAPO6N N9j3VXHHPDJXRvrl7FFrtLw/ElWgFysXykGWWW5pUoL/8TVSuWXf1SWyYqV9AKCsQDdNRzurt3t ET9gft9n4sBgb9IpqAbunpxgpiLuBGZIoqR8gSgL1wVeMCrTmYOtup7M1v2zz7dYkFVppEgysB/ 0cUJN8z0LBD+PglXGCbyinCL8nRF7W8nIgihMg/sjMa7nJ6FgQ7CIw0R/XFp6sUgpxISdp4/NX2 Z1oCD3kNoA6cUYoWb2sGLSb+eW X-Google-Smtp-Source: AGHT+IH3gaZfX15xSYXSXwe2kaT3c45YGp22P1ke9T0VYUHajdlPt4RUIsJeGLbWWKCn87o/Tq/dUg== X-Received: by 2002:a05:6a20:3c8d:b0:2e5:c9ee:96fb with SMTP id adf61e73a8af0-334a8650396mr43445620637.59.1761440740211; Sat, 25 Oct 2025 18:05:40 -0700 (PDT) Received: from daniel.. ([221.218.137.209]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7a41404987esm3371597b3a.36.2025.10.25.18.05.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Oct 2025 18:05:39 -0700 (PDT) From: jinji zhong To: minchan@kernel.org, senozhatsky@chromium.org, philipp.reisner@linbit.com, lars.ellenberg@linbit.com, christoph.boehmwalder@linbit.com, corbet@lwn.net, tj@kernel.org, hannes@cmpxchg.org, mkoutny@suse.com, axboe@kernel.dk, mhocko@kernel.org, roman.gushchin@linux.dev, shakeel.butt@linux.dev, akpm@linux-foundation.org, terrelln@fb.com, dsterba@suse.com Cc: muchun.song@linux.dev, linux-kernel@vger.kernel.org, drbd-dev@lists.linbit.com, linux-doc@vger.kernel.org, cgroups@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, zhongjinji@honor.com, liulu.liu@honor.com, feng.han@honor.com, jinji zhong Subject: [RFC PATCH 2/3] zram: Zram supports per-cgroup compression priority Date: Sun, 26 Oct 2025 01:05:09 +0000 Message-ID: <0eef2265014bf9806eeaf5a00c9632958668c257.1761439133.git.jinji.z.zhong@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patch allows zram to get the per-cgroup compression priority, enabling administrators to select different compression algorithms for different cgroups. The feature is enabled by: echo 1 > /sys/block/zramX/per_cgroup_comp_enable. --- drivers/block/zram/zram_drv.c | 74 +++++++++++++++++++++++++++++++---- drivers/block/zram/zram_drv.h | 2 + 2 files changed, 68 insertions(+), 8 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index a43074657531..da79034f2efa 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -1223,6 +1224,7 @@ static void comp_algorithm_set(struct zram *zram, u32= prio, const char *alg) kfree(zram->comp_algs[prio]); =20 zram->comp_algs[prio] =3D alg; + zram->comp_algs_flag |=3D (1 << prio); } =20 static int __comp_algorithm_store(struct zram *zram, u32 prio, const char = *buf) @@ -1396,7 +1398,7 @@ static ssize_t comp_algorithm_store(struct device *de= v, } =20 #ifdef CONFIG_ZRAM_MULTI_COMP -static ssize_t recomp_algorithm_show(struct device *dev, +static ssize_t multi_comp_algorithm_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -1405,7 +1407,7 @@ static ssize_t recomp_algorithm_show(struct device *d= ev, u32 prio; =20 down_read(&zram->init_lock); - for (prio =3D ZRAM_SECONDARY_COMP; prio < ZRAM_MAX_COMPS; prio++) { + for (prio =3D ZRAM_PRIMARY_COMP; prio < ZRAM_MAX_COMPS; prio++) { if (!zram->comp_algs[prio]) continue; =20 @@ -1416,7 +1418,7 @@ static ssize_t recomp_algorithm_show(struct device *d= ev, return sz; } =20 -static ssize_t recomp_algorithm_store(struct device *dev, +static ssize_t multi_comp_algorithm_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) @@ -1450,12 +1452,43 @@ static ssize_t recomp_algorithm_store(struct device= *dev, if (!alg) return -EINVAL; =20 - if (prio < ZRAM_SECONDARY_COMP || prio >=3D ZRAM_MAX_COMPS) + if (prio < ZRAM_PRIMARY_COMP || prio >=3D ZRAM_MAX_COMPS) return -EINVAL; =20 ret =3D __comp_algorithm_store(zram, prio, alg); return ret ? ret : len; } + +static ssize_t per_cgroup_comp_enable_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t len) +{ + struct zram *zram =3D dev_to_zram(dev); + u64 val; + ssize_t ret =3D -EINVAL; + + if (kstrtoull(buf, 10, &val)) + return ret; + + down_read(&zram->init_lock); + zram->per_cgroup_comp_enable =3D val; + up_read(&zram->init_lock); + ret =3D len; + + return ret; +} + +static ssize_t per_cgroup_comp_enable_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + bool val; + struct zram *zram =3D dev_to_zram(dev); + + down_read(&zram->init_lock); + val =3D zram->per_cgroup_comp_enable; + up_read(&zram->init_lock); + + return sysfs_emit(buf, "%d\n", val); +} #endif =20 static ssize_t compact_store(struct device *dev, @@ -1840,9 +1873,30 @@ static int write_incompressible_page(struct zram *zr= am, struct page *page, return 0; } =20 +static inline bool is_comp_priority_valid(struct zram *zram, int prio) +{ + return zram->comp_algs_flag & (1 << prio); +} + +static inline int get_comp_priority(struct zram *zram, struct page *page) +{ + int prio; + + if (!zram->per_cgroup_comp_enable) + return ZRAM_PRIMARY_COMP; + + prio =3D get_cgroup_comp_priority(page); + if (unlikely(!is_comp_priority_valid(zram, prio))) { + WARN_ON_ONCE(1); + return ZRAM_PRIMARY_COMP; + } + return prio; +} + static int zram_write_page(struct zram *zram, struct page *page, u32 index) { int ret =3D 0; + int prio; unsigned long handle; unsigned int comp_len; void *mem; @@ -1856,9 +1910,10 @@ static int zram_write_page(struct zram *zram, struct= page *page, u32 index) if (same_filled) return write_same_filled_page(zram, element, index); =20 - zstrm =3D zcomp_stream_get(zram->comps[ZRAM_PRIMARY_COMP]); + prio =3D get_comp_priority(zram, page); + zstrm =3D zcomp_stream_get(zram->comps[prio]); mem =3D kmap_local_page(page); - ret =3D zcomp_compress(zram->comps[ZRAM_PRIMARY_COMP], zstrm, + ret =3D zcomp_compress(zram->comps[prio], zstrm, mem, &comp_len); kunmap_local(mem); =20 @@ -1894,6 +1949,7 @@ static int zram_write_page(struct zram *zram, struct = page *page, u32 index) zram_free_page(zram, index); zram_set_handle(zram, index, handle); zram_set_obj_size(zram, index, comp_len); + zram_set_priority(zram, index, prio); zram_slot_unlock(zram, index); =20 /* Update stats */ @@ -2612,7 +2668,8 @@ static DEVICE_ATTR_RW(writeback_limit); static DEVICE_ATTR_RW(writeback_limit_enable); #endif #ifdef CONFIG_ZRAM_MULTI_COMP -static DEVICE_ATTR_RW(recomp_algorithm); +static DEVICE_ATTR_RW(multi_comp_algorithm); +static DEVICE_ATTR_RW(per_cgroup_comp_enable); static DEVICE_ATTR_WO(recompress); #endif static DEVICE_ATTR_WO(algorithm_params); @@ -2639,8 +2696,9 @@ static struct attribute *zram_disk_attrs[] =3D { #endif &dev_attr_debug_stat.attr, #ifdef CONFIG_ZRAM_MULTI_COMP - &dev_attr_recomp_algorithm.attr, + &dev_attr_multi_comp_algorithm.attr, &dev_attr_recompress.attr, + &dev_attr_per_cgroup_comp_enable.attr, #endif &dev_attr_algorithm_params.attr, NULL, diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h index 6cee93f9c0d0..34ae0c3a9130 100644 --- a/drivers/block/zram/zram_drv.h +++ b/drivers/block/zram/zram_drv.h @@ -120,11 +120,13 @@ struct zram { */ u64 disksize; /* bytes */ const char *comp_algs[ZRAM_MAX_COMPS]; + u8 comp_algs_flag; s8 num_active_comps; /* * zram is claimed so open request will be failed */ bool claim; /* Protected by disk->open_mutex */ + bool per_cgroup_comp_enable; #ifdef CONFIG_ZRAM_WRITEBACK struct file *backing_dev; spinlock_t wb_limit_lock; --=20 2.48.1 From nobody Mon Feb 9 04:29:01 2026 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3647A217F35 for ; Sun, 26 Oct 2025 01:05:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761440749; cv=none; b=RlG4e/tAgB2J1iqzER0IxudzAto/YI8bYoqNfsdx8C/N1BwvCsqQLs7bTtv5lti2AwdVUHhWnPpPYcQnfhoJ25YjIjynNmFqjvKgsEfLrID3XR38NjGN6t5zjCUxhUhg8fDdUrMdwR+6jM5vf0VQmsJ4+nVdobxM2MB8Ppftssw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761440749; c=relaxed/simple; bh=NNAlX4cVcjwFtkIEFZH5noazzP942ARBnfSced7dLSY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dpRf7eakKyyIlXRa/CrAp3n/ep78BpfAVAI2uIcgZXwPNPy+O/x2IqHpTbMkORy4U6EWQmf9X3UlRBzmpDjFAtubrfGmuFHVTbg27g3sB4t46NK87VFbtpNQwxxw2rn0xonNnx/NV4/ZJAO35WJWmsitTrcCQ8URbjOz20WZzDw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SUeGjq8g; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SUeGjq8g" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-7a23208a0c2so2614270b3a.0 for ; Sat, 25 Oct 2025 18:05:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761440747; x=1762045547; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BrWku1aIMMMg9GTv7ArefROi2Vd01OtJJzpQozkukKo=; b=SUeGjq8g+CsSNP1eKVz04juO8Ib8oE5BaiRLP6zgD9QaoBerJFrTDPmegsFU1qwCqx rI+EUclGEVhc4XZN1iZdbRdbWaXra3SFWtdnS2L8sek5ayh018lkXCFnuT+2W3qELn7J gy2L1B6icQ9ikse6sa5qj7zflKhbgSEtulWqhDVEt3VSC/DSYsf7R9icZvPdiq7xplEG gcCMy+w3Flw7N1v75J8xq/AaFpsohG+1SgpEINH1rw86lt4oWWLq2Zqd/o71B6nzpD5A 9JopMf4GgNZ2nyX0W/jQXY5nEl3mBvmKlPOR5cKPYabcxYhdlbgA50fZwXAkYgL2nFc6 nZ8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761440747; x=1762045547; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BrWku1aIMMMg9GTv7ArefROi2Vd01OtJJzpQozkukKo=; b=TC+/oKt/spf0nwbxwfqZejyMuYCgNLvbhYFblfYB+omHLCdqSoLqcpAhg/3CqWtqyV 207S9gl1D6GO82CGHRZhNODMEniiBwgyv5ckJoLDIWyANEVOi//+yFBxDszgv8eVvkk5 vWi0X9xDJXJ6DLoPIOd5Kng3YxjkoMHjGFim/0cQQi9NCMywgxlBPo6ToGEbMbgVEu8Z vYJppC9TpGbC67Dg44C/CTqmDurECiVcsAHhZPgfmcrVzFyLyAcg4fSPI5JzK0mQkeGp cHOGF2568yJoAwOoL9oYEyCvzlcN2bFR++i1Mnf7uuFH5z8ed/M0Lca2VY+ascmVj0FO jFNA== X-Forwarded-Encrypted: i=1; AJvYcCU6u/5Nc14nkpSM0sbil7unO0IectjbHv7mnKc2fAZ9DitQT3jQKVQ6G68elT72U0bP3bTdhmfs5kwqZlk=@vger.kernel.org X-Gm-Message-State: AOJu0YzxNzhw+QvQPUPq02AkJiVb0KgDSUfjrGad8jdijEp4UKL3bT9R veF6GMpJJINPW/NtAeefkRaM5iml6Q8++Jt+wHtqzhB63FOpulq1iWke X-Gm-Gg: ASbGncslceZW77Qq/YSDXojS3fnZkuB0ZzGp0Z8DoVIuVhjNz6lmXOi1acab1rY+UJC IlmOZ1UDQPxnFnbhyYpJMqPZUQfkiMXUZSCGk0s4V4f7Rnl9MNeZDbQyVAyPqRsZbE/2kbB7mQw oeD18d00aDMzRpFbrO1lW8B6W8YW/0hwQGbWwIJE3v790kFozEdey0Qhj+36fbzQxRJh5fj///p WXMtQyfwHD8LaZ7+tlnbPro6DByXW5BBEm+Lg3s7b5YCgYqndgVNWwRGvEc634oe5vlLPkWvLGK VwchNjwaot+kHxHBekQ1ERHONCQsfpVd466YqfbQM2H3DOSuIlBub54sbaS2yoAuigQVObFL/lJ b6n7E0n5qqDQUKmHNW8Uo3ynDr8O5mQHgSTTvTyy/z8UYq5Qo1GEsl+2e3Iorflar2NORA0pUNZ LO0x8= X-Google-Smtp-Source: AGHT+IEfMl6RnbpkDRz3xPKw02ZxvVMy5U+m1L9klxFtFN/jBXClYLwUkIitj9v1zCClkhcSl7XzQA== X-Received: by 2002:a05:6a00:a15:b0:7a2:7893:b17a with SMTP id d2e1a72fcca58-7a27893b21dmr11885518b3a.6.1761440747382; Sat, 25 Oct 2025 18:05:47 -0700 (PDT) Received: from daniel.. ([221.218.137.209]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7a41404987esm3371597b3a.36.2025.10.25.18.05.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Oct 2025 18:05:47 -0700 (PDT) From: jinji zhong To: minchan@kernel.org, senozhatsky@chromium.org, philipp.reisner@linbit.com, lars.ellenberg@linbit.com, christoph.boehmwalder@linbit.com, corbet@lwn.net, tj@kernel.org, hannes@cmpxchg.org, mkoutny@suse.com, axboe@kernel.dk, mhocko@kernel.org, roman.gushchin@linux.dev, shakeel.butt@linux.dev, akpm@linux-foundation.org, terrelln@fb.com, dsterba@suse.com Cc: muchun.song@linux.dev, linux-kernel@vger.kernel.org, drbd-dev@lists.linbit.com, linux-doc@vger.kernel.org, cgroups@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, zhongjinji@honor.com, liulu.liu@honor.com, feng.han@honor.com, jinji zhong Subject: [RFC PATCH 3/3] Doc: Update documentation for per-cgroup compression priority Date: Sun, 26 Oct 2025 01:05:10 +0000 Message-ID: <25cab6bc87a6cd69983e2fa0908441bc37015c98.1761439133.git.jinji.z.zhong@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patch updates the documentation, describing the newly introduced per-cgroup compression priority mechanism. --- Documentation/admin-guide/blockdev/zram.rst | 18 ++++++++++++++---- Documentation/admin-guide/cgroup-v2.rst | 7 +++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/Documentation/admin-guide/blockdev/zram.rst b/Documentation/ad= min-guide/blockdev/zram.rst index 3e273c1bb749..de4ab060f664 100644 --- a/Documentation/admin-guide/blockdev/zram.rst +++ b/Documentation/admin-guide/blockdev/zram.rst @@ -452,12 +452,12 @@ using more effective algorithm and, hence, reduce zsm= alloc memory usage. With CONFIG_ZRAM_MULTI_COMP, zram supports up to 4 compression algorithms: one primary and up to 3 secondary ones. Primary zram compressor is explain= ed in "3) Select compression algorithm", secondary algorithms are configured -using recomp_algorithm device attribute. +using multi_comp_algorithm device attribute. =20 Example::: =20 #show supported recompression algorithms - cat /sys/block/zramX/recomp_algorithm + cat /sys/block/zramX/multi_comp_algorithm #1: lzo lzo-rle lz4 lz4hc [zstd] #2: lzo lzo-rle lz4 [lz4hc] zstd =20 @@ -468,10 +468,10 @@ Alternative compression algorithm's priority is provi= ded during algorithms configuration::: =20 #select zstd recompression algorithm, priority 1 - echo "algo=3Dzstd priority=3D1" > /sys/block/zramX/recomp_algorithm + echo "algo=3Dzstd priority=3D1" > /sys/block/zramX/multi_comp_algorithm =20 #select deflate recompression algorithm, priority 2 - echo "algo=3Ddeflate priority=3D2" > /sys/block/zramX/recomp_algorithm + echo "algo=3Ddeflate priority=3D2" > /sys/block/zramX/multi_comp_algorithm =20 Another device attribute that CONFIG_ZRAM_MULTI_COMP enables is recompress, which controls recompression. @@ -524,6 +524,16 @@ This can be achieved by providing a `algo` or `priorit= y` parameter::: #use zstd algorithm only (if zstd was registered under priority 1) echo "type=3Dhuge priority=3D1" > /sys/block/zramX/recompress =20 +per-cgroup compression algorithms +------------- +With CONFIG_ZRAM_MULTI_COMP, zram can compress pages using the compression +algorithm determined by the cgroup. It will get the compression priority f= rom +the cgroup and use the corresponding compression algorithm to compress the= page. + +To use the feature, admin should enable per-cgroup compression via:: + + echo 1 > /sys/block/zramX/per_cgroup_comp_enable + memory tracking =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-= guide/cgroup-v2.rst index 0e6c67ac585a..1706d8f0d225 100644 --- a/Documentation/admin-guide/cgroup-v2.rst +++ b/Documentation/admin-guide/cgroup-v2.rst @@ -1871,6 +1871,13 @@ The following nested keys are defined. higher than the limit for an extended period of time. This reduces the impact on the workload and memory management. =20 + memory.swap.compress_priority + A read-write single value file which exists on non-root + cgroups. The default is "0". + + swap compress priority for the cgroup. Different compression + priorities mean different compression algorithms. + memory.zswap.current A read-only single value file which exists on non-root cgroups. --=20 2.48.1