From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
LKML <linux-kernel@vger.kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Steven Rostedt <rostedt@goodmis.org>, Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH 0/2] rcu: Fix series of spurious RCU softirqs
Date: Thu, 25 Nov 2010 16:35:30 +0800 [thread overview]
Message-ID: <4CEE1FD2.7040707@cn.fujitsu.com> (raw)
In-Reply-To: <20101125073857.GB2538@nowhere>
On 11/25/2010 03:38 PM, Frederic Weisbecker wrote:
> On Thu, Nov 25, 2010 at 11:42:34AM +0800, Lai Jiangshan wrote:
>> On 11/24/2010 08:31 AM, Frederic Weisbecker wrote:
>>> Hi,
>>>
>>> I've observed some not so unfrequent series of spurious rcu
>>> softirqs, sometimes happening at each ticks for a random
>>> while.
>>>
>>> These patches aims at fixing them.
>>>
>>> Thanks.
>>>
>>> Frederic Weisbecker (2):
>>> rcu: Don't chase unnecessary quiescent states after extended grace periods
>>> rcu: Stop checking quiescent states after grace period completion from remote
>>>
>>
>> If we ensure rdp->gpnum >= rdp->completed is always true, the problems as
>> you described will not be existed. Or maybe I misunderstand you.
>>
>> rdp->gpnum >= rdp->completed is a very important guarantee I think.
>> (In my RCURING, it is guaranteed.) I'm afraid there are some other
>> problems still hidden if it is not guaranteed.
>>
>> so I recommend: (code is better than words)
>>
>> diff --git a/kernel/rcutree.c b/kernel/rcutree.c
>> index d5bc439..af4e87a 100644
>> --- a/kernel/rcutree.c
>> +++ b/kernel/rcutree.c
>> @@ -648,6 +648,13 @@ __rcu_process_gp_end(struct rcu_state *rsp, struct rcu_node *rnp, struct rcu_dat
>>
>> /* Remember that we saw this grace-period completion. */
>> rdp->completed = rnp->completed;
>> +
>> + /* Ensure ->gpnum >= ->completed after NO_HZ */
>> + if (unlikely(rnp->completed - rdp->gpnum > 0
>> + || rdp->gpnum - rnp->gpnum > 0)) {
>> + rdp->gpnum = rnp->completed;
>> + rdp->qs_pending = 0;
>
>
> That's an alternative to my first patch yeah.
Since rdp->gpnum >= rdp->completed is guaranteed.
your second patch is not needed, the problem is also fixed.
if rnp->gpnum == rnp->completed, rcu_report_qs_rdp() will not be called.
it is because rdp->qs_pending == 0 when rnp->gpnum == rnp->completed.
And if rdp->gpnum >= rdp->completed
> must be a guarantee outside the rnp lock, then it's certainly better because
> the lock is relaxed between rcu_process_gp_end() and note_new_gpnum(), and
> both values are async in this lockless frame.
>
> But perhaps this shouldn't touch rdp->qs_pending:
if rdp->gpnum == rnp->completed, it means we don't need a qs for rdp->gpnum,
it is completed. so we must set rdp->qs_pending = 0;
when we really need a qs, rdp->qs_pending will be fixed in note_new_gp_new().
>
> "if (rnp->completed > rdp->gpnum || rdp->gpnum > rnp->gpnum)" is not
> a guarantee that we don't need to find quiescent states.
>
> but rnp->completed == rnp->gpnum would provide that guarantee.
> That said, note_new_gp_new() would fix the value of rdp->qs_pending.
>
> Thanks.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
next prev parent reply other threads:[~2010-11-25 8:49 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-24 0:31 [PATCH 0/2] rcu: Fix series of spurious RCU softirqs Frederic Weisbecker
2010-11-24 0:31 ` [PATCH 1/2] rcu: Don't chase unnecessary quiescent states after extended grace periods Frederic Weisbecker
2010-11-24 0:58 ` Paul E. McKenney
2010-11-24 2:29 ` Frederic Weisbecker
2010-11-24 2:33 ` Frederic Weisbecker
2010-11-24 6:22 ` Paul E. McKenney
2010-11-24 13:48 ` Frederic Weisbecker
2010-11-24 14:42 ` Paul E. McKenney
2010-11-24 15:45 ` Frederic Weisbecker
2010-11-24 16:15 ` Paul E. McKenney
2010-11-24 17:38 ` Frederic Weisbecker
2010-11-24 18:20 ` Paul E. McKenney
2010-11-24 20:22 ` Paul E. McKenney
2010-11-24 20:45 ` Frederic Weisbecker
2010-11-24 21:19 ` Paul E. McKenney
2010-11-24 21:50 ` Frederic Weisbecker
2010-11-24 22:42 ` Frederic Weisbecker
2010-11-25 14:56 ` Paul E. McKenney
2010-11-26 14:06 ` Frederic Weisbecker
2010-11-29 23:06 ` Paul E. McKenney
2010-11-24 0:31 ` [PATCH 2/2] rcu: Stop checking quiescent states after grace period completion from remote Frederic Weisbecker
2010-11-24 1:03 ` Paul E. McKenney
2010-11-25 3:42 ` [PATCH 0/2] rcu: Fix series of spurious RCU softirqs Lai Jiangshan
2010-11-25 7:38 ` Frederic Weisbecker
2010-11-25 8:35 ` Lai Jiangshan [this message]
2010-11-25 9:27 ` Frederic Weisbecker
2010-11-25 14:58 ` 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=4CEE1FD2.7040707@cn.fujitsu.com \
--to=laijs@cn.fujitsu.com \
--cc=a.p.zijlstra@chello.nl \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulmck@linux.vnet.ibm.com \
--cc=rostedt@goodmis.org \
--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.