From: Johannes Weiner <hannes@cmpxchg.org>
To: Ridong Chen <ridong.chen@linux.dev>
Cc: Michal Hocko <mhocko@kernel.org>,
Roman Gushchin <roman.gushchin@linux.dev>,
Shakeel Butt <shakeel.butt@linux.dev>,
Andrew Morton <akpm@linux-foundation.org>,
Muchun Song <muchun.song@linux.dev>,
Kairui Song <kasong@tencent.com>, Qi Zheng <qi.zheng@linux.dev>,
Barry Song <baohua@kernel.org>,
Axel Rasmussen <axelrasmussen@google.com>,
Yuanchu Xie <yuanchu@google.com>, Wei Xu <weixugc@google.com>,
David Hildenbrand <david@kernel.org>,
Lorenzo Stoakes <ljs@kernel.org>,
Chris Down <chris@chrisdown.name>, Tejun Heo <tj@kernel.org>,
Yu Zhao <yuzhao@google.com>,
"open list:CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)"
<cgroups@vger.kernel.org>,
"open list:CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)"
<linux-mm@kvack.org>,
linux-kernel@vger.kernel.org, Ridong Chen <chenridong@xiaomi.com>,
stable@vger.kernel.org
Subject: Re: [PATCH v3 2/2] mm/mglru: fix ineffective memory protection for non-kswapd reclaim
Date: Thu, 3 Sep 2026 10:09:38 -0400 [thread overview]
Message-ID: <20260903140938.GS3004@cmpxchg.org> (raw)
In-Reply-To: <20260903031952.1120321-3-ridong.chen@linux.dev>
On Thu, Sep 03, 2026 at 11:19:52AM +0800, Ridong Chen wrote:
> From: Ridong Chen <chenridong@xiaomi.com>
>
> For MGLRU, memory.min/low is not honored during global proactive reclaim
> (writing to the root memory.reclaim) and global direct reclaim, because
> these paths shrink memcgs using stale or effective protection (emin/elow).
> It can be reproduced as follows:
>
> # echo 7 > /sys/kernel/mm/lru_gen/enabled
> # cd /sys/fs/cgroup
> # mkdir -p a/b
> # echo 100M > a/memory.min
> # echo +memory > a/cgroup.subtree_control
> # echo 100M > a/b/memory.min
> # echo $$ > a/b/cgroup.procs
> # dd if=/dev/zero of=/tmp/testfile bs=1M count=200
> # cat a/b/memory.current
> 222650368
> # echo 500M > memory.reclaim
> -bash: echo: write error: Resource temporarily unavailable
> # cat a/b/memory.current
> 6070272
>
> memory.min is 100M, yet reclaim drops a/b down to 6M, breaking the
> protection. The traditional LRU path is not affected because
> shrink_node() calls mem_cgroup_calculate_protection() for each memcg it
> visits during a top-down tree walk.
>
> Commit 30d77b7eef01 ("mm/mglru: fix ineffective protection calculation")
> moved the protection computation into lru_gen_age_node(), which only
> runs for kswapd. Non-kswapd global reclaim reaches shrink_one() through
> lru_gen_shrink_node() -> shrink_many() without any protection
> computation, so emin/elow are whatever a previous kswapd run left behind
> - or zero if kswapd never ran on this node. Relying on a prior kswapd
> pass is not correct either: a memcg's emin/elow are derived from its
> ancestors' memory.min/low settings and from children_min_usage, both of
> which change over time, so emin/elow go stale even after kswapd has run
> and must be recomputed at the point of reclaim.
>
> Introduce mem_cgroup_calculate_protection_path() which computes emin/elow
> along the root-to-target path only, by iterating through the cgroup
> ancestors array top-down. This avoids the full tree traversal that would
> be needed with mem_cgroup_calculate_protection(), limiting the cost to
> O(depth) per memcg - typically 3-5 levels.
>
> Call it from shrink_one() for the non-kswapd path so that each memcg
> about to be shrunk has correct protection values.
>
> Fixes: e4dde56cd208 ("mm: multi-gen LRU: per-node lru_gen_folio lists")
> Cc: stable@vger.kernel.org
> Assisted-by: Claude:claude-opus-4-8
> Signed-off-by: Ridong Chen <chenridong@xiaomi.com>
With Barry's two points of feedback (changelog and comment),
Reviewed-by: Johannes Weiner <hannes@cmpxchg.org>
prev parent reply other threads:[~2026-09-03 14:09 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-03 3:19 [PATCH v3 0/2] mm/mglru: fix ineffective memory protection for non-kswapd reclaim Ridong Chen
2026-09-03 3:19 ` [PATCH v3 1/2] mm/page_counter: avoid integer overflow in effective_protection() Ridong Chen
2026-09-03 14:00 ` Johannes Weiner
2026-09-04 3:34 ` Ridong Chen
2026-09-04 8:37 ` David Laight
2026-09-06 1:11 ` Ridong Chen
2026-09-06 10:16 ` David Laight
2026-09-07 2:08 ` Ridong Chen
2026-09-03 3:19 ` [PATCH v3 2/2] mm/mglru: fix ineffective memory protection for non-kswapd reclaim Ridong Chen
2026-09-03 6:30 ` Barry Song
2026-09-03 11:48 ` Ridong Chen
2026-09-03 14:09 ` Johannes Weiner [this message]
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=20260903140938.GS3004@cmpxchg.org \
--to=hannes@cmpxchg.org \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=baohua@kernel.org \
--cc=cgroups@vger.kernel.org \
--cc=chenridong@xiaomi.com \
--cc=chris@chrisdown.name \
--cc=david@kernel.org \
--cc=kasong@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@kernel.org \
--cc=muchun.song@linux.dev \
--cc=qi.zheng@linux.dev \
--cc=ridong.chen@linux.dev \
--cc=roman.gushchin@linux.dev \
--cc=shakeel.butt@linux.dev \
--cc=stable@vger.kernel.org \
--cc=tj@kernel.org \
--cc=weixugc@google.com \
--cc=yuanchu@google.com \
--cc=yuzhao@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.