From: Baolin Wang <baolin.wang@linux.alibaba.com>
To: Barry Song <baohua@kernel.org>
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
axelrasmussen@google.com, baoquan.he@linux.dev,
chenridong@xiaomi.com, david@kernel.org, hannes@cmpxchg.org,
kasong@tencent.com, lianux.mm@gmail.com,
linux-kernel@vger.kernel.org, ljs@kernel.org,
lyugaofei@xiaomi.com, mhocko@kernel.org, qi.zheng@linux.dev,
shakeel.butt@linux.dev, stevensd@chromium.org,
wangzicheng@honor.com, weixugc@google.com, yuanchu@google.com,
zhangbo56@xiaomi.com, Xueyuan Chen <xueyuan.chen21@gmail.com>
Subject: Re: [PATCH v3 6/7] mm/mglru: move folios from oldest gen to second-oldest gen from head to tail
Date: Fri, 4 Sep 2026 10:47:15 +0800 [thread overview]
Message-ID: <129ecc53-f96e-4a5d-a79c-c05293d815d3@linux.alibaba.com> (raw)
In-Reply-To: <CAGsJ_4ybQbbxxyz5EU29cckoQQpm4PrQi3W2Bu3Mb22UCjFBrQ@mail.gmail.com>
On 9/4/26 10:28 AM, Barry Song wrote:
> On Fri, Sep 4, 2026 at 9:53 AM Baolin Wang
> <baolin.wang@linux.alibaba.com> wrote:
>>
>>
>>
>> On 9/2/26 7:24 AM, Barry Song (Xiaomi) wrote:
>>> For reclamation, it makes sense to reclaim folios from tail to
>>> head, as folios near the head are relatively hot. However, when
>>> moving folios from the oldest generation to the second-oldest
>>> generation, using the tail-to-head order would effectively cause
>>> a cold/hot inversion.
>>>
>>> Signed-off-by: Barry Song (Xiaomi) <baohua@kernel.org>
>>> Reviewed-by: Baoquan He <baoquan.he@linux.dev>
>>> Tested-by: Xueyuan Chen <xueyuan.chen21@gmail.com>
>>> Reviewed-by: Lian Wang <lianux.mm@gmail.com>
>>> ---
>>> mm/vmscan.c | 23 +++++++++++++++++++++--
>>> 1 file changed, 21 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/mm/vmscan.c b/mm/vmscan.c
>>> index 1907a946840d..76dfa9575852 100644
>>> --- a/mm/vmscan.c
>>> +++ b/mm/vmscan.c
>>> @@ -192,11 +192,27 @@ static inline void prefetchw_prev_lru_folio(struct folio *folio,
>>> prefetchw(&prev->flags);
>>> }
>>> }
>>> +
>>> +static inline void prefetchw_next_lru_folio(struct folio *folio,
>>> + struct list_head *base)
>>> +{
>>> + if (folio->lru.next != base) {
>>> + struct folio *next;
>>> +
>>> + next = list_entry(folio->lru.next, struct folio, lru);
>>> + prefetchw(&next->flags);
>>> + }
>>> +}
>>
>> You did not mention in the commit message why this prefetch was added.
>> Just curious, does it really help performance?
>
> Hi Baolin,
>
> Thanks for your review.
>
> I had this discussion with Kairui and thought it might be
> useful to keep it here:
>
> https://lore.kernel.org/linux-mm/CAMgjq7AJnWGGH=FNuV7ynXjbffktsDRgdcyagLUJUwJf1ukaJQ@mail.gmail.com/
>
> It might be arch-dependent. Some architectures could benefit
> significantly from prefetching, while others might see little to
> no impact.
>
> for my x86 test, it has very slight improvement:
>
> ***** no-prefetch:
>
> agetest:
> ...
> gen 100: 2.421 ms
> gen 101: 2.424 ms
> gen 102: 2.420 ms
> gen 103: 2.413 ms
>
> Total: 248.418 ms
> Average: 2.460 ms
>
> agetest:
> ...
> gen 100: 2.393 ms
> gen 101: 2.396 ms
> gen 102: 2.395 ms
> gen 103: 2.392 ms
>
> Total: 245.627 ms
> Average: 2.432 ms
>
> agetest:
> ...
> gen 100: 2.433 ms
> gen 101: 2.427 ms
> gen 102: 2.432 ms
> gen 103: 2.450 ms
>
> Total: 249.186 ms
> Average: 2.467 ms
>
> **** has-prefetch:
>
> agetest:
> ....
> gen 100: 2.314 ms
> gen 101: 2.310 ms
> gen 102: 2.321 ms
> gen 103: 2.303 ms
>
> Total: 237.619 ms
> Average: 2.353 ms
>
> agetest:
> gen 100: 2.342 ms
> gen 101: 2.343 ms
> gen 102: 2.339 ms
> gen 103: 2.335 ms
>
> Total: 239.929 ms
> Average: 2.376 ms
>
> agetest:
>
> gen 100: 2.344 ms
> gen 101: 2.347 ms
> gen 102: 2.352 ms
> gen 103: 2.348 ms
>
> Total: 241.188 ms
> Average: 2.388 ms
>
> Basically, it’s 2.3xx vs. 2.4xx, lower is better.
Could you add this info to the commit message? (IIUC, someone tried to
remove the prefetch in MM, since they found that prefetch doesn't seem
to help much on modern CPUs.)
next prev parent reply other threads:[~2026-09-04 2:47 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-01 23:24 [PATCH v3 0/7] mm/mglru: speed up inc_min_seq() and fix cold/hot inversions Barry Song (Xiaomi)
2026-09-01 23:24 ` [PATCH v3 1/7] mm/mglru: separate folio generation update from LRU accounting Barry Song (Xiaomi)
2026-09-03 9:36 ` Baolin Wang
2026-09-01 23:24 ` [PATCH v3 2/7] mm/mglru: batch update lrugen->nr_pages in inc_min_seq() Barry Song (Xiaomi)
2026-09-03 10:06 ` Baolin Wang
2026-09-01 23:24 ` [PATCH v3 3/7] mm/mglru: enhance cold/hot inversion handling " Barry Song (Xiaomi)
2026-09-03 10:11 ` Baolin Wang
2026-09-01 23:24 ` [PATCH v3 4/7] mm/mglru: exclude folios promoted by aging from protected " Barry Song (Xiaomi)
2026-09-01 23:24 ` [PATCH v3 5/7] mm/mglru: make LRU folio prefetch helper an inline function Barry Song (Xiaomi)
2026-09-03 10:14 ` Baolin Wang
2026-09-01 23:24 ` [PATCH v3 6/7] mm/mglru: move folios from oldest gen to second-oldest gen from head to tail Barry Song (Xiaomi)
2026-09-04 1:53 ` Baolin Wang
2026-09-04 2:28 ` Barry Song
2026-09-04 2:47 ` Baolin Wang [this message]
2026-09-04 3:27 ` Barry Song (Xiaomi)
2026-09-04 4:27 ` Andrew Morton
2026-09-01 23:24 ` [PATCH v3 7/7] mm/mglru: batch move folios to the second-oldest gen's LRU Barry Song (Xiaomi)
2026-09-04 2:38 ` Baolin Wang
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=129ecc53-f96e-4a5d-a79c-c05293d815d3@linux.alibaba.com \
--to=baolin.wang@linux.alibaba.com \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=baohua@kernel.org \
--cc=baoquan.he@linux.dev \
--cc=chenridong@xiaomi.com \
--cc=david@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=kasong@tencent.com \
--cc=lianux.mm@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=lyugaofei@xiaomi.com \
--cc=mhocko@kernel.org \
--cc=qi.zheng@linux.dev \
--cc=shakeel.butt@linux.dev \
--cc=stevensd@chromium.org \
--cc=wangzicheng@honor.com \
--cc=weixugc@google.com \
--cc=xueyuan.chen21@gmail.com \
--cc=yuanchu@google.com \
--cc=zhangbo56@xiaomi.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