[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190402094320.GM11158@hirez.programming.kicks-ass.net>
Date: Tue, 2 Apr 2019 11:43:20 +0200
From: Peter Zijlstra <peterz@...radead.org>
To: Waiman Long <longman@...hat.com>
Cc: Alex Kogan <alex.kogan@...cle.com>, linux@...linux.org.uk,
mingo@...hat.com, will.deacon@....com, arnd@...db.de,
linux-arch@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org, tglx@...utronix.de, bp@...en8.de,
hpa@...or.com, x86@...nel.org, steven.sistare@...cle.com,
daniel.m.jordan@...cle.com, dave.dice@...cle.com,
rahul.x.yadav@...cle.com
Subject: Re: [PATCH v2 3/5] locking/qspinlock: Introduce CNA into the slow
path of qspinlock
On Mon, Apr 01, 2019 at 10:36:19AM -0400, Waiman Long wrote:
> On 03/29/2019 11:20 AM, Alex Kogan wrote:
> > +config NUMA_AWARE_SPINLOCKS
> > + bool "Numa-aware spinlocks"
> > + depends on NUMA
> > + default y
> > + help
> > + Introduce NUMA (Non Uniform Memory Access) awareness into
> > + the slow path of spinlocks.
> > +
> > + The kernel will try to keep the lock on the same node,
> > + thus reducing the number of remote cache misses, while
> > + trading some of the short term fairness for better performance.
> > +
> > + Say N if you want absolute first come first serve fairness.
> > +
>
> The patch that I am looking for is to have a separate
> numa_queued_spinlock_slowpath() that coexists with
> native_queued_spinlock_slowpath() and
> paravirt_queued_spinlock_slowpath(). At boot time, we select the most
> appropriate one for the system at hand.
Agreed; and until we have static_call, I think we can abuse the paravirt
stuff for this.
By the time we patch the paravirt stuff:
check_bugs()
alternative_instructions()
apply_paravirt()
we should already have enumerated the NODE topology and so nr_node_ids()
should be set.
So if we frob pv_ops.lock.queued_spin_lock_slowpath to
numa_queued_spin_lock_slowpath before that, it should all get patched
just right.
That of course means the whole NUMA_AWARE_SPINLOCKS thing depends on
PARAVIRT_SPINLOCK, which is a bit awkward...
Powered by blists - more mailing lists