All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Josh Triplett <josh@joshtriplett.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 09:20:26 -0700	[thread overview]
Message-ID: <20140613162026.GR4581@linux.vnet.ibm.com> (raw)
In-Reply-To: <20140613160318.GM6635@localhost.localdomain>

On Fri, Jun 13, 2014 at 06:03:20PM +0200, Frederic Weisbecker wrote:
> On Fri, Jun 13, 2014 at 08:55:48AM -0700, Paul E. McKenney wrote:
> > On Fri, Jun 13, 2014 at 02:55:45PM +0200, Frederic Weisbecker wrote:
> > > On Thu, Jun 12, 2014 at 07:05:54PM -0700, Paul E. McKenney wrote:
> > > > On Thu, Jun 12, 2014 at 06:24:32PM -0700, Paul E. McKenney wrote:
> > > > > On Fri, Jun 13, 2014 at 02:16:59AM +0200, Frederic Weisbecker wrote:
> > > > > > CONFIG_NO_HZ_FULL may be enabled widely on distros nowadays but actual
> > > > > > users should be a tiny minority, if actually any.
> > > > > > 
> > > > > > Also there is a risk that affining the GP kthread to a single CPU could
> > > > > > end up noticeably reducing RCU performances and increasing energy
> > > > > > consumption.
> > > > > > 
> > > > > > So lets affine the GP kthread only when nohz full is actually used
> > > > > > (ie: when the nohz_full= parameter is filled or CONFIG_NO_HZ_FULL_ALL=y)
> > > > > > 
> > > > > > Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
> > > > > > Cc: Josh Triplett <josh@joshtriplett.org>
> > > > > > Cc: Steven Rostedt <rostedt@goodmis.org>
> > > > > > Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
> > > > > > ---
> > > > > >  kernel/rcu/tree_plugin.h | 10 +++++++---
> > > > > >  1 file changed, 7 insertions(+), 3 deletions(-)
> > > > > > 
> > > > > > diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
> > > > > > index cbc2c45..726f52c 100644
> > > > > > --- a/kernel/rcu/tree_plugin.h
> > > > > > +++ b/kernel/rcu/tree_plugin.h
> > > > > > @@ -2843,12 +2843,16 @@ static bool rcu_nohz_full_cpu(struct rcu_state *rsp)
> > > > > >   */
> > > > > >  static void rcu_bind_gp_kthread(void)
> > > > > >  {
> > > > > > -#ifdef CONFIG_NO_HZ_FULL
> > > > > > -	int cpu = ACCESS_ONCE(tick_do_timer_cpu);
> > > > > > +	int cpu;
> > > > > > +
> > > > > > +	if (!tick_nohz_full_enabled())
> > > > > > +		return;
> > > > > > +
> > > > > > +	cpu = ACCESS_ONCE(tick_do_timer_cpu);
> > > > > > 
> > > > > >  	if (cpu < 0 || cpu >= nr_cpu_ids)
> > > > > >  		return;
> > > > > > +
> > > > > >  	if (raw_smp_processor_id() != cpu)
> > > > > >  		set_cpus_allowed_ptr(current, cpumask_of(cpu));
> > > > > > -#endif /* #ifdef CONFIG_NO_HZ_FULL */
> > > > > >  }
> > > > > 
> > > > > Hello, Frederic,
> > > > > 
> > > > > I have the following queued.  Shall I port yours on top of mine, or is
> > > > > there an issue with mine?
> > > > 
> > > > OK, I suppose I should show you what it looks like ported on top of mine.
> > > 
> > > No need to keep my patch as long as yours goes in. It fixes all the issue.
> > > 
> > > > 
> > > > I didn't understand the removal of "#ifdef CONFIG_NO_HZ_FULL", so I
> > > > left that.
> > > 
> > > Yeah that's because the:
> > > 
> > >       if (!tick_nohz_full_enabled())
> > >            return;
> > > 
> > > returns unconditionally if CONFIG_NO_HZ_FULL=n. So the whole function
> > > becomes dead code that should be detected and removed by gcc. So same
> > > result as with the ifdef.
> > 
> > Well, that part of your patch is worthwhile, then!  And I do therefore
> > need to restructure to invoke tick_nohz_full_enabled() at the very
> > beginning of the function.
> 
> Well if no CPU is full dynticks, the sole effect of this is that the kthread
> will be re-affined globally... So no big issue.
> 
> Although that can make you spare a call to set_cpus_allowed_ptr(), which can
> be worthwile after all :)

Good point, I must keep the #ifdef, but can also add the call.

								Thanx, Paul

> > > > I also didn't understand how dumping the GP kthreads onto
> > > > a single CPU could affect energy efficiency all that much, so I omitted
> > > > that from the commit log.  If I am missing something, please enlighten me.
> > > 
> > > Because if the kthread is pinned to CPU 0 and a grace period is in progress,
> > > the kthread is going to disturb the CPU 0 regardless of its possibly deep sleep
> > > state. OTOH if the kthread is widely affine, it can be scheduled to idle CPUs
> > > that are less cold and thus wake them from less deep power state.
> > > 
> > > Well that all assuming that the scheduler takes care of these deep idle state.
> > > But I believe it does iirc...
> > 
> > My guess is that enough stuff gets dumped on CPU 0 to make this a non-issue,
> > but point taken nonetheless.
> 
> Ok.
> 


  reply	other threads:[~2014-06-13 16:20 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
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 [this message]
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=20140613162026.GR4581@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.