From: Peter Zijlstra <peterz@infradead.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
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
Subject: Re: [PATCH tip/core/rcu 4/5] sys_membarrier: Add expedited option
Date: Tue, 25 Jul 2017 22:24:51 +0200 [thread overview]
Message-ID: <20170725202451.GC28975@worktop> (raw)
In-Reply-To: <20170725193612.GW3730@linux.vnet.ibm.com>
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.
> > Which are those? I thought we significantly reduced those with the nohz
> > full work. Most IPI uses now first check if a CPU actually needs the IPI
> > before sending it IIRC.
>
> If the task being awakened is higher priority than the task currently
> running on a given CPU, that CPU still gets an IPI, right? Or am I
> completely confused?
I was thinking of things like on_each_cpu_cond().
> Unlike userspace preempt disable, in this case we get the abuse anyway
> via existing mechanisms, as in they are already being abused. If we
> provide a mechanism for this purpose, we at least have the potential
> for handling the abuse, for example:
>
> o "Defanging" sys_membarrier() on systems that are sensitive to
> latency. For example, this patch can be defanged by booting
> with the rcupdate.rcu_normal=1 kernel boot parameter, which
> causes requests for expedited grace periods to instead use
> normal grace periods.
>
> o Detecting and responding to abuse. For example, perhaps if there
> are more than (say) 50 expedited sys_membarrier()s within a given
> jiffy, the excess sys_membarrier()s are non-expedited.
>
> o Batching optimizations allow large number of concurrent requests
> to be handled with fewer grace periods -- and both normal and
> expedited grace periods already do exactly this.
>
> This horse is already out, so trying to shut the gate won't be effective.
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.
next prev parent reply other threads:[~2017-07-25 20:25 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 [this message]
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
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=20170725202451.GC28975@worktop \
--to=peterz@infradead.org \
--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=paulmck@linux.vnet.ibm.com \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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;
as well as URLs for NNTP newsgroup(s).