[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aYUKpZ8nCB6MTQGY@linux.dev>
Date: Thu, 5 Feb 2026 13:33:50 -0800
From: Shakeel Butt <shakeel.butt@...ux.dev>
To: Jiayuan Chen <jiayuan.chen@...ux.dev>
Cc: linux-mm@...ck.org, Jiayuan Chen <jiayuan.chen@...pee.com>,
Johannes Weiner <hannes@...xchg.org>, Michal Hocko <mhocko@...nel.org>,
Roman Gushchin <roman.gushchin@...ux.dev>, Muchun Song <muchun.song@...ux.dev>,
Yosry Ahmed <yosry.ahmed@...ux.dev>, Nhat Pham <nphamcs@...il.com>,
Chengming Zhou <chengming.zhou@...ux.dev>, Andrew Morton <akpm@...ux-foundation.org>,
Nick Terrell <terrelln@...com>, David Sterba <dsterba@...e.com>, cgroups@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v1] mm: zswap: add per-memcg stat for incompressible pages
On Thu, Feb 05, 2026 at 01:30:12PM +0800, Jiayuan Chen wrote:
> From: Jiayuan Chen <jiayuan.chen@...pee.com>
>
> The global zswap_stored_incompressible_pages counter was added in commit
> dca4437a5861 ("mm/zswap: store <PAGE_SIZE compression failed page as-is")
> to track how many pages are stored in raw (uncompressed) form in zswap.
> However, in containerized environments, knowing which cgroup is
> contributing incompressible pages is essential for effective resource
> management.
>
> Add a new memcg stat 'zswpraw' to track incompressible pages per cgroup.
> This helps administrators and orchestrators to:
>
> 1. Identify workloads that produce incompressible data (e.g., encrypted
> data, already-compressed media, random data) and may not benefit from
> zswap.
>
> 2. Make informed decisions about workload placement - moving
> incompressible workloads to nodes with larger swap backing devices
> rather than relying on zswap.
>
> 3. Debug zswap efficiency issues at the cgroup level without needing to
> correlate global stats with individual cgroups.
>
> While the compression ratio can be estimated from existing stats
> (zswap / zswapped * PAGE_SIZE), this doesn't distinguish between
> "uniformly poor compression" and "a few completely incompressible pages
> mixed with highly compressible ones". The zswpraw stat provides direct
> visibility into the latter case.
>
> Changes
> -------
>
> 1. Add zswap_is_raw() helper (include/linux/zswap.h)
> - Abstract the PAGE_SIZE comparison logic for identifying raw entries
> - Keep the incompressible check in one place for maintainability
>
> 2. Add MEMCG_ZSWAP_RAW stat definition (include/linux/memcontrol.h,
> mm/memcontrol.c)
> - Add MEMCG_ZSWAP_RAW to memcg_stat_item enum
> - Register in memcg_stat_items[] and memory_stats[] arrays
> - Export as "zswpraw" in memory.stat
>
> 3. Update statistics accounting (mm/memcontrol.c, mm/zswap.c)
> - Track MEMCG_ZSWAP_RAW in obj_cgroup_charge/uncharge_zswap()
> - Use zswap_is_raw() helper in zswap.c for consistency
>
> Test
> ----
>
> I wrote a simple test program[1] that allocates memory and compresses it
> with zstd, so kernel zswap cannot compress further.
>
> $ cgcreate -g memory:test
> $ cgexec -g memory:test ./test_zswpraw &
> $ cat /sys/fs/cgroup/test/memory.stat | grep zswp
> zswpraw 0
> zswpin 0
> zswpout 0
> zswpwb 0
>
> $ echo "100M" > /sys/fs/cgroup/test/memory.reclaim
> $ cat /sys/fs/cgroup/test/memory.stat | grep zswp
> zswpraw 104800256
> zswpin 0
> zswpout 51222
> zswpwb 0
>
> $ pkill test_zswpraw
> $ cat /sys/fs/cgroup/test/memory.stat | grep zswp
> zswpraw 0
> zswpin 1
> zswpout 51222
> zswpwb 0
>
> [1] https://gist.github.com/mrpre/00432c6154250326994fbeaf62e0e6f1
>
> Signed-off-by: Jiayuan Chen <jiayuan.chen@...pee.com>
Overall looks good but as Nhat suggested please update v2
documentation.
> ---
> include/linux/memcontrol.h | 1 +
> include/linux/zswap.h | 9 +++++++++
> mm/memcontrol.c | 6 ++++++
> mm/zswap.c | 6 +++---
> 4 files changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
> index b6c82c8f73e1..83d1328f81d1 100644
> --- a/include/linux/memcontrol.h
> +++ b/include/linux/memcontrol.h
> @@ -39,6 +39,7 @@ enum memcg_stat_item {
> MEMCG_KMEM,
> MEMCG_ZSWAP_B,
> MEMCG_ZSWAPPED,
> + MEMCG_ZSWAP_RAW,
Hmm I don't like the name though. How about INCOMPRESSIBLE or INCOMP for
short?
Powered by blists - more mailing lists