From: Pedro Falcato <pfalcato@suse.de>
To: Davidlohr Bueso <dave@stgolabs.net>
Cc: Andrew Morton <akpm@linux-foundation.org>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Lorenzo Stoakes <ljs@kernel.org>,
Vlastimil Babka <vbabka@kernel.org>,
Jann Horn <jannh@google.com>,
David Hildenbrand <david@kernel.org>,
Dev Jain <dev.jain@arm.com>, Luke Yang <luyang@redhat.com>,
jhladky@redhat.com, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 2/2] mm/mprotect: special-case small folios when applying write permissions
Date: Tue, 7 Apr 2026 09:21:12 +0100 [thread overview]
Message-ID: <jumu4avqtfpf5334cddblhn7xawryviqmxqavxhctpgvtrv7nz@wczfgh3zdq6x> (raw)
In-Reply-To: <20260407005026.ytf7ed4bk2ljyflx@offworld>
(note: had to manually adjust the To: and Cc:, it seems my neomutt doesn't
like something about your email)
On Mon, Apr 06, 2026 at 05:50:26PM -0700, Davidlohr Bueso wrote:
> On Thu, 02 Apr 2026, Pedro Falcato wrote:
>
> > @@ -334,34 +371,20 @@ static long change_pte_range(struct mmu_gather *tlb,
> >
> > nr_ptes = mprotect_folio_pte_batch(folio, pte, oldpte, max_nr_ptes, flags);
> >
> > - oldpte = modify_prot_start_ptes(vma, addr, pte, nr_ptes);
> > - ptent = pte_modify(oldpte, newprot);
> > -
> > - if (uffd_wp)
> > - ptent = pte_mkuffd_wp(ptent);
> > - else if (uffd_wp_resolve)
> > - ptent = pte_clear_uffd_wp(ptent);
> > -
> > /*
> > - * In some writable, shared mappings, we might want
> > - * to catch actual write access -- see
> > - * vma_wants_writenotify().
> > - *
> > - * In all writable, private mappings, we have to
> > - * properly handle COW.
> > - *
> > - * In both cases, we can sometimes still change PTEs
> > - * writable and avoid the write-fault handler, for
> > - * example, if a PTE is already dirty and no other
> > - * COW or special handling is required.
> > + * Optimize for the small-folio common case by
> > + * special-casing it here. Compiler constant propagation
> > + * plus copious amounts of __always_inline does wonders.
> > */
> > - if ((cp_flags & MM_CP_TRY_CHANGE_WRITABLE) &&
> > - !pte_write(ptent))
> > - set_write_prot_commit_flush_ptes(vma, folio, page,
> > - addr, pte, oldpte, ptent, nr_ptes, tlb);
> > - else
> > - prot_commit_flush_ptes(vma, addr, pte, oldpte, ptent,
> > - nr_ptes, /* idx = */ 0, /* set_write = */ false, tlb);
> > + if (likely(nr_ptes == 1)) {
>
> Are there any numbers for this optimization?
Yes, see the cover letter and the testing done by both myself, Luke and David.
> While I am all for optimizing the common
> case, it seems unfair to penalize the uncommon one here. Why is nr_ptes > 1 such an
> exotic use case (specially today)?
It's less common on most architectures due to having no real incentive for
enabling mTHP, thus having no anonymous pages with order > 0 (that aren't
PMD_ORDER and thus PMD mapped). This leaves you with pagecache folios (that may
trivially be larger), but that depends on RA and the filesystem itself (e.g
btrfs does not support large folios at all). But I would be extremely
surprised if there's a regression (not in the noise) on the order > 0 case,
as it effectively does more work per iteration (and per my measurements you
easily get order >= 3 on ext4 folios, up to maybe around order-7).
> ie: How does this change affect the program in
> b9bf6c2872c ("mm: refactor MM_CP_PROT_NUMA skipping case into new function"),
That's the series I'm "fixing" to restore performance on order-0.
--
Pedro
next prev parent reply other threads:[~2026-04-07 8:21 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-02 14:16 [PATCH v3 0/2] mm/mprotect: micro-optimization work Pedro Falcato
2026-04-02 14:16 ` [PATCH v3 1/2] mm/mprotect: move softleaf code out of the main function Pedro Falcato
2026-04-07 9:58 ` Vlastimil Babka (SUSE)
2026-04-02 14:16 ` [PATCH v3 2/2] mm/mprotect: special-case small folios when applying write permissions Pedro Falcato
2026-04-02 14:21 ` Pedro Falcato
2026-04-02 18:29 ` Andrew Morton
2026-04-06 8:28 ` Pedro Falcato
2026-04-07 0:50 ` Davidlohr Bueso
2026-04-07 8:21 ` Pedro Falcato [this message]
2026-04-07 12:31 ` Vlastimil Babka (SUSE)
2026-04-07 14:01 ` Pedro Falcato
2026-04-02 18:33 ` [PATCH v3 0/2] mm/mprotect: micro-optimization work Andrew Morton
2026-04-06 8:29 ` Pedro Falcato
2026-04-06 9:09 ` David Hildenbrand (arm)
2026-04-06 17:38 ` Andrew Morton
2026-04-07 10:08 ` Lorenzo Stoakes (Oracle)
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=jumu4avqtfpf5334cddblhn7xawryviqmxqavxhctpgvtrv7nz@wczfgh3zdq6x \
--to=pfalcato@suse.de \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=dave@stgolabs.net \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=jannh@google.com \
--cc=jhladky@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=luyang@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox