From: Yuan-Hao Hsu <aa9736195201@gmail.com>
To: Rik van Riel <riel@surriel.com>
Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com,
Andrew Morton <akpm@linux-foundation.org>,
David Hildenbrand <david@kernel.org>,
Jason Gunthorpe <jgg@ziepe.ca>,
John Hubbard <jhubbard@nvidia.com>, Peter Xu <peterx@redhat.com>,
Suren Baghdasaryan <surenb@google.com>,
linux-mm@kvack.org
Subject: Re: [RFC PATCH v3 0/8] batch lookups in follow_page_mask()
Date: Thu, 15 Oct 2026 05:45:39 +0800 [thread overview]
Message-ID: <20261014214540.574-1-aa9736195201@gmail.com> (raw)
In-Reply-To: <20260811025157.1632867-1-riel@surriel.com>
On Mon, 10 Aug 2026 22:51:49 -0400, Rik van Riel wrote:
> This series changes follow_page_mask() to return a page count and a fill an
> array of pages, instead of a single struct page, so a walker can hand back
> more than one page per call.
Applied the series on current mainline (3857c2fe5449) and ran it
through the mm selftests with DEBUG_VM and PROVE_LOCKING, a race test
that drives get_user_pages() and pin_user_pages(FOLL_LONGTERM)
against mprotect/MADV_DONTNEED/MADV_COLLAPSE/fork on 64 kB and 2 MB
folios, and a core dump of mixed 4 kB/64 kB/PMD mappings with holes
and a PROT_NONE page. All of it passes with no unexpected warnings,
and the fast path numbers did not move. W=1, sparse and the cross
builds for arm64 (4K/16K/64K), i386 (with and without PAE) and ARM
nommu are clean.
pin_user_pages(FOLL_LONGTERM) over 64 kB mTHP, the whole region in
one call, median of 15, base -> series:
16 MB 138 -> 15 us
64 MB 566 -> 60 us
256 MB 2318 -> 249 us
(4 kB pages at 256 MB: 2361 -> 1065 us; 2 MB THP unchanged.)
One thing worth knowing from the 256 MB run: the unpin side goes from
94 to 180 us. The unpin time is the same on both kernels at 16 MB
and 64 MB, which points to a cache effect rather than extra work: the
batched walk no longer touches the tail pages' struct page, so
gup_folio_next() in unpin_user_pages() takes those misses instead.
Net 2412 -> 429 us.
The one change I would make is on 7/8: the pages[] fill and the cache
flushes now run under the PTE lock, up to a whole page table per
hold, while 5/8 moves that same work out of the pmd/pud lock.
Details there.
Yuan-Hao Hsu
prev parent reply other threads:[~2026-10-14 21:45 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-11 2:51 [RFC PATCH v3 0/8] batch lookups in follow_page_mask() Rik van Riel
2026-08-11 2:51 ` [RFC PATCH v3 1/8] mm/gup: break out gup_fill_pages() helper Rik van Riel
2026-08-28 21:24 ` Suren Baghdasaryan
2026-08-11 2:51 ` [RFC PATCH v3 2/8] mm/gup: convert follow_page_mask() to return a long Rik van Riel
2026-08-28 21:28 ` Suren Baghdasaryan
2026-08-11 2:51 ` [RFC PATCH v3 3/8] mm/gup: split follow_page_pte_commit() out of follow_page_pte() Rik van Riel
2026-08-12 11:50 ` David Hildenbrand (Arm)
2026-08-12 13:02 ` Rik van Riel
2026-08-12 13:23 ` David Hildenbrand (Arm)
2026-08-12 16:19 ` Rik van Riel
2026-08-21 17:38 ` Rik van Riel
2026-08-21 22:04 ` John Hubbard
2026-08-22 13:20 ` Rik van Riel
2026-08-22 21:31 ` John Hubbard
2026-08-24 13:20 ` Rik van Riel
2026-08-11 2:51 ` [RFC PATCH v3 4/8] mm/gup: break out follow_one_pte() helper Rik van Riel
2026-08-28 23:47 ` Suren Baghdasaryan
2026-08-29 2:11 ` Rik van Riel
2026-08-11 2:51 ` [RFC PATCH v3 5/8] mm/gup: fill the pages array outside the pud/pmd lock Rik van Riel
2026-08-29 3:00 ` Suren Baghdasaryan
2026-08-11 2:51 ` [RFC PATCH v3 6/8] mm/gup: return a huge page's full count from follow_page_mask() Rik van Riel
2026-08-11 2:51 ` [RFC PATCH v3 7/8] mm/gup: walk multiple PTEs per follow_page_pte() call Rik van Riel
2026-08-29 3:06 ` Suren Baghdasaryan
2026-10-14 21:54 ` Yuan-Hao Hsu
2026-10-15 1:49 ` Rik van Riel
2026-08-11 2:51 ` [RFC PATCH v3 8/8] mm/gup: batch contiguous same-folio PTEs into one refcount grab Rik van Riel
2026-08-12 11:41 ` [RFC PATCH v3 0/8] batch lookups in follow_page_mask() David Hildenbrand (Arm)
2026-08-25 7:52 ` Christoph Hellwig
2026-08-25 13:37 ` Rik van Riel
2026-08-26 4:39 ` Christoph Hellwig
2026-08-26 7:35 ` Christoph Hellwig
2026-08-26 8:27 ` David Hildenbrand (Arm)
2026-08-26 13:36 ` Rik van Riel
2026-10-14 21:45 ` Yuan-Hao Hsu [this message]
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=20261014214540.574-1-aa9736195201@gmail.com \
--to=aa9736195201@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=david@kernel.org \
--cc=jgg@ziepe.ca \
--cc=jhubbard@nvidia.com \
--cc=kernel-team@meta.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=peterx@redhat.com \
--cc=riel@surriel.com \
--cc=surenb@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 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.