From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
jiangshanlai@gmail.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
josh@joshtriplett.org, tglx@linutronix.de, rostedt@goodmis.org,
dhowells@redhat.com, edumazet@google.com, fweisbec@gmail.com,
oleg@redhat.com, will.deacon@arm.com
Subject: Re: [PATCH tip/core/rcu 4/5] sys_membarrier: Add expedited option
Date: Tue, 25 Jul 2017 16:59:36 -0700 [thread overview]
Message-ID: <20170725235936.GC3730@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170725215510.GD28975@worktop>
On Tue, Jul 25, 2017 at 11:55:10PM +0200, Peter Zijlstra wrote:
> On Tue, Jul 25, 2017 at 02:19:26PM -0700, Paul E. McKenney wrote:
> > On Tue, Jul 25, 2017 at 10:24:51PM +0200, Peter Zijlstra wrote:
> > > On Tue, Jul 25, 2017 at 12:36:12PM -0700, Paul E. McKenney wrote:
> > >
> > > > There are a lot of variations, to be sure. For whatever it is worth,
> > > > the original patch that started this uses mprotect():
> > > >
> > > > https://github.com/msullivan/userspace-rcu/commit/04656b468d418efbc5d934ab07954eb8395a7ab0
> > >
> > > FWIW that will not work on s390 (and maybe others), they don't in fact
> > > require IPIs for remote TLB invalidation.
> >
> > Nor will it for ARM. Nor (I think) for PowerPC. But that is in fact
> > what people are doing right now in real life. Hence my renewed interest
> > in sys_membarrier().
>
> People always do crazy stuff, but what surprised me is that such s patch
> got merged in urcu even though its known broken for a number of
> architectures.
It did not get merged into urcu. It is instead used directly by a
number of people for a number of concurrent algorithms.
> > But it would not be hard for userspace code to force IPIs by repeatedly
> > awakening higher-priority threads that sleep immediately after being
> > awakened, right?
>
> RT tasks are not readily available to !root, and the user might have
> been constrained to a subset of available CPUs.
So non-idle non-nohz CPUs never get IPIed for wakeups of SCHED_OTHER
threads?
> > > Well, I'm not sure there is an easy means of doing machine wide IPIs for
> > > !root out there. This would be a first.
> > >
> > > Something along the lines of:
> > >
> > > void dummy(void *arg)
> > > {
> > > /* IPIs are assumed to be serializing */
> > > }
> > >
> > > void ipi_mm(struct mm_struct *mm)
> > > {
> > > cpumask_var_t cpus;
> > > int cpu;
> > >
> > > zalloc_cpumask_var(&cpus, GFP_KERNEL);
> > >
> > > for_each_cpu(cpu, mm_cpumask(mm)) {
> > > struct task_struct *p;
> > >
> > > /*
> > > * If the current task of @cpu isn't of this @mm, then
> > > * it needs a context switch to become one, which will
> > > * provide the ordering we require.
> > > */
> > > rcu_read_lock();
> > > p = task_rcu_dereference(&cpu_curr(cpu));
> > > if (p && p->mm == mm)
> > > __cpumask_set_cpu(cpu, cpus);
> > > rcu_read_unlock();
> > > }
> > >
> > > on_each_cpu_mask(cpus, dummy, NULL, 1);
> > > }
> > >
> > > Would appear to be minimally invasive and only shoot at CPUs we're
> > > currently running our process on, which greatly reduces the impact.
> >
> > I am good with this approach as well, and I do very much like that it
> > avoids IPIing CPUs that aren't running our process (at least in the
> > common case). But don't we also need added memory ordering? It is
> > sort of OK to IPI a CPU that just now switched away from our process,
> > but not so good to miss IPIing a CPU that switched to our process just
> > a little before sys_membarrier().
>
> My thinking was that if we observe '!= mm' that CPU will have to do a
> context switch in order to make it true. That context switch will
> provide the ordering we're after so all is well.
>
> Quite possible there's a hole in, but since I'm running on fumes someone
> needs to spell it out for me :-)
This would be the https://marc.info/?l=linux-kernel&m=126349766324224&w=2
URL below.
Which might or might not still be applicable.
> > I was intending to base this on the last few versions of a 2010 patch,
> > but maybe things have changed:
> >
> > https://marc.info/?l=linux-kernel&m=126358017229620&w=2
> > https://marc.info/?l=linux-kernel&m=126436996014016&w=2
> > https://marc.info/?l=linux-kernel&m=126601479802978&w=2
> > https://marc.info/?l=linux-kernel&m=126970692903302&w=2
> >
> > Discussion here:
> >
> > https://marc.info/?l=linux-kernel&m=126349766324224&w=2
> >
> > The discussion led to acquiring the runqueue locks, as there was
> > otherwise a need to add code to the scheduler fastpaths.
>
> TL;DR.. that's far too much to trawl through.
So we re-derive it from first principles instead? ;-)
> > Some architectures are less precise than others in tracking which
> > CPUs are running a given process due to ASIDs, though this is
> > thought to be a non-problem:
> >
> > https://marc.info/?l=linux-arch&m=126716090413065&w=2
> > https://marc.info/?l=linux-arch&m=126716262815202&w=2
> >
> > Thoughts?
>
> Yes, there are architectures that only accumulate bits in mm_cpumask(),
> with the additional check to see if the remote task belongs to our MM
> this should be a non-issue.
Makes sense.
Thanx, Paul
next prev parent reply other threads:[~2017-07-25 23:59 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-24 21:57 [PATCH tip/core/rcu 0/5] Related non-RCU updates Paul E. McKenney
2017-07-24 21:58 ` [PATCH tip/core/rcu 1/5] module: Fix pr_fmt() bug for header use of printk Paul E. McKenney
2017-07-24 21:58 ` [PATCH tip/core/rcu 2/5] init_task: Remove redundant INIT_TASK_RCU_TREE_PREEMPT() macro Paul E. McKenney
2017-07-24 21:58 ` [PATCH tip/core/rcu 3/5] EXPERIMENTAL sched: Allow migrating kthreads into online but inactive CPUs Paul E. McKenney
2017-07-24 21:58 ` [PATCH tip/core/rcu 4/5] sys_membarrier: Add expedited option Paul E. McKenney
2017-07-25 4:27 ` Boqun Feng
2017-07-25 16:24 ` Paul E. McKenney
2017-07-25 13:21 ` Mathieu Desnoyers
2017-07-25 16:48 ` Paul E. McKenney
2017-07-25 16:33 ` Peter Zijlstra
2017-07-25 16:49 ` Paul E. McKenney
2017-07-25 16:59 ` Peter Zijlstra
2017-07-25 17:17 ` Paul E. McKenney
2017-07-25 18:53 ` Peter Zijlstra
2017-07-25 19:36 ` Paul E. McKenney
2017-07-25 20:24 ` Peter Zijlstra
2017-07-25 21:19 ` Paul E. McKenney
2017-07-25 21:55 ` Peter Zijlstra
2017-07-25 22:39 ` Mathieu Desnoyers
2017-07-25 22:50 ` Mathieu Desnoyers
2017-07-26 0:01 ` Paul E. McKenney
2017-07-26 7:46 ` Peter Zijlstra
2017-07-26 15:42 ` Paul E. McKenney
2017-07-26 18:01 ` Mathieu Desnoyers
2017-07-26 18:30 ` Paul E. McKenney
2017-07-26 20:37 ` Mathieu Desnoyers
2017-07-26 21:11 ` Paul E. McKenney
2017-07-27 1:45 ` Paul E. McKenney
2017-07-27 12:39 ` Mathieu Desnoyers
2017-07-27 14:44 ` Paul E. McKenney
2017-07-27 10:24 ` Peter Zijlstra
2017-07-27 14:52 ` Paul E. McKenney
2017-07-27 8:53 ` Peter Zijlstra
2017-07-27 10:09 ` Peter Zijlstra
2017-07-27 10:22 ` Will Deacon
2017-07-27 13:14 ` Paul E. McKenney
2017-07-25 23:59 ` Paul E. McKenney [this message]
2017-07-26 7:41 ` Peter Zijlstra
2017-07-26 15:41 ` Paul E. McKenney
2017-07-27 8:30 ` Peter Zijlstra
2017-07-27 13:08 ` Paul E. McKenney
2017-07-27 13:49 ` Peter Zijlstra
2017-07-27 14:32 ` Paul E. McKenney
2017-07-27 14:36 ` Peter Zijlstra
2017-07-27 14:46 ` Paul E. McKenney
2017-07-27 13:55 ` Boqun Feng
2017-07-27 14:16 ` Paul E. McKenney
2017-07-27 14:29 ` Boqun Feng
2017-07-27 14:36 ` Paul E. McKenney
2017-07-27 14:41 ` Will Deacon
2017-07-27 14:47 ` Boqun Feng
2017-07-27 14:55 ` Paul E. McKenney
2017-07-27 13:56 ` Peter Zijlstra
2017-07-27 15:19 ` Peter Zijlstra
2017-07-26 9:36 ` Will Deacon
2017-07-26 15:46 ` Paul E. McKenney
2017-07-27 10:14 ` Peter Zijlstra
2017-07-27 12:56 ` Paul E. McKenney
2017-07-27 13:37 ` Peter Zijlstra
2017-07-27 14:33 ` Paul E. McKenney
2017-07-24 21:58 ` [PATCH tip/core/rcu 5/5] EXP: sched/cputime: Fix using smp_processor_id() in preemptible Paul E. McKenney
2017-07-24 22:01 ` Wanpeng Li
2017-07-24 22:29 ` Paul E. McKenney
2017-07-31 22:51 ` [PATCH tip/core/rcu 0/5] Related non-RCU updates Paul E. McKenney
2017-07-31 22:53 ` [PATCH v2 tip/core/rcu 1/4] module: Fix pr_fmt() bug for header use of printk Paul E. McKenney
2017-07-31 22:53 ` [PATCH v2 tip/core/rcu 2/4] init_task: Remove redundant INIT_TASK_RCU_TREE_PREEMPT() macro Paul E. McKenney
2017-07-31 22:53 ` [PATCH v2 tip/core/rcu 3/4] sched: Allow migrating kthreads into online but inactive CPUs Paul E. McKenney
2017-07-31 22:53 ` [PATCH v2 tip/core/rcu 4/4] membarrier: Expedited private command Paul E. McKenney
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=20170725235936.GC3730@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=will.deacon@arm.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.