From: "Liam R. Howlett" <liam@infradead.org>
To: Barry Song <baohua@kernel.org>
Cc: Matthew Wilcox <willy@infradead.org>,
Suren Baghdasaryan <surenb@google.com>,
Lorenzo Stoakes <ljs@kernel.org>,
"David Hildenbrand (Arm)" <david@kernel.org>,
akpm@linux-foundation.org, linux-mm@kvack.org, vbabka@kernel.org,
rppt@kernel.org, mhocko@suse.com, jack@suse.cz,
pfalcato@suse.de, wanglian@kylinos.cn, chentao@kylinos.cn,
lianux.mm@gmail.com, kunwu.chan@gmail.com,
liyangouwen1@oppo.com, chrisl@kernel.org, kasong@tencent.com,
shikemeng@huaweicloud.com, nphamcs@gmail.com, bhe@redhat.com,
youngjun.park@lge.com, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, loongarch@lists.linux.dev,
linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org,
linux-s390@vger.kernel.org, Nanzhe Zhao <nzzhao@126.com>
Subject: Re: [PATCH v2 0/5] mm: reduce mmap_lock contention and improve page fault performance
Date: Mon, 22 Jun 2026 10:50:02 -0400 [thread overview]
Message-ID: <c5soxcu245cerfljr2ddto4h7xqksfxzxti47mq6sqn6pnmnxh@th5kxapvnaj3> (raw)
In-Reply-To: <CAGsJ_4ybg5LGYopTUJTh5R2rN6X3uR9xoJSL+RdTYVtm1-xqLg@mail.gmail.com>
On 26/06/22 08:15AM, Barry Song wrote:
> On Mon, Jun 22, 2026 at 4:49 AM Matthew Wilcox <willy@infradead.org> wrote:
> >
> > On Sat, Jun 20, 2026 at 04:48:57PM -0700, Suren Baghdasaryan wrote:
> > > Just checking in on the followup plans. IIUC the RFC mentioned will
> > > try to implement the solution we discussed at LSFMM: splitting
> > > VM_FAULT_RETRY into two flags - one for retrying under per-VMA locks
> > > and another one to fallback to mmap_lock.
> >
> > I continue to hate this idea. I don't believe that those who were
> > pushing for it have ever tried to understand the whole fault path.
> > It's utterly byzantine.
> >
> > I defy anyone to make sense of this:
> >
> > /*
> > * NOTE! This will make us return with VM_FAULT_RETRY, but with
> > * the fault lock still held. That's how FAULT_FLAG_RETRY_NOWAIT
> > * is supposed to work. We have way too many special cases..
> > */
> > if (vmf->flags & FAULT_FLAG_RETRY_NOWAIT)
> > return 0;
> >
> > *fpin = maybe_unlock_mmap_for_io(vmf, *fpin);
> > if (vmf->flags & FAULT_FLAG_KILLABLE) {
> > if (__folio_lock_killable(folio)) {
> > /*
> > * We didn't have the right flags to drop the
> > * fault lock, but all fault_handlers only check
> > * for fatal signals if we return VM_FAULT_RETRY,
> > * so we need to drop the fault lock here and
> > * return 0 if we don't have a fpin.
> > */
> > if (*fpin == NULL)
> > release_fault_lock(vmf);
> > return 0;
> > }
> >
> > Wed need to simplify the fault path, not add additional complexity.
> > Josef has said he wouldn't've done the lock dropping had we had per-VMA
> > locks. We should rip it out.
>
> I think you have agreed that, at least for anon vma, we can
> keep the current policy, since anon vma is much more volatile
> than file vma.
I don't think any of the above has to do with anon vmas. Does any anon
vma handling have anything to do with your problem?
This would be needed if anon vmas were being faulted while being
unmapped or merged? Do we really need a fast path for that? Note that
anon vmas cannot be merged if the vma chain... you know what, I wonder
how many people know what I'm talking about here... Let's just say that
they can't be merged if they were around for a fork.
So, then, we're looking at anon vmas taking the mmap lock on:
1. single task anon vmas being expanded and faulted at the same time
2. single task anon vmas being unmapped and faulted at the same time
I think that's it?
But maybe I missed something critical about your use case here?
I don't understand why you are involving anon vmas in this discussion,
so I must have missed something with your IO completion issue. Is there
an anon vma causing your priority inversion?
> Concurrent page faults and VMA modifications can happen more
> often than with file VMAs.
But it's only a problem for anon vmas with per-vma locking if it's the
same vma (or the vma lock sequence counter overflows, but let's say
that's a statistically insignificant non-zero value).
>
> For file vmas, how much code can we actually remove, given that
> the first page fault might already be holding mmap_lock?
How much complexity can we remove and maintain the performance, might be
a better question.
> It could be the case that lock_vma_under_rcu() fails, and then
> on the first page fault we end up holding mmap_lock before
> retrying. So are we also going to rip out the lock release,
> even if it risks holding mmap_lock for a long time?
>
> vma = lock_vma_under_rcu(mm, addr);
> if (!vma)
> goto lock_mmap;
> ...
> lock_mmap:
>
> vma = lock_mm_and_find_vma(mm, addr, regs);
> if (unlikely(!vma)) {
> fault = 0;
> si_code = SEGV_MAPERR;
> goto bad_area;
> }
>
> If we still need to keep the page fault retry code there, it
> doesn't seem like "ripping out" really reduces complexity in
> the page fault code?
This seems unrelated to be above complexity that might be the target of
removal?
Thanks,
Liam
next prev parent reply other threads:[~2026-06-22 14:50 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-30 4:04 Barry Song (Xiaomi)
2026-04-30 4:04 ` [PATCH v2 1/5] mm/filemap: Retry fault by VMA lock if the lock was released for I/O Barry Song (Xiaomi)
2026-04-30 4:04 ` [PATCH v2 2/5] mm/swapin: Retry swapin " Barry Song (Xiaomi)
2026-04-30 4:04 ` [PATCH v2 3/5] mm: Move folio_lock_or_retry() and drop __folio_lock_or_retry() Barry Song (Xiaomi)
2026-04-30 4:04 ` [PATCH v2 4/5] mm: Don't retry page fault if folio is uptodate during swap-in Barry Song (Xiaomi)
2026-04-30 12:35 ` Matthew Wilcox
2026-05-01 16:11 ` Matthew Wilcox
2026-04-30 4:04 ` [PATCH v2 5/5] mm/filemap: Avoid retrying page faults on uptodate folios in filemap faults Barry Song (Xiaomi)
2026-04-30 12:37 ` [PATCH v2 0/5] mm: reduce mmap_lock contention and improve page fault performance Matthew Wilcox
2026-04-30 22:49 ` Barry Song
2026-05-01 14:56 ` Matthew Wilcox
2026-05-01 17:44 ` Barry Song
2026-05-01 17:57 ` Matthew Wilcox
2026-05-01 18:25 ` Barry Song
2026-05-01 19:39 ` Matthew Wilcox
2026-05-03 20:39 ` Barry Song
2026-05-03 13:13 ` Jan Kara
2026-05-03 19:55 ` Barry Song
2026-05-04 13:03 ` Jan Kara
2026-05-04 13:35 ` Barry Song
2026-05-04 14:15 ` Barry Song
2026-05-17 8:45 ` Barry Song
2026-05-18 9:46 ` Lorenzo Stoakes
2026-05-18 11:25 ` Barry Song
2026-05-18 16:17 ` Matthew Wilcox
2026-05-18 20:50 ` Barry Song
2026-05-18 19:56 ` Suren Baghdasaryan
2026-05-18 21:14 ` Barry Song
2026-05-19 12:45 ` Lorenzo Stoakes
2026-05-19 14:17 ` Liam R. Howlett
2026-05-19 22:01 ` Barry Song
2026-05-20 21:04 ` Matthew Wilcox
2026-05-20 21:14 ` Barry Song
2026-05-20 21:15 ` Matthew Wilcox
2026-05-20 21:35 ` David Hildenbrand (Arm)
2026-05-20 23:37 ` Barry Song
2026-05-22 15:53 ` Lorenzo Stoakes
2026-05-22 21:31 ` Barry Song
2026-06-20 23:48 ` Suren Baghdasaryan
2026-06-21 20:49 ` Matthew Wilcox
2026-06-22 0:15 ` Barry Song
2026-06-22 14:50 ` Liam R. Howlett [this message]
2026-06-22 21:35 ` Barry Song
2026-06-23 7:58 ` Hongru Zhang
2026-06-23 8:02 ` David Hildenbrand (Arm)
2026-06-23 10:10 ` Hongru Zhang
2026-05-22 2:33 ` Barry Song (Xiaomi)
2026-05-22 13:09 ` Matthew Wilcox
2026-05-22 13:36 ` Barry Song
2026-05-22 13:48 ` Barry Song
2026-05-22 15:42 ` Lorenzo Stoakes
2026-05-19 12:53 ` Lorenzo Stoakes
2026-05-19 21:18 ` Barry Song
2026-05-20 7:50 ` Lorenzo Stoakes
2026-05-20 9:07 ` Barry Song
2026-05-20 10:07 ` Lorenzo Stoakes
2026-05-20 16:20 ` Suren Baghdasaryan
2026-05-20 5:51 ` Suren Baghdasaryan
2026-05-22 15:39 ` Lorenzo Stoakes
2026-05-20 10:33 ` David Hildenbrand (Arm)
2026-05-20 12:55 ` Lorenzo Stoakes
2026-05-20 21:39 ` Yang Shi
2026-05-22 15:37 ` Lorenzo Stoakes
2026-05-19 12:43 ` Lorenzo Stoakes
2026-05-18 9:53 ` David Hildenbrand (Arm)
2026-05-19 13:42 ` Lorenzo Stoakes
2026-05-18 21:21 ` Yang Shi
2026-05-19 11:07 ` Barry Song
2026-05-19 13:34 ` Lorenzo Stoakes
2026-05-19 18:50 ` Yang Shi
2026-05-19 20:53 ` Yang Shi
2026-05-19 13:12 ` Lorenzo Stoakes
2026-05-19 13:39 ` Lorenzo Stoakes
2026-05-19 18:41 ` Yang Shi
2026-05-19 21:02 ` Yang Shi
2026-05-20 8:11 ` Lorenzo Stoakes
2026-05-01 15:52 ` Lorenzo Stoakes
2026-05-01 16:06 ` Matthew Wilcox
2026-05-01 17:09 ` Lorenzo Stoakes
2026-05-01 17:59 ` Barry Song
2026-05-20 2:04 ` Hillf Danton
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=c5soxcu245cerfljr2ddto4h7xqksfxzxti47mq6sqn6pnmnxh@th5kxapvnaj3 \
--to=liam@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=bhe@redhat.com \
--cc=chentao@kylinos.cn \
--cc=chrisl@kernel.org \
--cc=david@kernel.org \
--cc=jack@suse.cz \
--cc=kasong@tencent.com \
--cc=kunwu.chan@gmail.com \
--cc=lianux.mm@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=liyangouwen1@oppo.com \
--cc=ljs@kernel.org \
--cc=loongarch@lists.linux.dev \
--cc=mhocko@suse.com \
--cc=nphamcs@gmail.com \
--cc=nzzhao@126.com \
--cc=pfalcato@suse.de \
--cc=rppt@kernel.org \
--cc=shikemeng@huaweicloud.com \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
--cc=wanglian@kylinos.cn \
--cc=willy@infradead.org \
--cc=youngjun.park@lge.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