Linux Documentation
 help / color / mirror / Atom feed
From: Hao Jia <jiahao.kernel@gmail.com>
To: Yosry Ahmed <yosry@kernel.org>
Cc: akpm@linux-foundation.org, tj@kernel.org, hannes@cmpxchg.org,
	shakeel.butt@linux.dev, mhocko@kernel.org, mkoutny@suse.com,
	nphamcs@gmail.com, chengming.zhou@linux.dev,
	muchun.song@linux.dev, roman.gushchin@linux.dev,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	linux-doc@vger.kernel.org, Hao Jia <jiahao1@lixiang.com>
Subject: Re: [PATCH 2/2] mm/zswap: Support batch writeback in shrink_memcg()
Date: Wed, 15 Jul 2026 19:28:10 +0800	[thread overview]
Message-ID: <2bc8e4f6-46a0-5b74-6eaa-59e7aef9227e@gmail.com> (raw)
In-Reply-To: <CAO9r8zNiT63LUHx8X5i_aboX1UWuGkcFf+p9ch-pekURUuDdXg@mail.gmail.com>



On 2026/7/15 00:52, Yosry Ahmed wrote:
> On Tue, Jul 14, 2026 at 1:15 AM Hao Jia <jiahao.kernel@gmail.com> wrote:
>>
>> From: Hao Jia <jiahao1@lixiang.com>
>>
>> Currently, shrink_memcg() writes back at most one entry per-node during
>> its traversal. This makes shrink_worker() inefficient, as it must
>> repeatedly re-enter shrink_memcg() to make any substantial progress.
> 
> Please also mention the case about writeback being slow to keep up
> with refaults in some cases, leading to zswap store failures and pages
> skipping zswap and going directly to disk, which is an LRU inversion.
> 

Will be done in the next version.


>>
>> To address this, extend shrink_memcg() and rewrite its LRU iteration logic
>> to support batch writeback. Introduce the nr_to_scan parameter to bound how
>> many pages are scanned per call. This enables batch writeback in the
>> shrink_worker() path, while maintaining a low scan budget in the
>> zswap_store() path.
>>
>> Additionally, to prepare for future proactive writeback, update the return
>> value semantics of shrink_memcg(): a positive value now represents the
>> actual number of compressed bytes written back, 0 indicates that candidates
>> existed but no writeback succeeded, and a negative value represents an
>> error code.
> 
> This part should be dropped for now, and added with the proactive
> writeback, as it's currently unused AFAICT. Removing
> zswap_shrink_walk_arg will simplify the patch and make it focused on
> the batching part.

Will be done in the next version.

> 
>>
>> Test Setup:
>> Total memory: 32 GB.
>> zswap settings: max_pool_percent=1, accept_threshold_percent=50,
>> shrinker_enabled=N.
>> Allocate 512MB of anonymous pages and fill them with random data (to avoid
>> compression), then use cgroup memory.reclaim to force a large amount of
>> anonymous pages into zswap. At an interval of 2ms, allocate a 4K anonymous
>> page where the first 4 bytes are random numbers and the rest are zeros, and
>> then trigger a reclamation of this 4K anonymous page through cgroup
>> memory.reclaim. When the pool threshold is reached, shrink_memcg() will
>> be triggered.
>>
>> The test data after running for 120s is as follows:
>>                             Baseline         Patched
>> shrink_worker wakeups          5363             85
>> shrink_memcg calls       11,345,012        188,264
>> written_back                  40214          40275
>>
>> Conclusion:
>> Under the same workload and run duration, the patched kernel shows a
>> significant reduction in both shrink_worker wakeups and shrink_memcg calls.
> 
> Please also include data from the case where zswap store failures are
> observed and pages go to disk, and compare before and after this
> patch. I think that part is also really important.

I retested and added some collected information. Perhaps 
`pool_limit_hit` and `pswpout` can explain that batch shrinking of zswap 
can reduce the number of pages that fail to be stored due to the pool 
limit, allowing zswap to skip zswap and go directly to disk.

                               Baseline      Patched
shrink_worker wakeups         5,363            85
shrink_memcg calls       11,373,201      180,928
written_back pages            40,212       40,236
zswap_store calls            161,190      168,741
   store succeeded (ret=1)    102,743      127,644
   store rejected (ret=0)      58,447       41,097
   store reject rate            ~36%         ~24%
pool_limit_hit delta          55,826       14,062
pswpout                       98,659       81,333
pswpin                            2            1


Thanks,
Hao

  reply	other threads:[~2026-07-15 11:28 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-14  8:15 [PATCH 0/2] mm/zswap: Fixes and improves the zswap global shrinker Hao Jia
2026-07-14  8:15 ` [PATCH 1/2] mm/zswap: Fix global shrinker when memory cgroup is disabled Hao Jia
2026-07-14 16:52   ` Yosry Ahmed
2026-07-15  2:31     ` Andrew Morton
2026-07-15 12:30       ` Hao Jia
2026-07-15 16:13         ` Yosry Ahmed
2026-07-14  8:15 ` [PATCH 2/2] mm/zswap: Support batch writeback in shrink_memcg() Hao Jia
2026-07-14 16:52   ` Yosry Ahmed
2026-07-15 11:28     ` Hao Jia [this message]
2026-07-15 16:14       ` Yosry Ahmed

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=2bc8e4f6-46a0-5b74-6eaa-59e7aef9227e@gmail.com \
    --to=jiahao.kernel@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=chengming.zhou@linux.dev \
    --cc=hannes@cmpxchg.org \
    --cc=jiahao1@lixiang.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=mkoutny@suse.com \
    --cc=muchun.song@linux.dev \
    --cc=nphamcs@gmail.com \
    --cc=roman.gushchin@linux.dev \
    --cc=shakeel.butt@linux.dev \
    --cc=tj@kernel.org \
    --cc=yosry@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox