From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: "Damien Wyart" <damien.wyart@free.fr>,
"Peter Zijlstra" <a.p.zijlstra@chello.nl>,
"Mike Galbraith" <efault@gmx.de>,
"Frédéric Weisbecker" <fweisbec@gmail.com>,
"Rafael J. Wysocki" <rjw@sisk.pl>,
"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>,
"Kernel Testers List" <kernel-testers@vger.kernel.org>
Subject: Re: [Bug #12650] Strange load average and ksoftirqd behavior with 2.6.29-rc2-git1
Date: Mon, 16 Feb 2009 10:56:16 -0800 [thread overview]
Message-ID: <20090216185616.GB6785@linux.vnet.ibm.com> (raw)
In-Reply-To: <20090216160613.GA6785@linux.vnet.ibm.com>
On Mon, Feb 16, 2009 at 08:06:13AM -0800, Paul E. McKenney wrote:
> On Mon, Feb 16, 2009 at 02:21:51PM +0100, Ingo Molnar wrote:
> >
> > * Damien Wyart <damien.wyart@free.fr> wrote:
> >
> > > * Ingo Molnar <mingo@elte.hu> [090216 13:26]:
> > > > We do get 0x100 which is 1 << RCU_SOFTIRQ, i.e. the RCU softirq. Paul,
> > > > this indeed seems to be a CONFIG_TREE_RCU=y bug.
> > >
> > > > What is weird is that RCU_SOFTIRQ gets set again and again - but there's
> > > > no raise_softirq() calls. Could you please do a two-CPU trace too via:
> > >
> > > > echo 3 > /debug/tracing/tracing_cpumask
> > >
> > > > So that we can see what's happening on the other CPU?
> > >
> > > > Also, could you please apply the debug patch below (or update to the
> > > > very latest -tip tree), so that we get trace entries of softirq triggers
> > > > too?
> > >
> > > Ok, the new trace with these additional modifications is here:
> > > http://damien.wyart.free.fr/ksoftirqd_pb/trace_tip_2009.02.16_1300_ksoftirqd_pb_abstime_proc_mask3.txt.gz
> >
> > thanks.
> >
> > This confirms that SOFTIRQ_RCU gets raised here in the timer IRQ:
> >
> > 136.255963 | 0) sleep-2345 | | update_process_times() {
> > 136.255964 | 0) sleep-2345 | | account_process_tick() {
> > 136.255965 | 0) sleep-2345 | 0.779 us | account_system_time();
> > 136.255966 | 0) sleep-2345 | 2.262 us | }
> > 136.255967 | 0) sleep-2345 | | run_local_timers() {
> > 136.255968 | 0) sleep-2345 | 0.802 us | hrtimer_run_queues();
> > 136.255969 | 0) sleep-2345 | | raise_softirq() {
> > 136.255970 | 0) sleep-2345 | | raise_softirq_irqoff() {
> > 136.255971 | 0) sleep-2345 | | __raise_softirq_irqoff() {
> > 136.255972 | 0) sleep-2345 | | /* nr: 1 */
> > 136.255973 | 0) sleep-2345 | 2.194 us | }
> > 136.255974 | 0) sleep-2345 | 3.832 us | }
> > 136.255975 | 0) sleep-2345 | 5.491 us | }
> > 136.255976 | 0) sleep-2345 | 8.667 us | }
> > 136.255976 | 0) sleep-2345 | 0.792 us | rcu_pending();
> > 136.255978 | 0) sleep-2345 | | rcu_check_callbacks() {
> > 136.255979 | 0) sleep-2345 | 0.781 us | idle_cpu();
> > 136.255981 | 0) sleep-2345 | | raise_softirq() {
> > 136.255981 | 0) sleep-2345 | | raise_softirq_irqoff() {
> > 136.255982 | 0) sleep-2345 | | __raise_softirq_irqoff() {
> > 136.255983 | 0) sleep-2345 | | /* nr: 8 */
> > 136.255984 | 0) sleep-2345 | 1.555 us | }
> > 136.255984 | 0) sleep-2345 | 3.059 us | }
> > 136.255985 | 0) sleep-2345 | 4.594 us | }
> > 136.255986 | 0) sleep-2345 | 7.800 us | }
> > 136.255987 | 0) sleep-2345 | 0.737 us | printk_tick();
> >
> > again and again.
>
> Interesting...
>
> I will take a look!
The above sequence is more or less normal behavior -- the RCU softirq
handler rcu_process_callbacks() is being invoked once per tick, which
appears to be HZ=1000 or thereabouts. The system appears to be mostly
idle during this time period.
One oddity is that the _bh call to __rcu_process_callbacks() is invoking
force_quiescent_state() each time, and force_quiescent_state() isn't
doing anything. This is a possible mismatch between the conditions in
rcu_pending() and force_quiescent_state(), and I will look into this.
However, this sequence is consuming less than 10 microseconds per
millisecond, so cannot be the main cause of the softirq issues you
are seeing, though if there really is a mismatch, it needs to be fixed,
and I will attend to this.
The interesting portion of the trace is later on:
137.896992 | 1) ksoftir-2302 | | do_softirq() {
137.896993 | 1) ksoftir-2302 | | __do_softirq() {
137.896993 | 1) ksoftir-2302 | | /* #1 softirq pending: 00000100 */
137.896994 | 1) ksoftir-2302 | | /* #2 softirq pending: 00000000 */
137.896995 | 1) ksoftir-2302 | | rcu_process_callbacks() {
137.896995 | 1) ksoftir-2302 | | __rcu_process_callbacks() {
137.896996 | 1) ksoftir-2302 | 0.498 us | force_quiescent_state();
137.896997 | 1) ksoftir-2302 | 1.588 us | }
137.896997 | 1) ksoftir-2302 | | __rcu_process_callbacks() {
137.896998 | 1) ksoftir-2302 | 0.475 us | force_quiescent_state();
137.896999 | 1) ksoftir-2302 | | cpu_quiet() {
137.896999 | 1) ksoftir-2302 | 0.526 us | _spin_lock_irqsave();
137.897000 | 1) ksoftir-2302 | 0.511 us | _spin_unlock_irqrestore();
137.897001 | 1) ksoftir-2302 | 2.528 us | }
137.897002 | 1) ksoftir-2302 | 4.607 us | }
137.897002 | 1) ksoftir-2302 | 7.825 us | }
137.897003 | 1) ksoftir-2302 | 0.498 us | _local_bh_enable();
137.897004 | 1) ksoftir-2302 | + 11.430 us | }
137.897005 | 1) ksoftir-2302 | + 12.572 us | }
137.897005 | 1) ksoftir-2302 | 0.549 us | _cond_resched();
137.897006 | 1) ksoftir-2302 | 0.541 us | kthread_should_stop();
137.897007 | 1) ksoftir-2302 | | schedule() {
137.897008 | 1) ksoftir-2302 | | __schedule() {
137.897008 | 1) ksoftir-2302 | 0.514 us | _spin_lock_irq();
137.897009 | 1) ksoftir-2302 | 0.594 us | update_rq_clock();
137.897011 | 1) ksoftir-2302 | | deactivate_task() {
137.897011 | 1) ksoftir-2302 | | dequeue_task() {
137.897011 | 1) ksoftir-2302 | | dequeue_task_fair() {
137.897012 | 1) ksoftir-2302 | | update_curr() {
137.897012 | 1) ksoftir-2302 | | calc_delta_fair() {
137.897013 | 1) ksoftir-2302 | 0.506 us | calc_delta_mine();
137.897014 | 1) ksoftir-2302 | 1.528 us | }
137.897015 | 1) ksoftir-2302 | 2.563 us | }
137.897015 | 1) ksoftir-2302 | 0.513 us | hrtick_start_fair();
137.897019 | 1) ksoftir-2302 | 4.662 us | }
137.897019 | 1) ksoftir-2302 | 8.213 us | }
137.897020 | 1) ksoftir-2302 | 9.195 us | }
137.897020 | 1) ksoftir-2302 | 0.960 us | find_busiest_group();
137.897022 | 1) ksoftir-2302 | 0.493 us | msecs_to_jiffies();
137.897023 | 1) ksoftir-2302 | 0.511 us | put_prev_task_fair();
137.897024 | 1) ksoftir-2302 | | pick_next_task() {
137.897024 | 1) ksoftir-2302 | 0.481 us | pick_next_task_fair();
137.897025 | 1) ksoftir-2302 | 0.491 us | pick_next_task_rt();
137.897026 | 1) ksoftir-2302 | 0.474 us | pick_next_task_fair();
137.897027 | 1) ksoftir-2302 | 0.480 us | pick_next_task_idle();
137.897028 | 1) ksoftir-2302 | 4.516 us | }
137.897029 | 1) ksoftir-2302 | | perf_counter_task_sched_out() {
137.897029 | 1) ksoftir-2302 | | __perf_counter_sched_out() {
137.897030 | 1) ksoftir-2302 | 0.516 us | _spin_lock();
137.897031 | 1) ksoftir-2302 | 1.486 us | }
137.897031 | 1) ksoftir-2302 | 2.462 us | }
137.897032 | 1) ksoftir-2302 | 0.516 us | __lock_text_start();
137.897045 | ------------------------------------------
1) ksoftir-2302 => <idle>-0
------------------------------------------
1) <idle>-0 | | /* nr: 8 */
------------------------------------------
1) <idle>-0 => ksoftir-2302
------------------------------------------
137.897064 | 1) ksoftir-2302 | | finish_task_switch() {
137.897064 | 1) ksoftir-2302 | | perf_counter_task_sched_in() {
137.897065 | 1) ksoftir-2302 | 0.508 us | _spin_lock();
137.897066 | 1) ksoftir-2302 | 1.525 us | }
137.897066 | 1) ksoftir-2302 | 2.617 us | }
137.897067 | 1) ksoftir-2302 | + 58.928 us | }
137.897067 | 1) ksoftir-2302 | + 59.926 us | }
137.897068 | 1) ksoftir-2302 | | do_softirq() {
137.897068 | 1) ksoftir-2302 | | __do_softirq() {
137.897069 | 1) ksoftir-2302 | | /* #1 softirq pending: 00000100 */
137.897070 | 1) ksoftir-2302 | | /* #2 softirq pending: 00000000 */
137.897070 | 1) ksoftir-2302 | | rcu_process_callbacks() {
137.897071 | 1) ksoftir-2302 | | __rcu_process_callbacks() {
137.897071 | 1) ksoftir-2302 | | force_quiescent_state() {
137.897073 | 1) ksoftir-2302 | 1.575 us | }
137.897073 | 1) ksoftir-2302 | | __rcu_process_callbacks() {
137.897074 | 1) ksoftir-2302 | 0.474 us | force_quiescent_state();
137.897075 | 1) ksoftir-2302 | | cpu_quiet() {
137.897075 | 1) ksoftir-2302 | 0.526 us | _spin_lock_irqsave();
137.897076 | 1) ksoftir-2302 | 0.511 us | _spin_unlock_irqrestore();
137.897077 | 1) ksoftir-2302 | 2.532 us | }
137.897078 | 1) ksoftir-2302 | 4.632 us | }
137.897078 | 1) ksoftir-2302 | 7.815 us | }
137.897079 | 1) ksoftir-2302 | 0.501 us | _local_bh_enable();
137.897080 | 1) ksoftir-2302 | + 11.405 us | }
137.897080 | 1) ksoftir-2302 | + 12.542 us | }
Here the calls to rcu_process_callbacks() are only 75 microseconds apart,
so that this function is consuming more than 10% of a CPU. The strange
thing is that I don't see a raise_softirq() in between, though perhaps
it gets inlined or something that makes it invisible to ftrace.
Certainly rcu_process_callbacks() can re-invoke itself, for example,
when a large number of RCU callbacks has piled up. However, there are
only 29 calls to __call_rcu() over the entire time period, so that does
not appear to be the cause. Strangely enough, there appear to be no
calls to rcu_do_batch() over the full trace, but this is invoked
unconditionally from __rcu_process_callbacks(). So perhaps the trace
wasn't covering that function?
Whatever, this pattern continues for more than 300 milliseconds(!).
Would you be willing to enable CONFIG_RCU_TRACE and CONFIG_TREE_RCU,
reproduce this and send the output of the debugfs files rcu/rcudata
and rcu/rcuhier? The commands for this would be:
mkdir /debug || :
mount -t debugfs debugfs /debug
cat /debug/rcu/rcuhier
cat /debug/rcu/rcudata
I will try to reproduce locally as well.
Thanx, Paul
next prev parent reply other threads:[~2009-02-16 18:56 UTC|newest]
Thread overview: 131+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-14 20:35 2.6.29-rc5: Reported regressions from 2.6.28 Rafael J. Wysocki
2009-02-14 20:35 ` [Bug #12414] iwl4965 cannot use "ap auto" on latest 2.6.28/29? Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12444] X hangs following switch from radeonfb console - Bisected Rafael J. Wysocki
2009-02-16 17:52 ` Graham Murray
2009-02-16 21:52 ` Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12418] Repeated ioctl(4, 0x40046445, ..) loop in glxgears Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12419] possible circular locking dependency on i915 dma Rafael J. Wysocki
2009-02-16 3:50 ` Wang Chen
2009-02-14 20:38 ` [Bug #12490] ath5k related kernel panic in 2.6.29-rc1 Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12491] i915 lockdep warning Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12494] Sony backlight regression from 2.6.28 to 29-rc Rafael J. Wysocki
2009-02-17 10:51 ` Norbert Preining
2009-02-14 20:38 ` [Bug #12499] Problem with using bluetooth adaper connected to usb port Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12497] new barrier warnings in 2.6.29-rc1 Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12496] swsusp cannot find resume device (sometimes) Rafael J. Wysocki
2009-02-15 0:05 ` Arjan van de Ven
2009-02-15 14:23 ` Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12502] pipe_read oops on sh Rafael J. Wysocki
2009-02-15 0:23 ` Adrian McMenamin
2009-02-15 14:27 ` Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12551] end_request: I/O error, dev cciss/c0d0, sector 87435720 Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12510] 2.6.29-rc2 dies on startup Rafael J. Wysocki
2009-02-16 21:02 ` Ferenc Wagner
2009-02-16 21:12 ` Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12501] build bug in eeepc-laptop.c Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12609] v2.6.29-rc2 libata sff 32bit PIO regression Rafael J. Wysocki
2009-02-15 4:20 ` Larry Finger
2009-02-15 8:10 ` Jeff Garzik
2009-02-15 12:05 ` Sergei Shtylyov
2009-02-15 16:48 ` Hugh Dickins
2009-02-14 20:38 ` [Bug #12610] sync-Regression in 2.6.28.2? Rafael J. Wysocki
2009-02-21 17:56 ` Theodore Tso
2009-02-22 10:02 ` Rafael J. Wysocki
2009-02-23 4:35 ` Greg KH
2009-02-23 5:37 ` Theodore Tso
2009-02-23 16:54 ` [stable] " Greg KH
2009-02-14 20:38 ` [Bug #12574] possible circular locking dependency detected Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12571] Suspend-resume on Dell Latitude D410 newly broken in 2.6.29-rc* Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12613] [Suspend regression][DRM, RADEON] Rafael J. Wysocki
[not found] ` <4997E7D7.60205@numericable.fr>
2009-02-15 10:20 ` etienne
2009-02-14 20:38 ` [Bug #12615] boot hangs while bringing up gianfar ethernet Rafael J. Wysocki
2009-02-15 14:42 ` Peter Korsgaard
2009-02-15 21:08 ` Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12618] hackbench [pthread mode] regression with 2.6.29-rc3 Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12659] Failure to resume two Sandisk USB flash drives attached to a Belkin USB Busport Mobile (F5U022) Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12650] Strange load average and ksoftirqd behavior with 2.6.29-rc2-git1 Rafael J. Wysocki
2009-02-15 8:09 ` Damien Wyart
2009-02-15 9:00 ` Ingo Molnar
2009-02-15 9:51 ` Damien Wyart
2009-02-15 10:13 ` Ingo Molnar
2009-02-15 10:34 ` Damien Wyart
2009-02-15 10:41 ` Damien Wyart
2009-02-15 10:42 ` Damien Wyart
2009-02-15 10:43 ` Damien Wyart
2009-02-15 11:01 ` Ingo Molnar
2009-02-15 14:06 ` Frederic Weisbecker
2009-02-15 18:03 ` Damien Wyart
2009-02-15 19:18 ` Damien Wyart
2009-02-15 19:31 ` Ingo Molnar
2009-02-16 8:42 ` Damien Wyart
2009-02-16 9:21 ` Ingo Molnar
2009-02-16 10:49 ` Damien Wyart
2009-02-16 9:25 ` Ingo Molnar
2009-02-16 9:27 ` Ingo Molnar
2009-02-16 9:32 ` Ingo Molnar
2009-02-16 9:50 ` Ingo Molnar
2009-02-16 11:56 ` Damien Wyart
2009-02-16 12:26 ` Ingo Molnar
2009-02-16 13:02 ` Damien Wyart
2009-02-16 13:21 ` Ingo Molnar
2009-02-16 16:06 ` Paul E. McKenney
2009-02-16 18:56 ` Paul E. McKenney [this message]
2009-02-16 19:08 ` Frederic Weisbecker
2009-02-16 20:02 ` Frederic Weisbecker
2009-02-16 21:31 ` Paul E. McKenney
2009-02-16 20:09 ` Ingo Molnar
2009-02-16 22:39 ` Paul E. McKenney
2009-02-16 22:51 ` Paul E. McKenney
2009-02-17 9:46 ` Ingo Molnar
2009-02-17 14:01 ` Paul E. McKenney
2009-02-17 15:39 ` Damien Wyart
2009-02-17 16:05 ` Paul E. McKenney
2009-02-17 21:48 ` Ingo Molnar
2009-02-17 4:34 ` Frederic Weisbecker
2009-02-17 15:10 ` Paul E. McKenney
2009-02-17 16:00 ` Frederic Weisbecker
2009-02-17 22:37 ` Frederic Weisbecker
2009-02-17 22:48 ` Paul E. McKenney
2009-02-18 0:38 ` Ingo Molnar
2009-02-18 1:02 ` Paul E. McKenney
2009-02-17 6:11 ` Damien Wyart
2009-02-17 15:11 ` Paul E. McKenney
2009-02-16 20:44 ` Damien Wyart
2009-02-15 10:12 ` Christian Kujau
2009-02-15 10:54 ` Ingo Molnar
2009-02-14 20:38 ` [Bug #12617] unable to compile e100 firmware into kernel Rafael J. Wysocki
2009-02-15 17:38 ` David Woodhouse
2009-02-15 19:58 ` Andrey Borzenkov
2009-02-15 21:09 ` Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12668] USB flash disk surprise disconnect Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12663] Commit 8c7e58e690ae60ab4215b025f433ed4af261e103 breaks resume Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12660] Linux 2.6.28.3 freezing on a 32-bits x86 Thinkpad T43p Rafael J. Wysocki
2009-02-14 23:29 ` Mathieu Desnoyers
2009-02-14 20:38 ` [Bug #12680] Not having a VIA PadLock hardware incurs a long delay in probing on modules insertion attempt Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12670] BUG: unable to handle kernel paging request at pin_to_kill+0x21 Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12681] s2ram: fails to wake up on Acer Extensa 4220 (SMP disabled) Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12671] uvc_status_cleanup(): undefined reference to `input_unregister_device' Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12706] Oopses and ACPI problems (Linus 2.6.29-rc4) Rafael J. Wysocki
2009-02-14 20:38 ` [Bug #12705] X200: Brightness broken since 2.6.29-rc4-58-g4c098bc Rafael J. Wysocki
2009-02-15 13:43 ` Matthew Garrett
2009-02-15 14:37 ` Rafael J. Wysocki
2009-02-17 23:05 ` Eric Anholt
2009-02-17 23:13 ` Matthew Garrett
2009-02-17 23:23 ` Jesse Barnes
2009-02-18 9:36 ` Nico Schottelius
2009-02-13 9:33 ` Nico Schottelius
2009-02-13 9:40 ` Nico Schottelius
2009-02-13 13:43 ` Matthew Garrett
2009-03-10 2:28 ` Eric Anholt
2009-03-10 5:38 ` Nico Schottelius
2009-02-13 9:42 ` Ingo Molnar
2009-02-13 18:05 ` Len Brown
2009-02-16 9:06 ` ZhangRui
2009-02-16 10:58 ` Nico Schottelius
2009-02-16 13:13 ` Nico Schottelius
2009-02-16 21:40 ` Norbert Preining
2009-02-16 15:54 ` Nico Schottelius
2009-02-19 9:01 ` Nico Schottelius
2009-02-16 7:29 ` 2.6.29-rc5: Reported regressions from 2.6.28 Jarek Poplawski
2009-02-16 21:11 ` Rafael J. Wysocki
-- strict thread matches above, loose matches on Subject: below --
2009-02-08 19:05 2.6.29-rc4: " Rafael J. Wysocki
2009-02-08 19:21 ` [Bug #12650] Strange load average and ksoftirqd behavior with 2.6.29-rc2-git1 Rafael J. Wysocki
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=20090216185616.GB6785@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=a.p.zijlstra@chello.nl \
--cc=damien.wyart@free.fr \
--cc=efault@gmx.de \
--cc=fweisbec@gmail.com \
--cc=kernel-testers@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rjw@sisk.pl \
/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).