From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Josh Triplett <josh@joshtriplett.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>,
LKML <linux-kernel@vger.kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Subject: Re: [PATCH] rcu: Only pin GP kthread when full dynticks is actually used
Date: Fri, 13 Jun 2014 15:49:26 -0700 [thread overview]
Message-ID: <20140613224926.GW4581@linux.vnet.ibm.com> (raw)
In-Reply-To: <20140613211034.GA10651@jtriplet-mobl1>
On Fri, Jun 13, 2014 at 02:10:35PM -0700, Josh Triplett wrote:
> On Fri, Jun 13, 2014 at 01:48:22PM -0700, Paul E. McKenney wrote:
> > On Fri, Jun 13, 2014 at 09:44:41AM -0700, Josh Triplett wrote:
> > > On Fri, Jun 13, 2014 at 06:21:32PM +0200, Frederic Weisbecker wrote:
> > > > On Fri, Jun 13, 2014 at 09:16:30AM -0700, Paul E. McKenney wrote:
> > > > > > Is it because we have dynticks CPUs staying too long in the kernel without
> > > > > > taking any quiescent states? Are we perhaps missing some rcu_user_enter() or
> > > > > > things?
> > > > >
> > > > > Sort of the former, but combined with the fact that in-kernel CPUs still
> > > > > need scheduling-clock interrupts for RCU to make progress. I could
> > > > > move this to RCU's context-switch hook, but that could be very bad for
> > > > > workloads that do lots of context switching.
> > > >
> > > > Or I can restart the tick if the CPU stays in the kernel for too long without
> > > > a tick. I think that's what we were doing before but we removed that because
> > > > we never implemented it correctly (we sent scheduler IPI that did nothing...)
> > >
> > > I wonder if timer slack would make sense here: when you have at least
> > > one RCU callback pending, set a timer with a huge amount of timer slack,
> > > and cancel it if you end up handling the callback via a trip through the
> > > scheduler.
> >
> > But in this case, we need the tick even if the current CPU has no callbacks
> > because it might be in an RCU read-side critical section.
>
> Don't we handle that case via the slowpath of rcu_read_unlock, and a
> flag set via IPI? ("Oh, that CPU has taken too long to note a quiescent
> state; send it an IPI to set the special flag that makes unlock do the
> work.")
There was once such logic on the force-quiescent-state path, and making
that handle this new case was my first proposal. As Frederic pointed
out, that change requires rcu_needs_cpu()'s cooperation, because otherwise
the CPU will take the IPI, see that it still has but one runnable task,
and then keep its scheduling-clock interrupt off.
The thing that involves rcu_read_unlock_special() is a flag set
by the scheduling-clock interrupt, which doesn't help here. Also,
if a CPU stays in the kernel for a very long time without passing
through any RCU read-side critical sections, there is nothing that
rcu_read_unlock_special() can do to help.
Thanx, Paul
next prev parent reply other threads:[~2014-06-13 22:49 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-13 0:16 [PATCH] rcu: Only pin GP kthread when full dynticks is actually used Frederic Weisbecker
2014-06-13 1:24 ` Paul E. McKenney
2014-06-13 1:35 ` Paul E. McKenney
2014-06-13 12:47 ` Frederic Weisbecker
2014-06-13 15:52 ` Paul E. McKenney
2014-06-13 16:00 ` Frederic Weisbecker
2014-06-13 16:16 ` Paul E. McKenney
2014-06-13 16:21 ` Frederic Weisbecker
2014-06-13 16:44 ` Josh Triplett
2014-06-13 20:48 ` Paul E. McKenney
2014-06-13 21:10 ` Josh Triplett
2014-06-13 22:49 ` Paul E. McKenney [this message]
2014-06-13 23:10 ` Frederic Weisbecker
2014-06-13 23:27 ` Paul E. McKenney
2014-06-13 23:39 ` Frederic Weisbecker
2014-06-14 5:06 ` Paul E. McKenney
2014-06-14 11:26 ` Paul E. McKenney
2014-06-14 13:10 ` Frederic Weisbecker
2014-06-14 14:29 ` Paul E. McKenney
2014-06-14 13:05 ` Frederic Weisbecker
2014-06-13 20:49 ` Paul E. McKenney
2014-06-13 23:13 ` Frederic Weisbecker
2014-06-13 23:22 ` Paul E. McKenney
2014-06-13 2:05 ` Paul E. McKenney
2014-06-13 12:55 ` Frederic Weisbecker
2014-06-13 15:55 ` Paul E. McKenney
2014-06-13 16:03 ` Frederic Weisbecker
2014-06-13 16:20 ` Paul E. McKenney
2014-06-13 16:10 ` Paul E. McKenney
2014-06-13 12:42 ` Frederic Weisbecker
2014-06-13 15:58 ` Paul E. McKenney
2014-06-13 16:09 ` Frederic Weisbecker
2014-06-13 16:23 ` 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=20140613224926.GW4581@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=fweisbec@gmail.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=rostedt@goodmis.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 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.