From: "David Hildenbrand (Arm)" <david@kernel.org>
To: Lance Yang <lance.yang@linux.dev>, baolin.wang@linux.alibaba.com
Cc: baohua@kernel.org, akpm@linux-foundation.org, ljs@kernel.org,
riel@surriel.com, liam@infradead.org, vbabka@kernel.org,
harry@kernel.org, jannh@google.com, qi.zheng@linux.dev,
pfalcato@suse.de, ayushr@modal.com, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mm: synchronize with PTE table reclaim for all folio sizes
Date: Thu, 5 Nov 2026 20:35:15 +0100 [thread overview]
Message-ID: <4e935565-a22f-4cfe-935a-bbee3e81d7a6@kernel.org> (raw)
In-Reply-To: <20261105132258.99528-1-lance.yang@linux.dev>
On 11/5/26 14:22, Lance Yang wrote:
>
> On Thu, Nov 05, 2026 at 11:06:29AM +0100, David Hildenbrand (Arm) wrote:
>> On 11/5/26 10:00, Baolin Wang wrote:
>>> CC Barry, who added the TTU_SYNC in shrink_folio_list().
>>>
>>>
>>> Thanks Lance. But this matches the purpose of the TTU_SYNC flag, which is used
>>> to avoid racy checks with PVMW_SYNC. If no TTU_SYNC flag is set, it means the
>>> caller can tolerate some racy checks.
>>>
>>> For this case, I think we should set TTU_SYNC unconditionally in
>>> shrink_folio_list(). Barry, what do you think?
>>
>> That makes sense. I hope this doesn't throw a big wrench into our reclaim
>> performance numbers.
>>
>> Can someone benchmark this?
>>
>> But maybe we should really follow-up with the folio-size based optimization in
>> sync_with_folio_pmd_zap(), where we only need a memory barrier (and sufficient
>> documentation why something that cannot be PMD-mapped can get away cheaper).
>
> Dug into the history a bit :D
>
> TTU_SYNC goes back to Hugh's THP splitting fix [1]. A racing zap could
> clear the PTE/PMD before updating mapcount, so the walker could skip the
> lock and return before the accounting caught up.
>
> Barry later enabled it for large-folio reclaim [2], to avoid skipping
> temporarily cleared PTEs and ending up with a partially unmapped folio.
> He mentioned that small folios had the same race, but with just one PTE,
> they couldn't be partially unmapped. That's where the large-folio check
> in shrink_folio_list() came from.
>
> Then PTE table reclaim [3] added another way to end up with an empty PMD,
> even for a folio that can't be PMD-mapped. The truncation fix [4] moved
> the rmap flush before the PMD clear and extended synchronization in
> zap_pmd_range() to cover those folios too.
>
> Looking back at the truncation discussion [5], you also pointed out that
> page_vma_mapped_walk() needed checking, and suggested a possible
> folio-size based optimization in the helper.
>
> [1] https://lore.kernel.org/all/c1e95853-8bcd-d8fd-55fa-e7f2488e78f@google.com/
> [2] https://lore.kernel.org/all/20240306095219.71086-1-21cnbao@gmail.com/
> [3] https://lore.kernel.org/all/92aba2b319a734913f18ba41e7d86a265f0b84e2.1733305182.git.zhengqi.arch@bytedance.com/
> [4] https://lore.kernel.org/all/14ebbd556cc4941f0ebc43da59fa6a2fdca25dc8.1793148609.git.baolin.wang@linux.alibaba.com/
> [5] https://lore.kernel.org/all/08a0907f-8e3a-4071-a2e4-fd1411c446f3@kernel.org/
>
> So, how about starting with order-0 folios?
>
> ---8<---
> diff --git a/include/linux/rmap.h b/include/linux/rmap.h
> index 74cca0e3c726..d01fe8282417 100644
> --- a/include/linux/rmap.h
> +++ b/include/linux/rmap.h
> @@ -872,6 +872,8 @@ struct page_vma_mapped_walk {
> spinlock_t *ptl;
> unsigned int flags;
> bool pgoff_is_anon : 1;
> + /* Set from the folio, not the number of pages being walked. */
> + bool folio_is_order0 : 1;
> };
>
> #define DEFINE_FOLIO_VMA_WALK(name, _folio, _vma, _address, _flags) \
> @@ -883,6 +885,7 @@ struct page_vma_mapped_walk {
> .address = _address, \
> .flags = _flags, \
> .pgoff_is_anon = folio_test_anon(_folio), \
> + .folio_is_order0 = !folio_test_large(_folio), \
> }
We should pass the actual folio ;)
But yes, this goes into the direction I had in mind.
But I do wonder whether we need a separate fix first before we improve it?
--
Cheers,
David
next prev parent reply other threads:[~2026-11-05 19:35 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-05 2:56 [PATCH] mm: synchronize with PTE table reclaim for all folio sizes Baolin Wang
2026-11-05 3:22 ` Qi Zheng
2026-11-05 4:54 ` Lance Yang
2026-11-05 5:48 ` Lance Yang
2026-11-05 9:00 ` Baolin Wang
2026-11-05 10:06 ` David Hildenbrand (Arm)
2026-11-05 11:18 ` Baolin Wang
2026-11-05 13:22 ` Lance Yang
2026-11-05 19:35 ` David Hildenbrand (Arm) [this message]
2026-11-06 1:57 ` Baolin Wang
2026-11-06 2:33 ` Lance Yang
2026-11-06 2:54 ` Baolin Wang
2026-11-07 20:05 ` David Hildenbrand (Arm)
2026-11-06 6:24 ` Barry Song
2026-11-06 8:54 ` Baolin Wang
2026-11-06 9:15 ` Lance Yang
2026-11-06 9:29 ` Lance Yang
2026-11-06 9:50 ` Baolin Wang
2026-11-06 9:56 ` Barry Song
2026-11-06 13:56 ` Baolin Wang
2026-11-10 6:23 ` Baolin Wang
2026-11-10 8:54 ` Barry Song
2026-11-05 11:37 ` Pedro Falcato
2026-11-06 2:12 ` Baolin Wang
2026-11-07 19:58 ` David Hildenbrand (Arm)
2026-11-09 3:39 ` Baolin Wang
2026-11-09 4:27 ` Barry Song
2026-11-10 3:48 ` 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=4e935565-a22f-4cfe-935a-bbee3e81d7a6@kernel.org \
--to=david@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=ayushr@modal.com \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=harry@kernel.org \
--cc=jannh@google.com \
--cc=lance.yang@linux.dev \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=pfalcato@suse.de \
--cc=qi.zheng@linux.dev \
--cc=riel@surriel.com \
--cc=vbabka@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 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.