Re: [PATCH v6 6/8] selftest/cgroup: fix zswap test_no_invasive_cgroup_shrink on large pagesize system

From: Li Wang

Date: Mon Apr 13 2026 - 04:47:02 EST


On Mon, Apr 13, 2026 at 8:29 AM Nhat Pham <nphamcs@xxxxxxxxx> wrote:
>
> On Wed, Apr 1, 2026 at 11:38 PM Li Wang <liwang@xxxxxxxxxx> wrote:
> >
> > test_no_invasive_cgroup_shrink sets up two cgroups: wb_group, which is
> > expected to trigger zswap writeback, and a control group (renamed to
> > zw_group), which should only have pages sitting in zswap without any
> > writeback.
> >
> > There are two problems with the current test:
> >
> > 1) The data patterns are reversed. wb_group uses allocate_bytes(), which
> > writes only a single byte per page — trivially compressible,
> > especially by zstd — so compressed pages fit within zswap.max and
> > writeback is never triggered. Meanwhile, the control group uses
> > getrandom() to produce hard-to-compress data, but it is the group
> > that does *not* need writeback.
> >
> > 2) The test uses fixed sizes (10K zswap.max, 10MB allocation) that are
> > too small on systems with large PAGE_SIZE (e.g. 64K), failing to
> > build enough memory pressure to trigger writeback reliably.
> >
> > Fix both issues by:
> > - Swapping the data patterns: fill wb_group pages with partially
> > random data (getrandom for page_size/4 bytes) to resist compression
> > and trigger writeback, and fill zw_group pages with simple repeated
> > data to stay compressed in zswap.
> > - Making all size parameters PAGE_SIZE-aware: set allocation size to
> > PAGE_SIZE * 1024, memory.zswap.max to PAGE_SIZE, and memory.max to
> > allocation_size / 2 for both cgroups.
> > - Allocating memory inline instead of via cg_run() so the pages
> > remain resident throughout the test.
> >
> > === Error Log ===
> > # getconf PAGESIZE
> > 65536
> >
> > # ./test_zswap
> > TAP version 13
> > ...
> > ok 5 test_zswap_writeback_disabled
> > ok 6 # SKIP test_no_kmem_bypass
> > not ok 7 test_no_invasive_cgroup_shrink
>
> I assume the test passed after fix? ;)

That's right! This patchset is targeted to thoroughly fix various bugs.
I rerun it too many times on various arches. All works well :).

> > Signed-off-by: Li Wang <liwang@xxxxxxxxxx>
> > Cc: Johannes Weiner <hannes@xxxxxxxxxxx>
> > Cc: Michal Hocko <mhocko@xxxxxxxxxx>
> > Cc: Michal Koutný <mkoutny@xxxxxxxx>
> > Cc: Muchun Song <muchun.song@xxxxxxxxx>
> > Cc: Nhat Pham <nphamcs@xxxxxxxxx>
> > Cc: Tejun Heo <tj@xxxxxxxxxx>
> > Cc: Roman Gushchin <roman.gushchin@xxxxxxxxx>
> > Cc: Shakeel Butt <shakeel.butt@xxxxxxxxx>
> > Cc: Yosry Ahmed <yosryahmed@xxxxxxxxxx>
> > ---
> >
> > Notes:
> > v5:
> > - Swap data patterns: use getrandom() for wb_group and simple
> > memset for zw_group to fix the reversed allocation logic.
> > - Rename control_group to zw_group for clarity.
> > - Allocate memory inline instead of via cg_run() so pages remain
> > resident throughout the test.
> >
> > tools/testing/selftests/cgroup/test_zswap.c | 70 ++++++++++++++-------
> > 1 file changed, 49 insertions(+), 21 deletions(-)
>
> LGTM. Thanks for fixing the tests :)
>
> Acked-by: Nhat Pham <nphamcs@xxxxxxxxx>

Thanks a lot!


--
Regards,
Li Wang