From: wangzicheng <wangzicheng@honor.com>
To: Barry Song <21cnbao@gmail.com>
Cc: "akpm@linux-foundation.org" <akpm@linux-foundation.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
"Lei Liu" <liulei.rjpt@vivo.com>,
"Matthew Wilcox (Oracle)" <willy@infradead.org>,
Axel Rasmussen <axelrasmussen@google.com>,
Yuanchu Xie <yuanchu@google.com>, Wei Xu <weixugc@google.com>,
Kairui Song <kasong@tencent.com>,
Tangquan Zheng <zhengtangquan@oppo.com>,
wangtao <tao.wangtao@honor.com>,
liulu 00013167 <liulu.liu@honor.com>
Subject: RE: [PATCH RFC] mm/mglru: lazily activate folios while folios are really mapped
Date: Thu, 19 Mar 2026 10:12:45 +0000 [thread overview]
Message-ID: <d11be6d7aaf14d6e8542c5bfb56bb0c1@honor.com> (raw)
In-Reply-To: <CAGsJ_4xUA9MfzYbTdpGsLsWoRb5ORV=_Vi6-jDh6VC=guOdcbQ@mail.gmail.com>
Hi Barry,
Thank you for the suggestion.
I have re-designed the workload and get the relative promising results.
The workload repeatedly launches and switches between 30 apps
for 500 rounds. Since the test takes quite a long time, the final results
appear relatively stable across runs.
The testing was done on an Android 16 device with kernel 6.6.89,
8GB RAM, MGLRU enabled.
However, the results are not very easy to interpret.
Average number of kept-alive apps: ±0.08 apps
Average available memory (sampled after each app launch):
baseline vs patched: 2216MB vs 2218MB (~2MB difference)
Below is the vmstat comparison (patched vs baseline):
Metric Change
--------------------------- --------
pgpgin +2.06%
pgpgout +3.10%
pswpin +14.13%
pswpout +4.55%
pgfault -3.19%
pgmajfault +12.75%
workingset_refault_anon +14.77%
workingset_refault_file +3.48%
workingset_activate_anon -3.45%
workingset_activate_file -17.76%
workingset_restore_anon -3.44%
workingset_restore_file -19.13%
In v6.6, when PG_active is set, pages go to the youngest generation,
while pages without PG_active go to the second oldest generation.
```
static inline bool lru_gen_add_folio(
...
if (folio_test_active(folio))
seq = lrugen->max_seq;
...
else
seq = lrugen->min_seq[type] + 1;
```
My rough expectation was that the patch should make file pages more
prone to reclaim and make file page hot/cold aging more accurate, so
both file refault and anon refault might decrease. But here anon refault
increases instead.
I’m not sure if this assumption is correct. Could you share your thoughts
on how to interpret these results?
Thanks,
Zicheng
> -----Original Message-----
> From: owner-linux-mm@kvack.org <owner-linux-mm@kvack.org> On Behalf
> Of Barry Song
> Sent: Sunday, March 1, 2026 12:16 PM
> To: wangzicheng <wangzicheng@honor.com>
> Cc: akpm@linux-foundation.org; linux-mm@kvack.org; linux-
> kernel@vger.kernel.org; Suren Baghdasaryan <surenb@google.com>; Lei Liu
> <liulei.rjpt@vivo.com>; Matthew Wilcox (Oracle) <willy@infradead.org>;
> Axel Rasmussen <axelrasmussen@google.com>; Yuanchu Xie
> <yuanchu@google.com>; Wei Xu <weixugc@google.com>; Kairui Song
> <kasong@tencent.com>; Tangquan Zheng <zhengtangquan@oppo.com>;
> wangtao <tao.wangtao@honor.com>
> Subject: Re: [PATCH RFC] mm/mglru: lazily activate folios while folios are
> really mapped
>
> On Sat, Feb 28, 2026 at 6:28 PM wangzicheng <wangzicheng@honor.com>
> wrote:
> >
> > Hi Barry,
> > >
> > > I find your concern a bit surprising. If I understand correctly,
> > > you’re observing that file folios are currently being over-reclaimed.
> > > In that case, placing hot pages at the tail might make them harder
> > > to reclaim after PTE scanning (since they may still be young), but
> > > this seems to violate the fundamental principle of LRU. Moreover,
> > > when scanning encounters young file folios, reclaim will simply
> > > continue scanning more folios to find reclaimable ones, so scanning
> > > hot folios only wastes CPU time.
> > > Since read-ahead cold folios are placed at the head, relatively hotter
> > > folios may be reclaimed instead, causing refaults and further triggering
> > > reclaim, which can worsen the situation.
> > >
> > Thank you for the detailed explanation.
> > > >
> > > > We'll test this when available and report back. We hope to have a
> > > > chance to discuss this topic at LSF/MM/BPF.
> > > >
> > >
> > > Sure, thanks!
> > >
> > > Barry
> >
> > For evaluation I’m using a workload that repeatedly cold-starts and
> > drives same user actions in 20+ apps on Android.
> > I’m comparing baseline(v6.6) vs. the patched kernel and watching
> > `/proc/vmstat -> workingset_refault_file`, expecting it to go down.
> >
> > I ran 3 runs per kernel, but `workingset_refault_file` is quite noisy,
> > the Coefficient of Variation is around 40%, so the result doesn’t look
> > statistically solid.
> >
> > Do you have any suggestions on how to measure the benefit more
> > robustly? For example:
> > - different or longer-running workloads,
> > - better normalization for refaults (per time, per faults, etc.),
> > - or other vmstat metrics that you found more stable in practice?
>
> I've cc'ed Tangquan, and he may be able to share how he was testing.
> Basically, you may want to disable Wi-Fi, as it can introduce a lot of
> variability between runs. Aside from refault metrics, you should also
> see reduced I/O load and fewer swap-out/in events if you run the same
> sequence of apps consistently.
>
> >
> > I’m also considering increasing the number of runs and using a t-test,
> > or comparing the CDF between baseline and patched kernels.
> > If you have a preferred methodology, I’d like to align with that.
> >
>
> Thanks
> Barry
next prev parent reply other threads:[~2026-03-19 10:13 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-25 22:37 [PATCH RFC] mm/mglru: lazily activate folios while folios are really mapped Barry Song
2026-02-26 12:57 ` wangzicheng
2026-02-27 0:15 ` Barry Song
2026-02-28 10:28 ` wangzicheng
2026-03-01 4:16 ` Barry Song
2026-03-19 10:12 ` wangzicheng [this message]
2026-03-20 9:59 ` 答复: " 郑堂权(Blues Zheng)
-- strict thread matches above, loose matches on Subject: below --
2026-02-25 21:26 Barry Song
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=d11be6d7aaf14d6e8542c5bfb56bb0c1@honor.com \
--to=wangzicheng@honor.com \
--cc=21cnbao@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=kasong@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=liulei.rjpt@vivo.com \
--cc=liulu.liu@honor.com \
--cc=surenb@google.com \
--cc=tao.wangtao@honor.com \
--cc=weixugc@google.com \
--cc=willy@infradead.org \
--cc=yuanchu@google.com \
--cc=zhengtangquan@oppo.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