From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: rostedt@goodmis.org, tglx@linutronix.de
Cc: paulmck@linux.vnet.ibm.com, linux-kernel@vger.kernel.org,
mingo@elte.hu, dipankar@in.ibm.com, akpm@linux-foundation.org,
mathieu.desnoyers@polymtl.ca, josh@joshtriplett.org,
dvhltc@us.ibm.com, niv@us.ibm.com, peterz@infradead.org,
Valdis.Kletnieks@vt.edu, dhowells@redhat.com, avi@redhat.com,
mtosatti@redhat.com, torvalds@linux-foundation.org
Subject: Re: [PATCH RFC tip/core/rcu 1/3] rcu: The Bloatwatch Edition, v7
Date: Tue, 27 Oct 2009 15:26:53 +0800 [thread overview]
Message-ID: <4AE6A0BD.1080102@cn.fujitsu.com> (raw)
In-Reply-To: <1255488586.7113.3094.camel@gandalf.stny.rr.com>
Steven Rostedt wrote:
> But isn't the tick_nohz_stop_sched_tick have several exits?
>
> void tick_nohz_stop_sched_tick(int inidle)
> {
> [..]
>
> if (!inidle && !ts->inidle)
> goto end;
>
> ts->inidle = 1;
>
> [..]
>
> if (!ts->tick_stopped) {
> [..]
> ts->tick_stopped = 1;
> ts->idle_jiffies = last_jiffies;
> rcu_enter_nohz();
> }
> [..]
>
>
> So I'm not sure calling tick_nohz_stop_sched_tick twice equals calling
> rcu_enter_nohz twice.
>
Hi, tglx, steven,
(Thank to tglx for helping me at the Japan Linux Symposium)
I found something weird about NO_HZ, maybe I misunderstood the codes.
see this flow:
cpu idle
enter nohz
cpu halt
---->interrupt happens
irq_enter()
we don't reprogram the clock device #1
irq_exit()
tick_nohz_stop_sched_tick(inidle = 0)
something disallow this cpu reenter nohz #2
we don't reprogram the clock device #3
<----interrupt return
cpu halt again and wait interrupt for a long time than expected #4
exit nohz
#1 tick_nohz_kick_tick() is disabled in the current mainline kernel,
so we don't calls tick_nohz_restart(ts, now) when irq_enter()
static void tick_nohz_kick_tick(int cpu)
{
#if 0 <------------- here
/* Switch back to 2.6.27 behaviour */
struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
ktime_t delta, now;
if (!ts->tick_stopped)
return;
/*
* Do not touch the tick device, when the next expiry is either
* already reached or less/equal than the tick period.
*/
now = ktime_get();
delta = ktime_sub(hrtimer_get_expires(&ts->sched_timer), now);
if (delta.tv64 <= tick_period.tv64)
return;
tick_nohz_restart(ts, now); <----------- here
#endif
}
#2 When rcu_needs_cpu() or printk_needs_cpu()
returns true then tick_nohz_stop_sched_tick() will just return.
#3 And we don't reprogram the clock device when #2 happens
#4 So we may be in nohz for a long time than expected, but actually
we have some work to do. (rcu, printk... etc)
So I think, we need to reprogram the clock device and restart the tick
when #2 happens, or there is something that I have misunderstood.
Thanks, Lai
> -- Steve
>
>>> So I do believe that rcu_enter_nohz() and rcu_exit_nohz() are in fact
>>> invoked in pairs. One strange thing about this is that the idle loop
>>> first invokes rcu_enter_nohz(), then invokes rcu_exit_nohz(), while
>>> an interrupt handler first invokes rcu_irq_enter() and then invokes
>>> rcu_irq_exit(). So the idle loop enters dyntick-idle mode and then
>>> leaves it, while an interrupt handler might leave dyntick-idle mode and
>>> then re-enter it.
>>>
>>> Or am I still missing something here?
>>>
>>> Thanx, Paul
>>>
>>>
>
>
>
next prev parent reply other threads:[~2009-10-27 7:27 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-09 22:49 [PATCH RFC tip/core/rcu 0/3] Tiny RCU and expedited SRCU Paul E. McKenney
2009-10-09 22:50 ` [PATCH RFC tip/core/rcu 1/3] rcu: The Bloatwatch Edition, v7 Paul E. McKenney
2009-10-12 9:29 ` Lai Jiangshan
2009-10-12 16:40 ` Linus Torvalds
2009-10-12 17:30 ` Paul E. McKenney
2009-10-13 6:05 ` Lai Jiangshan
2009-10-13 7:44 ` Lai Jiangshan
2009-10-13 17:00 ` Paul E. McKenney
2009-10-14 0:37 ` Lai Jiangshan
2009-10-14 1:09 ` Paul E. McKenney
2009-10-14 2:05 ` Lai Jiangshan
2009-10-14 2:49 ` Steven Rostedt
2009-10-27 7:26 ` Lai Jiangshan [this message]
2009-10-27 19:56 ` Steven Rostedt
2009-10-14 2:52 ` Paul E. McKenney
2009-10-09 22:50 ` [PATCH RFC tip/core/rcu 2/3] rcu: Add synchronize_srcu_expedited() Paul E. McKenney
2009-10-09 22:50 ` [PATCH RFC tip/core/rcu 3/3] rcu: add synchronize_srcu_expedited() to the rcutorture test suite Paul E. McKenney
2009-10-10 3:47 ` [PATCH RFC tip/core/rcu 0/3] Tiny RCU and expedited SRCU Josh Triplett
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=4AE6A0BD.1080102@cn.fujitsu.com \
--to=laijs@cn.fujitsu.com \
--cc=Valdis.Kletnieks@vt.edu \
--cc=akpm@linux-foundation.org \
--cc=avi@redhat.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=dvhltc@us.ibm.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=mtosatti@redhat.com \
--cc=niv@us.ibm.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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.