linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "zhaoyang.huang" <zhaoyang.huang@unisoc.com>
To: Andrew Morton <akpm@linux-foundation.org>,
	Michal Hocko <mhocko@kernel.org>,
	"T . J . Mercier" <tjmercier@google.com>, <linux-mm@kvack.org>,
	<linux-kernel@vger.kernel.org>,
	Zhaoyang Huang <huangzhaoyang@gmail.com>, <steve.kang@unisoc.com>
Subject: [PATCHv2] mm: remove '!root_reclaim' checking in should_abort_scan()
Date: Tue, 17 Mar 2026 20:30:37 +0800	[thread overview]
Message-ID: <20260317123037.1651424-1-zhaoyang.huang@unisoc.com> (raw)

From: Zhaoyang Huang <zhaoyang.huang@unisoc.com>

Nowadays, ANDROID system replaces madivse with memory.reclaim to implement
user space memory management which desires to reclaim a certain amount of
memcg's memory. However, oversized reclaiming and high latency are observed
[1] as there is no limitation over nr_reclaimed inside try_to_shrink_lruvec
when MGLRU enabled. Besides, this could also affect all none root_reclaim
such as reclaim_high etc.
For try_to_free_mem_cgroup_pages -> shrink_node_memcgs ->
shrink_lruvec -> lru_gen_shrink_lruvec -> try_to_shrink_lruvec, the
!root_reclaim(sc) check was there for reclaim fairness, which was
necessary before commit 'b82b530740b9' ("mm: vmscan: restore
incremental cgroup iteration") because the fairness depended on
attempted proportional reclaim from every memcg under the target
memcg. However after commit 'b82b530740b9' there is no longer a need
to visit every memcg to ensure fairness, horray. The problem is for
large lruvecs, the lack of a check against sc->nr_to_reclaim inside
try_to_shrink_lruvec (caused by the continued presence of the
!root_reclaim(sc) check) can cause overreclaim. The non-MGLRU
implementation in shrink_lruvec already checks nr_reclaimed against
nr_to_reclaim.

[1]
test log which shows a nr_to_reclaim=32 pages proactive reclaim ended with
nr_reclaimed=394.

[  485.100981] memcg iter ffffff8086535a00 nr_to_reclaim 32 nr_reclaimed 0
[  485.106927] memcg iter ffffff8086535a00 nr_to_reclaim 32 nr_reclaimed 127
[  485.109652] memcg iter ffffff80744e1400 nr_to_reclaim 32 nr_reclaimed 127
[  485.112255] memcg iter ffffff80744e4600 nr_to_reclaim 32 nr_reclaimed 127
[  485.115766] memcg iter ffffff8150306e00 nr_to_reclaim 32 nr_reclaimed 191
[  485.125635] memcg iter ffffff8157608a00 nr_to_reclaim 32 nr_reclaimed 191
[  485.131366] memcg iter ffffff8157754600 nr_to_reclaim 32 nr_reclaimed 216
[  485.136688] memcg iter ffffff8157752800 nr_to_reclaim 32 nr_reclaimed 216
[  485.140495] memcg iter ffffff8157755000 nr_to_reclaim 32 nr_reclaimed 216
[  485.147322] memcg iter ffffff8159461400 nr_to_reclaim 32 nr_reclaimed 216
[  485.150605] memcg iter ffffff8159466400 nr_to_reclaim 32 nr_reclaimed 216
[  485.158260] memcg iter ffffff8159460a00 nr_to_reclaim 32 nr_reclaimed 216
[  485.160819] memcg iter ffffff8159460000 nr_to_reclaim 32 nr_reclaimed 216
[  485.163200] memcg iter ffffff8159463c00 nr_to_reclaim 32 nr_reclaimed 216
[  485.171778] memcg iter ffffff808912ee00 nr_to_reclaim 32 nr_reclaimed 216
[  485.174156] memcg iter ffffff808912a800 nr_to_reclaim 32 nr_reclaimed 216
[  485.179110] memcg iter ffffff814bd3a800 nr_to_reclaim 32 nr_reclaimed 216
[  485.181537] memcg iter ffffff814bd39e00 nr_to_reclaim 32 nr_reclaimed 216
[  485.184877] memcg iter ffffff814bd3da00 nr_to_reclaim 32 nr_reclaimed 219
[  485.187245] memcg iter ffffff814bd38a00 nr_to_reclaim 32 nr_reclaimed 219
[  485.189654] memcg iter ffffff814bd38000 nr_to_reclaim 32 nr_reclaimed 219
[  485.192029] memcg iter ffffff814bd3bc00 nr_to_reclaim 32 nr_reclaimed 219
[  485.194509] memcg iter ffffff814bd39400 nr_to_reclaim 32 nr_reclaimed 283
[  485.197107] memcg iter ffffff814bd3c600 nr_to_reclaim 32 nr_reclaimed 330
[  485.201361] memcg iter ffffff814bd3ee00 nr_to_reclaim 32 nr_reclaimed 394

Suggested-by: T.J.Mercier <tjmercier@google.com>
Reviewed-by: T.J.Mercier <tjmercier@google.com>
Reviewed-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
---
Patchv2: update commit message
---
---
 mm/vmscan.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 0fc9373e8251..10f1e7d716ca 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -4839,10 +4839,6 @@ static bool should_abort_scan(struct lruvec *lruvec, struct scan_control *sc)
 	int i;
 	enum zone_watermarks mark;
 
-	/* don't abort memcg reclaim to ensure fairness */
-	if (!root_reclaim(sc))
-		return false;
-
 	if (sc->nr_reclaimed >= max(sc->nr_to_reclaim, compact_gap(sc->order)))
 		return true;
 
-- 
2.25.1



             reply	other threads:[~2026-03-17 12:33 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-17 12:30 zhaoyang.huang [this message]
2026-03-17 13:50 ` Michal Hocko

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=20260317123037.1651424-1-zhaoyang.huang@unisoc.com \
    --to=zhaoyang.huang@unisoc.com \
    --cc=akpm@linux-foundation.org \
    --cc=huangzhaoyang@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=steve.kang@unisoc.com \
    --cc=tjmercier@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox