From: Wolfgang Grandegger <wg@grandegger.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Luotao Fu <l.fu@pengutronix.de>,
LKML <linux-kernel@vger.kernel.org>,
RT <linux-rt-users@vger.kernel.org>, Ingo Molnar <mingo@elte.hu>,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: 2.6.24-rc8-rt1: Strange latencies on mpc5200 powerpc - RCU issue?
Date: Tue, 01 Jul 2008 18:11:42 +0200 [thread overview]
Message-ID: <486A573E.60107@grandegger.com> (raw)
In-Reply-To: <Pine.LNX.4.58.0807011036510.26650@gandalf.stny.rr.com>
Steven Rostedt wrote:
> On Tue, 1 Jul 2008, Wolfgang Grandegger wrote:
>> I continue this thread because it's still not understood why enabling
>> CONFIG_RCU_TRACE is necessary to get reasonable latencies on the
>> MPC5200. It might also explain, why I get much worse latencies with
>> 2.6.25.8-rt7.
>
> Have you tried turning on ftrace?
Not yet.
>
>> To recapitulate, with CONFIG_RCU_TRACE enabled, cyclictest reports max.
>> latencies of approx. 130 us with 2.6.24.4-rt4 on my MPC5200 PowerPC
>> board. If I disable it, the latency goes up to 600 us. Obviously, the
>> trace_mark() calls in rcupreempt*.c have some positive impact on the
>> latency. I narrowed down, that the 2 calls in __rcu_preempt_boost() in
>> rcupreempt-boost.c are the important one:
>>
>> void __rcu_preempt_unboost(void)
>> {
>> struct task_struct *curr = current;
>> struct rcu_boost_dat *rbd;
>> int prio;
>> unsigned long flags;
>>
>> trace_mark(unboost_called, "NULL");
To make it clear: If I just comment out the line above and ...
>>
>> /* if not boosted, then ignore */
>> if (likely(!rcu_is_boosted(curr)))
>> return;
>
> I wonder if the "likely" is faulty on the PPC code generation. Have you
> tried removing that "likely" statement.
>
>> /*
>> * Need to be very careful with NMIs.
>> * If we take the lock and an NMI comes in
>> * and it may try to unboost us if curr->rcub_rbdp
>> * is still set. So we zero it before grabbing the lock.
>> * But this also means that we might be boosted again
>> * so the boosting code needs to be aware of this.
>> */
>> rbd = curr->rcub_rbdp;
>> curr->rcub_rbdp = NULL;
>>
>> /*
>> * Now an NMI might have came in after we grab
>> * the below lock. This check makes sure that
>> * the NMI doesn't try grabbing the lock
>> * while we already have it.
>> */
>> if (unlikely(!rbd))
>> return;
>
> Actually, remove all "likely" and "unlikely". The marker code could be
> making it work better. But still, this shouldn't cause 600us latencies.
>
>> spin_lock_irqsave(&rbd->rbs_lock, flags);
>> /*
>> * It is still possible that an NMI came in
>> * between the "is_boosted" check and setting
>> * the rcu_rbdp to NULL. This would mean that
>> * the NMI already dequeued us.
>> */
>> if (unlikely(!rcu_is_boosted(curr)))
>> goto out;
>>
>> list_del_init(&curr->rcub_entry);
>>
>> trace_mark(unboosted, "NULL");
.. this one as well, then the latency goes *up* to 600us. The first one
has more influence, though.
>>
>> curr->rcu_prio = MAX_PRIO;
>>
>> spin_lock(&curr->pi_lock);
>> prio = rt_mutex_getprio(curr);
>> task_setprio(curr, prio);
>>
>> curr->rcub_rbdp = NULL;
>>
>> spin_unlock(&curr->pi_lock);
>> out:
>> spin_unlock_irqrestore(&rbd->rbs_lock, flags);
>> }
>>
>> With them and all other trace_mark() calls commented out, the latency is
>> still OK. The first one has a bigger impact.
>>
>> In 2.6.25.8-rt7, trace_mark() is not used any more but a function
>> incrementing the corresponding counter directly and I suspect that's the
>> reason why I'm seeing high latencies with both, CONFIG_RCU_TRACE enabled
>> and disabled.
>>
>> I hope this observation sheds some light on the issue.
>
> It is still a mystery to me. Maybe looking at the different assembly
> outputs with the different configurations.
There seems to be something in trace_mark() keeping latency low:
http://lxr.linux.no/linux+v2.6.24.4/include/linux/marker.h#L52
I will follow your suggestions.
Wolfgang.
next prev parent reply other threads:[~2008-07-01 16:11 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-17 4:27 2.6.24-rc8-rt1 Steven Rostedt
2008-01-17 5:26 ` 2.6.24-rc8-rt1 Mark Knecht
2008-01-17 10:13 ` 2.6.24-rc8-rt1 Wolfgang Grandegger
2008-01-17 12:46 ` 2.6.24-rc8-rt1 Luotao Fu
2008-01-17 16:17 ` 2.6.24-rc8-rt1 Daniel Walker
2008-01-17 18:17 ` 2.6.24-rc8-rt1 Wolfgang Grandegger
2008-01-17 18:30 ` 2.6.24-rc8-rt1 Daniel Walker
2008-01-17 18:44 ` 2.6.24-rc8-rt1 Steven Rostedt
2008-01-17 18:45 ` 2.6.24-rc8-rt1 Steven Rostedt
2008-01-17 20:01 ` 2.6.24-rc8-rt1 Wolfgang Grandegger
2008-01-17 18:46 ` 2.6.24-rc8-rt1 Wolfgang Grandegger
2008-01-17 21:11 ` 2.6.24-rc8-rt1 Robert Schwebel
2008-01-17 21:36 ` 2.6.24-rc8-rt1 Wolfgang Grandegger
2008-01-23 14:53 ` 2.6.24-rc8-rt1: Strange latencies on mpc5200 powerpc Luotao Fu
2008-01-23 15:50 ` Daniel Walker
2008-01-23 16:36 ` Wolfgang Grandegger
2008-01-24 10:53 ` Wolfgang Grandegger
[not found] ` <20080124112847.GE4776@unix.sh>
[not found] ` <47987D73.8090904@grandegger.com>
2008-01-24 13:49 ` Luis Claudio R. Goncalves
2008-01-28 15:11 ` Luotao Fu
2008-01-28 15:38 ` Wolfgang Grandegger
2008-01-29 12:13 ` 2.6.24-rc8-rt1: Strange latencies on mpc5200 powerpc - RCU issue? Luotao Fu
2008-01-29 13:38 ` Wolfgang Grandegger
2008-01-30 1:07 ` Paul E. McKenney
2008-01-30 8:18 ` Wolfgang Grandegger
2008-01-30 10:22 ` Paul E. McKenney
2008-01-30 10:45 ` Wolfgang Grandegger
2008-01-30 10:57 ` Paul E. McKenney
2008-01-30 11:15 ` Luotao Fu
2008-07-01 14:27 ` Wolfgang Grandegger
2008-07-01 14:27 ` Wolfgang Grandegger
2008-07-01 15:11 ` Steven Rostedt
2008-07-01 16:11 ` Wolfgang Grandegger [this message]
2008-07-01 21:11 ` Luotao Fu
2008-07-02 11:03 ` Wolfgang Grandegger
2008-07-06 0:42 ` Steven Rostedt
2008-07-06 9:41 ` Wolfgang Grandegger
2008-07-08 15:08 ` Luotao Fu
2008-07-08 19:43 ` Wolfgang Grandegger
2008-07-08 19:43 ` Wolfgang Grandegger
2008-07-09 12:53 ` Luotao Fu
2008-07-09 13:15 ` Wolfgang Grandegger
2008-07-09 14:52 ` Luotao Fu
2008-07-10 7:50 ` Wolfgang Grandegger
2008-07-10 7:50 ` Wolfgang Grandegger
2008-08-01 21:09 ` Paul E. McKenney
2008-08-01 21:09 ` Paul E. McKenney
2008-08-05 15:40 ` Wolfgang Grandegger
2008-07-02 8:09 ` Wolfgang Grandegger
2008-07-06 0:39 ` Steven Rostedt
2008-07-06 9:34 ` Wolfgang Grandegger
2008-01-30 11:22 ` Wolfgang Grandegger
2008-01-17 19:57 ` 2.6.24-rc8-rt1 Mariusz Kozlowski
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=486A573E.60107@grandegger.com \
--to=wg@grandegger.com \
--cc=l.fu@pengutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@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.