Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Lorenzo Stoakes (ARM)" <ljs@kernel.org>
To: Yang Shi <yang@os.amperecomputing.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	 "Christoph Lameter (Ampere)" <cl@gentwo.org>,
	"David Hildenbrand (Arm)" <david@kernel.org>,
	 Mark Rutland <mark.rutland@arm.com>,
	Ryan Roberts <ryan.roberts@arm.com>,
	dennis@kernel.org,  tj@kernel.org, urezki@gmail.com,
	catalin.marinas@arm.com, will@kernel.org,
	 akpm@linux-foundation.org, hca@linux.ibm.com, gor@linux.ibm.com,
	agordeev@linux.ibm.com,  linux-mm@kvack.org,
	linux-arm-kernel@lists.infradead.org,
	 linux-kernel@vger.kernel.org, Jason Gunthorpe <jgg@nvidia.com>
Subject: Re: [RFC v2 PATCH 0/16] Optimize this_cpu_*() ops for non-x86 (ARM64 for this series)
Date: Wed, 5 Aug 2026 08:52:14 +0100	[thread overview]
Message-ID: <anLmaVE5PSh6qmNz@lucifer> (raw)
In-Reply-To: <69f4cd9c-bd6c-4e5d-b8d1-a7be8408a57a@os.amperecomputing.com>

On Tue, Aug 04, 2026 at 02:51:54PM -0700, Yang Shi wrote:
>
>
> On 8/4/26 10:23 AM, Lorenzo Stoakes (ARM) wrote:
> > On Tue, Aug 04, 2026 at 09:30:08AM -0700, Linus Torvalds wrote:
> > > On Tue, 4 Aug 2026 at 09:27, Christoph Lameter (Ampere) <cl@gentwo.org> wrote:
> > > > We certainly do not want to replicate that approach. We are using the per
> > > > cpu page tables to avoid address calculations in the VM that other
> > > > platforms can do with a segment override.
> > > Right, and I said that that's ok as long as it's a internal
> > > architecture thing. Not a "this is how the VM works".
> > >
> > > Because people really have wanted to make it a "this is how the VM
> > > works" thing. And that is very much what I object to.
> > Well :) it fundamentally changes how mm works - now we have a whole new set of
> > kernel page tables and PGD's that we have to think about.
> >
> > And the series either tries to hack changes that fundamentally alter how
> > vmalloc works or will add its own duplicative kernel page table code to do the
> > same kind of thing.
>
> I don't think this series fundamentally alter how vmalloc works IMHO.
> vmalloc still works in the same way and the page tables share the same
> contents (except local percpu area), it just needs to sync up kernel page
> tables when the top level is changed. This is not new, x86 has been doing so
> for years, see arch_sync_kernel_mappings(). The patch just added the
> implementation for arm64.

Your patch fundamentally changes how vmalloc works (!init_mm) as I pointed out
in the patch.

Your response was essentially 'OK I'll duplicate the code' which was not really
encouraging.

So either you have a variant of vmalloc that works on a brand new type of kernel
page table mapping, or you have _yet more_ duplicative kernel page table code,
explicitly the kind of code that has caused latent races and issues that I've
very recently had to address.

People have repeatedly treated the ordinary or garden variety kernel page tables
as 'never go away, nobody else touches' and rolled their own
walking/manipulation code which I'm now having to fix up, so I'm really not in
favour of going down that road again.

For instance, there's a contract that kernel mapping manipulation and race
resolution _has_ to happen on init_mm.mmap_lock. I'm not sure exactly how that
will interact with the per CPU page table concept.

arch_sync_kernel_mappings() and friends are different - that's about
synchronising kernel mappings across process PGDs, you're proposing an _entirely
distinct_ set of kernel page tables.

Core mm really does have to worry about this stuff even if only one arch
implements them.

>
> >
> > So now core mm has to worry about TLB coherency and synchronisation, how this
> > might interact with things like page table isolation, and a lot of other
> > headaches (and I'm not really convinced they've been thought through here).
>
> I don't think this series changed how TLB is sync'ed either. When we
> invalidate TLB entries for kernel (i.e. vmalloc area), the TLBI is sent to
> all CPUs, it is unchanged.

The v2 change log which was a laundry list of 'I didn't think about X' (which is
understandable - this stuff is hard) really doesn't fill me with confidence that
you've thought everything through.

And inevitably you have to worry about TLB synchronisation of these page tables,
as you're essentially inventing a new class of page tables that have different
semantics from everything else.

>
> The series does change how percpu area is setup for ARM64, but this is
> already sort of architecture dependent.

The diffstat disagrees with you :) you are changing core percpu and mm for this.

>
> >
> > IOW - breaking fundamental assumptions about kernel page tables is inherently a
> > whole-VM change (See [0] for instance for an example of what can go wrong).
> >
> > If Christoph + Yang can provide compelling data that advocates for this change
> > AND the core mm and arm64 communities agree to move forward with this, then
> > things are different.
>
> We shared some benchmark data in the cover letter. Kernel build is a quite
> common benchmark used by kernel developers. Specjbb and MySQL benchmark
> results are considered important benchmarks as well. I wish I could run
> benchmark on more ARM64 cpus from other vendors, but I do have limited
> access to other hardware.

I understand that and saw them (thanks for that). But can you also run them
against Mark's series?

>
> >
> > However, I think the best approach here is to find the least invasive way of
> > limiting the change to the architecture itself.
> >
> > Mark has put forward an approach that eliminates the exact overhead that this
> > series aims to address but does so without having to fundamentally alter core
> > mm assumptions (v2 posted at [1]).
> >
> > So that seems very clearly to be a better alternative to me.
> >
> > Ultimately we need mm and arm64 maintainer agreement on the way forwards (or in
> > the case of a truly isolated arm64 solution, arm64 maintainer agreement).
> >
> > The LSF session was not encouraging ([2]) and as an mm maintainer I'm not at all
> > happy with this myself, nor does the arm64 community seem all that enthused so I
> > would against gently suggest to Christoph to be a little more open-minded about
> > the the proposed alternative which he seems to have dismissed out of hand.
>
> Nobody disagreed Mark's approach also achieved good result, we just thought
> the series can do better. I agree there is always trade off between gain and
> cost, this is why we are seeking more usecases although there are different
> opinions.

I'm glad you raised tradeoffs, absolutely agree :)

Your proposal incurs high costs in terms of maintenance headaches, so it's not
'which is theoretically quicker based on instruction count' (a poor metric
anyway), but rather an assessment of overall RoI.

And every series must be considered on its own merits, nothing is guaranteed to
be taken.

Let's see how the alternative stacks up based on data please.

>
> Thanks,
> Yang
>
> >
> > >                Linus
> > --
> > Cheers, Lorenzo
> >
> > [0]:https://lore.kernel.org/linux-mm/20260723-series-vmap-race-fix-v6-0-8cc77dcc0018@kernel.org/
> > [1]:https://lore.kernel.org/linux-arm-kernel/20260804170503.3513916-1-mark.rutland@arm.com/
> > [2]:https://lwn.net/Articles/1073395/
>

--
Cheers, Lorenzo


  parent reply	other threads:[~2026-08-05  7:52 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-15 18:04 [RFC v2 PATCH 0/16] Optimize this_cpu_*() ops for non-x86 (ARM64 for this series) Yang Shi
2026-07-15 18:04 ` [PATCH 01/16] drivers: arch_numa: move percpu set up code to arch Yang Shi
2026-07-15 18:04 ` [PATCH 02/16] arm64: kconfig: make percpu related configs not depend on NUMA Yang Shi
2026-07-15 18:04 ` [PATCH 03/16] mm: pgalloc: introduce {pud|pmd}_populate_sync() Yang Shi
2026-07-15 18:04 ` [PATCH 04/16] vmalloc: pass in pgd pointer for vmap{__vunmap}_range_noflush() Yang Shi
2026-07-29  9:32   ` Lorenzo Stoakes (ARM)
2026-08-03 19:12     ` Yang Shi
2026-08-04 13:47       ` Lorenzo Stoakes (ARM)
2026-07-15 18:04 ` [PATCH 05/16] arm64: mm: enable percpu kernel page table Yang Shi
2026-07-15 18:04 ` [PATCH 06/16] arm64: mm: defined {pud|pmd}_populate_sync() Yang Shi
2026-07-15 18:04 ` [PATCH 07/16] arm64: mm: sync percpu page table for memory hotplug/unplug Yang Shi
2026-07-15 18:04 ` [PATCH 08/16] arm64: kasan: sync up kasan shadow area page table Yang Shi
2026-07-15 18:04 ` [PATCH 09/16] arm64: mm: define percpu virtual space area Yang Shi
2026-07-15 18:04 ` [PATCH 10/16] mm: percpu: prepare to use dedicated percpu area Yang Shi
2026-07-15 18:04 ` [PATCH 11/16] arm64: mm: map local percpu first chunk Yang Shi
2026-07-15 18:04 ` [PATCH 12/16] mm: percpu: set up first chunk and reserve chunk Yang Shi
2026-07-15 18:04 ` [PATCH 13/16] arm64: mm: introduce __per_cpu_local_off Yang Shi
2026-07-15 18:04 ` [PATCH 14/16] mm: percpu: allocate and free local percpu vm area Yang Shi
2026-07-15 18:04 ` [PATCH 15/16] arm64: kconfig: select HAVE_LOCAL_PER_CPU_MAP Yang Shi
2026-07-15 18:04 ` [PATCH 16/16] arm64: percpu: use local percpu for this_cpu_*() APIs Yang Shi
2026-07-16 13:23 ` [RFC v2 PATCH 0/16] Optimize this_cpu_*() ops for non-x86 (ARM64 for this series) Ryan Roberts
2026-07-21 19:08   ` Mark Rutland
2026-07-21 23:20   ` Yang Shi
2026-07-22  9:36     ` Mark Rutland
2026-07-27 21:10       ` Yang Shi
2026-07-27 22:06       ` Christoph Lameter (Ampere)
2026-07-29  9:28         ` David Hildenbrand (Arm)
2026-08-04 14:15           ` Lorenzo Stoakes (ARM)
2026-08-04 14:21             ` Lorenzo Stoakes (ARM)
2026-08-04 14:40               ` Jason Gunthorpe
2026-08-04 18:06                 ` Matthew Wilcox
2026-08-04 18:16                   ` Jason Gunthorpe
2026-08-04 15:21             ` Linus Torvalds
2026-08-04 16:15               ` Christoph Lameter (Ampere)
2026-08-04 16:30                 ` Linus Torvalds
2026-08-04 16:54                   ` David Hildenbrand (Arm)
2026-08-04 17:01                   ` Linus Torvalds
2026-08-04 17:32                     ` Lorenzo Stoakes (ARM)
2026-08-04 21:40                       ` Christoph Lameter (Ampere)
2026-08-04 21:48                         ` David Hildenbrand (Arm)
2026-08-04 21:56                           ` Christoph Lameter (Ampere)
2026-08-04 22:01                             ` David Hildenbrand (Arm)
2026-08-05  8:16                         ` Lorenzo Stoakes (ARM)
2026-08-04 17:23                   ` Lorenzo Stoakes (ARM)
2026-08-04 17:28                     ` Linus Torvalds
2026-08-04 21:51                     ` Yang Shi
2026-08-04 22:05                       ` David Hildenbrand (Arm)
2026-08-04 22:35                         ` Christoph Lameter (Ampere)
2026-08-05  6:11                           ` David Hildenbrand (Arm)
2026-08-05 14:48                           ` Mark Rutland
2026-08-05  7:52                       ` Lorenzo Stoakes (ARM) [this message]
2026-08-06 17:15                     ` Will Deacon
2026-08-06 17:31                       ` Lorenzo Stoakes (ARM)
2026-08-04 16:19             ` Christoph Lameter (Ampere)
2026-08-04 16:47               ` David Hildenbrand (Arm)
2026-08-04 21:25                 ` Christoph Lameter (Ampere)
2026-08-04 21:47                   ` David Hildenbrand (Arm)
2026-08-04 22:01                     ` Christoph Lameter (Ampere)
2026-08-05  6:12                       ` David Hildenbrand (Arm)
2026-08-05  8:45                     ` Heiko Carstens
2026-08-05 11:10                 ` David Laight
2026-08-05 14:53         ` Mark Rutland
2026-07-30  6:06     ` [RFC v2 PATCH 0/16] Optimize this_cpu_*() ops for non-x86 (ARM64 for this series)~ Mete Durlu

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=anLmaVE5PSh6qmNz@lucifer \
    --to=ljs@kernel.org \
    --cc=agordeev@linux.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=catalin.marinas@arm.com \
    --cc=cl@gentwo.org \
    --cc=david@kernel.org \
    --cc=dennis@kernel.org \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=jgg@nvidia.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mark.rutland@arm.com \
    --cc=ryan.roberts@arm.com \
    --cc=tj@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=urezki@gmail.com \
    --cc=will@kernel.org \
    --cc=yang@os.amperecomputing.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