The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Byungchul Park <byungchul.park@lge.com>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: josh@joshtriplett.org, rostedt@goodmis.org,
	mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rcu: Avoid unnecessary contention of rcu node lock
Date: Thu, 17 Nov 2016 12:38:39 +0900	[thread overview]
Message-ID: <20161117033839.GE2279@X58A-UD3R> (raw)
In-Reply-To: <20161116192935.GL3612@linux.vnet.ibm.com>

On Wed, Nov 16, 2016 at 11:29:35AM -0800, Paul E. McKenney wrote:
> On Wed, Nov 16, 2016 at 01:49:31PM +0900, Byungchul Park wrote:
> > On Wed, Nov 09, 2016 at 05:57:13PM +0900, Byungchul Park wrote:
> > > It's unnecessary to try to print stacks of blocked tasks in the case
> > > that ndetected == 0. Furthermore, calling rcu_print_detail_task_stall()
> > > causes to acquire rnp locks as many times as the number of leaf nodes
> > > plus one for root node. It's unnecessary at all in the case.
> 
> Please accept my apologies for the delay -- the last couple of weeks
> were quite busy, and I needed to give this the attention that it
> deserves.
> 
> > Hello,
> > 
> > I have two questions. Could you answer them?
> > 
> > 1. What do you think about this patch?
> 
> This patch would be a performance optimization if ndetected were often
> zero at the end of the loop in print_other_cpu_stall().  However, for
> this to happen, the stall would have to be almost exactly 21 seconds
> in duration, which seems unlikely and which also proves to be unlikely
> in actual practice.

Hello paul,

Yes, it's true with current code.

> 
> If there was any performance or readability downside whatsoever for
> this patch, I would of course need to reject it.  However, it appears
> to be free of any performance degradation and could be said to slightly
> increase readability.
> 
> I took the patch and reworked the commit log as shown below.
> 
> That said, it is quite rare for me to accept a patch with such a low
> probability of reducing overhead.

Thank you very much ;)

Thanks,
Byungchul

> 
> > 2. Is there a tree where patches about rcu are pulled into, before
> >    being pulled into mainline tree?
> >    For example, tip tree in case of scheduler patches.
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
> 
> This is pulled into -tip, as Steven said.
> 
> 							Thanx, Paul
> 
> > It would be appriciated if you answer them.
> > 
> > Thank you in advance,
> > Byungchul
> 
> ------------------------------------------------------------------------
> 
> commit 9183b76a762e0e73fd362cf2563f6492ae7fc193
> Author: Byungchul Park <byungchul.park@lge.com>
> Date:   Wed Nov 9 17:57:13 2016 +0900
> 
>     rcu: Only dump stalled-tasks stacks if there was a real stall
>     
>     The print_other_cpu_stall() function currently unconditionally invokes
>     rcu_print_detail_task_stall().  This is OK because if there was a stall
>     sufficient to cause print_other_cpu_stall() to be invoked, that stall
>     is very likely to persist through the entire print_other_cpu_stall()
>     execution.  However, if the stall did not persist, the variable ndetected
>     will be zero, and that variable is already tested in an "if" statement.
>     Therefore, this commit moves the call to rcu_print_detail_task_stall()
>     under that pre-existing "if" to improve readability, with a very rare
>     reduction in overhead.
>     
>     Signed-off-by: Byungchul Park <byungchul.park@lge.com>
>     [ paulmck: Reworked commit log. ]
>     Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> 
> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index 2c399db6df6e..b11d00ad1213 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c
> @@ -1504,6 +1504,9 @@ static void print_other_cpu_stall(struct rcu_state *rsp, unsigned long gpnum)
>  	       (long)rsp->gpnum, (long)rsp->completed, totqlen);
>  	if (ndetected) {
>  		rcu_dump_cpu_stacks(rsp);
> +
> +		/* Complain about tasks blocking the grace period. */
> +		rcu_print_detail_task_stall(rsp);
>  	} else {
>  		if (READ_ONCE(rsp->gpnum) != gpnum ||
>  		    READ_ONCE(rsp->completed) == gpnum) {
> @@ -1520,9 +1523,6 @@ static void print_other_cpu_stall(struct rcu_state *rsp, unsigned long gpnum)
>  		}
>  	}
>  
> -	/* Complain about tasks blocking the grace period. */
> -	rcu_print_detail_task_stall(rsp);
> -
>  	rcu_check_gp_kthread_starvation(rsp);
>  
>  	panic_on_rcu_stall();

      reply	other threads:[~2016-11-17  3:42 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-09  8:57 [PATCH] rcu: Avoid unnecessary contention of rcu node lock Byungchul Park
2016-11-16  4:49 ` Byungchul Park
2016-11-16 13:59   ` Steven Rostedt
2016-11-16 19:29   ` Paul E. McKenney
2016-11-17  3:38     ` Byungchul Park [this message]

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=20161117033839.GE2279@X58A-UD3R \
    --to=byungchul.park@lge.com \
    --cc=jiangshanlai@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=paulmck@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox