rcu.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Neeraj Upadhyay <neeraju@codeaurora.org>
To: paulmck@kernel.org
Cc: josh@joshtriplett.org, rostedt@goodmis.org,
	mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com,
	joel@joelfernandes.org, rcu@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rcu/tree: Force quiescent state on callback overload
Date: Tue, 23 Jun 2020 11:49:38 +0530	[thread overview]
Message-ID: <fdfa6bce-e566-2b04-6be5-e80492a8ae98@codeaurora.org> (raw)
In-Reply-To: <20200622225356.GT9247@paulmck-ThinkPad-P72>

Hi Paul,

On 6/23/2020 4:23 AM, Paul E. McKenney wrote:
> On Mon, Jun 22, 2020 at 09:16:24AM +0530, Neeraj Upadhyay wrote:
>> Hi Paul,
>>
>> On 6/22/2020 8:43 AM, Paul E. McKenney wrote:
>>> On Mon, Jun 22, 2020 at 01:30:31AM +0530, Neeraj Upadhyay wrote:
>>>> Hi Paul,
>>>>
>>>> On 6/22/2020 1:20 AM, Paul E. McKenney wrote:
>>>>> On Mon, Jun 22, 2020 at 12:07:27AM +0530, Neeraj Upadhyay wrote:
>>>>>> On callback overload, we want to force quiescent state immediately,
>>>>>> for the first and second fqs. Enforce the same, by including
>>>>>> RCU_GP_FLAG_OVLD flag, in fqsstart check.
>>>>>>
>>>>>> Signed-off-by: Neeraj Upadhyay <neeraju@codeaurora.org>
>>>>>
>>>>> Good catch!
>>>>>
>>>>> But what did you do to verify that this change does the right thing?
>>>>>
>>>>> 						Thanx, Paul
>>>>>
>>>>
>>>> I haven't done a runtime verification of this code path; I posted this,
>>>> based on review of this code.
>>>
>>> My concern is that under overload, the FQS scans would happen continuously
>>> rather than accelerating only the first such scan in a given grace period.
>>> This would of course result in a CPU-bound grace-period kthread, which
>>> users might not be all that happy with.
>>>
>>> Or am I missing something subtle that prevents this?
>>
>> Looks like under overload, only the first and second scans are accelerated?
>>
>>      gf = 0;
>>      if (first_gp_fqs) {
>>           first_gp_fqs = false;
>>            gf = rcu_state.cbovld ? RCU_GP_FLAG_OVLD : 0;
>>      }
> 
> Very good, it does sound like you understand this, and it matches my
> analysis and passes light testing, so I queued this one.  I did improve
> the commit log, please check below.  The added detail is helpful to people
> (including ourselves, by the way) who might need to look at this commit
> some time in the future.
> 

Thanks; patch looks good; I will try to put more efforts on commit log
for future patches.

> If you have an x86 system lying around, running rcutorture is quite
> straightforward.  Non-x86 systems can also run rcutorture, if nothing
> else by using modprobe and rmmod as described here:
> 
> https://paulmck.livejournal.com/57769.html
> 
> The scripting described in the latter part of this document has worked
> on ARMv8 and PowerPC, and might still work for all I know.

I will set it up at my end; the livejournal is pretty detailed! Thanks
for sharing this!


Thanks
Neeraj

> 
> 						Thanx, Paul
> 
> ------------------------------------------------------------------------
> 
> commit 9482524d7dd0aea5d32a6efa2979223eea07c029
> Author: Neeraj Upadhyay <neeraju@codeaurora.org>
> Date:   Mon Jun 22 00:07:27 2020 +0530
> 
>      rcu/tree: Force quiescent state on callback overload
>      
>      On callback overload, it is necessary to quickly detect idle CPUs,
>      and rcu_gp_fqs_check_wake() checks for this condition.  Unfortunately,
>      the code following the call to this function does not repeat this check,
>      which means that in reality no actual quiescent-state forcing, instead
>      only a couple of quick and pointless wakeups at the beginning of the
>      grace period.
>      
>      This commit therefore adds a check for the RCU_GP_FLAG_OVLD flag in
>      the post-wakeup "if" statement in rcu_gp_fqs_loop().
>      
>      Signed-off-by: Neeraj Upadhyay <neeraju@codeaurora.org>
>      Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
> 
> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index d0988a1..6226bfb 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c
> @@ -1865,7 +1865,7 @@ static void rcu_gp_fqs_loop(void)
>   			break;
>   		/* If time for quiescent-state forcing, do it. */
>   		if (!time_after(rcu_state.jiffies_force_qs, jiffies) ||
> -		    (gf & RCU_GP_FLAG_FQS)) {
> +		    (gf & (RCU_GP_FLAG_FQS | RCU_GP_FLAG_OVLD))) {
>   			trace_rcu_grace_period(rcu_state.name, rcu_state.gp_seq,
>   					       TPS("fqsstart"));
>   			rcu_gp_fqs(first_gp_fqs);
> 

-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a 
member of the Code Aurora Forum, hosted by The Linux Foundation

  reply	other threads:[~2020-06-23  6:19 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-21 18:37 [PATCH] rcu/tree: Force quiescent state on callback overload Neeraj Upadhyay
2020-06-21 19:50 ` Paul E. McKenney
2020-06-21 20:00   ` Neeraj Upadhyay
2020-06-22  3:13     ` Paul E. McKenney
2020-06-22  3:46       ` Neeraj Upadhyay
2020-06-22 22:53         ` Paul E. McKenney
2020-06-23  6:19           ` Neeraj Upadhyay [this message]
2020-06-23 15:42 ` Joel Fernandes
2020-06-23 16:29   ` 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=fdfa6bce-e566-2b04-6be5-e80492a8ae98@codeaurora.org \
    --to=neeraju@codeaurora.org \
    --cc=jiangshanlai@gmail.com \
    --cc=joel@joelfernandes.org \
    --cc=josh@joshtriplett.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=paulmck@kernel.org \
    --cc=rcu@vger.kernel.org \
    --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;
as well as URLs for NNTP newsgroup(s).