All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Amit Shah <amit.shah@redhat.com>
Cc: "Pranith Kumar" <pranith@gatech.edu>,
	LKML <linux-kernel@vger.kernel.org>,
	"Rik van Riel" <riel@redhat.com>,
	"Ingo Molnar" <mingo@kernel.org>,
	"Lai Jiangshan" <laijs@cn.fujitsu.com>,
	"Dipankar Sarma" <dipankar@in.ibm.com>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
	"Josh Triplett" <josh@joshtriplett.org>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Steven Rostedt" <rostedt@goodmis.org>,
	"David Howells" <dhowells@redhat.com>,
	"Eric Dumazet" <edumazet@google.com>,
	dvhart@linux.intel.com,
	"Frédéric Weisbecker" <fweisbec@gmail.com>,
	"Oleg Nesterov" <oleg@redhat.com>,
	"Silas Boyd-Wickizer" <sbw@mit.edu>
Subject: Re: [PATCH tip/core/rcu 1/2] rcu: Parallelize and economize NOCB kthread wakeups
Date: Wed, 27 Aug 2014 09:21:13 -0700	[thread overview]
Message-ID: <20140827162113.GA2663@linux.vnet.ibm.com> (raw)
In-Reply-To: <20140827044350.GD13052@grmbl.mre>

On Wed, Aug 27, 2014 at 10:13:50AM +0530, Amit Shah wrote:
> On (Sat) 23 Aug 2014 [03:43:38], Pranith Kumar wrote:
> > On Fri, Aug 22, 2014 at 5:53 PM, Paul E. McKenney
> > <paulmck@linux.vnet.ibm.com> wrote:
> > >
> > > Hmmm...  Please try replacing the synchronize_rcu() in
> > > __sysrq_swap_key_ops() with (say) schedule_timeout_interruptible(HZ / 10).
> > > I bet that gets rid of the hang.  (And also introduces a low-probability
> > > bug, but should be OK for testing.)
> > >
> > > The other thing to try is to revert your patch that turned my event
> > > traces into printk()s, then put an ftrace_dump(DUMP_ALL); just after
> > > the synchronize_rcu() -- that might make it so that the ftrace data
> > > actually gets dumped out.
> > >
> > 
> > I was able to reproduce this error on my Ubuntu 14.04 machine. I think
> > I found the root cause of the problem after several kvm runs.
> > 
> > The problem is that earlier we were waiting on nocb_head and now we
> > are waiting on nocb_leader_wake.
> > 
> > So there are a lot of nocb callbacks which are enqueued before the
> > nocb thread is spawned. This sets up nocb_head to be non-null, because
> > of which the nocb kthread used to wake up immediately after sleeping.
> > 
> > Now that we have switched to nocb_leader_wake, this is not being set
> > when there are pending callbacks, unless the callbacks overflow the
> > qhimark. The pending callbacks were around 7000 when the boot hangs.
> > 
> > So setting the qhimark using the boot parameter rcutree.qhimark=5000
> > is one way to allow us to boot past the point by forcefully waking up
> > the nocb kthread. I am not sure this is fool-proof.
> > 
> > Another option to start the nocb kthreads with nocb_leader_wake set,
> > so that it can handle any pending callbacks. The following patch also
> > allows us to boot properly.
> > 
> > Phew! Let me know if this makes any sense :)
> > 
> > diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
> > index 00dc411..4c397aa 100644
> > --- a/kernel/rcu/tree_plugin.h
> > +++ b/kernel/rcu/tree_plugin.h
> > @@ -2386,6 +2386,9 @@ static int rcu_nocb_kthread(void *arg)
> >         struct rcu_head **tail;
> >         struct rcu_data *rdp = arg;
> > 
> > +       if (rdp->nocb_leader == rdp)
> > +               rdp->nocb_leader_wake = true;
> > +
> >         /* Each pass through this loop invokes one batch of callbacks */
> >         for (;;) {
> >                 /* Wait for callbacks. */
> 
> Yes, this patch helps my case as well.

Very good!!!

Pranith, I can take this patch, but would you be willing to invert
the sense of ->nocb_leader_wake (e.g., call it ->nocb_leader_sleep or
some such)?  This field is only used in eight places in the source code.

The idea is that inverting the sense of the field allows the normal C
initialization of zero to properly initialize this field, plus it gets
rid of a few lines of code.

							Thanx, Paul


  reply	other threads:[~2014-08-27 16:21 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-23  7:43 [PATCH tip/core/rcu 1/2] rcu: Parallelize and economize NOCB kthread wakeups Pranith Kumar
2014-08-23 16:51 ` Paul E. McKenney
2014-08-24  0:26   ` Pranith Kumar
2014-08-24  3:23     ` Paul E. McKenney
2014-08-24  3:39       ` Pranith Kumar
2014-08-24 14:36         ` Paul E. McKenney
2014-08-27  4:43 ` Amit Shah
2014-08-27 16:21   ` Paul E. McKenney [this message]
2014-08-27 16:43     ` Pranith Kumar
2014-08-27 17:08       ` Paul E. McKenney
  -- strict thread matches above, loose matches on Subject: below --
2014-07-07 22:48 [PATCH tip/core/rcu 0/2] Callback-offloading changes for 3.17 Paul E. McKenney
2014-07-11 13:35 ` [PATCH tip/core/rcu 1/2] rcu: Parallelize and economize NOCB kthread wakeups Paul E. McKenney
2014-08-08  8:40   ` Amit Shah
2014-08-08 16:25     ` Paul E. McKenney
2014-08-08 17:37       ` Amit Shah
2014-08-08 18:18         ` Paul E. McKenney
2014-08-08 18:34           ` Amit Shah
2014-08-08 21:43             ` Paul E. McKenney
2014-08-08 21:46               ` Paul E. McKenney
2014-08-11  7:13                 ` Amit Shah
2014-08-11 16:28                   ` Paul E. McKenney
2014-08-11 19:41                     ` Amit Shah
2014-08-11 20:11                       ` Paul E. McKenney
2014-08-11 20:18                         ` Amit Shah
2014-08-11 20:34                           ` Paul E. McKenney
2014-08-12  3:45                             ` Paul E. McKenney
2014-08-12  5:33                               ` Amit Shah
2014-08-12 16:06                                 ` Paul E. McKenney
2014-08-12 21:39                                   ` Paul E. McKenney
2014-08-12 21:41                                     ` Paul E. McKenney
2014-08-12 21:44                                       ` Paul E. McKenney
2014-08-13  5:44                                       ` Amit Shah
2014-08-13 13:00                                         ` Paul E. McKenney
2014-08-13 14:18                                           ` Paul E. McKenney
2014-08-15  5:24                                           ` Amit Shah
2014-08-15 15:04                                             ` Paul E. McKenney
2014-08-18 17:53                                               ` Amit Shah
2014-08-19  4:01                                                 ` Paul E. McKenney
2014-08-22 12:24                                                   ` Amit Shah
2014-08-22 12:36                                                     ` Amit Shah
2014-08-22 12:56                                                       ` Amit Shah
2014-08-22 14:48                                                         ` Paul E. McKenney
2014-08-22 17:14                                                           ` Amit Shah
2014-08-22 17:37                                                             ` Amit Shah
2014-08-22 21:53                                                             ` Paul E. McKenney
2014-08-22 21:57                                                               ` Paul E. McKenney
2014-08-22 14:43                                                     ` Paul E. McKenney
2014-08-12  5:27                             ` Amit Shah
2014-08-12 16:08                               ` 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=20140827162113.GA2663@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=amit.shah@redhat.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=dvhart@linux.intel.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pranith@gatech.edu \
    --cc=riel@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=sbw@mit.edu \
    --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 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.