From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
Cc: Rich Felker <dalias-8zAoT0mYgF4@public.gmane.org>,
Daniel Lezcano
<daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-sh-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
Subject: Re: [PATCH v7 2/2] clocksource: add J-Core timer/clocksource driver
Date: Fri, 30 Sep 2016 13:48:35 +0000 [thread overview]
Message-ID: <20160930134835.GT14933@linux.vnet.ibm.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1609301319410.4799@nanos>
On Fri, Sep 30, 2016 at 03:15:11PM +0200, Thomas Gleixner wrote:
> On Tue, 27 Sep 2016, Rich Felker wrote:
> > I've managed to get a trace with a stall. I'm not sure what the best
> > way to share the full thing is, since it's large, but here are the
> > potentially interesting parts.
[ . . . ]
Some RCU commentary, on the off-chance that it helps...
> So that should kick rcu_sched-7 in 10ms, latest 20ms from now and CPU1 goes
> into a NOHZ idle sleep.
>
> > <idle>-0 [001] d... 109.953436: tick_stop: success=1 dependency=NONE
> > <idle>-0 [001] d... 109.953617: hrtimer_cancel: hrtimer\x109f449c
> > <idle>-0 [001] d... 109.953818: hrtimer_start: hrtimer\x109f449c function=tick_sched_timer expires\x109880000000 softexpires\x109880000000
>
> which is (using the 0.087621us delta between the trace clock and clock
> MONO) at: 109.880 + 0.087621 = 109.968
>
> Which is about correct as we expect the RCU timer to fire at:
>
> 109.952633 + 0.01 = 109.963633
>
> or latest at
>
> 109.952633 + 0.02 = 109.983633
>
> There is another caveat. That nohz stuff can queue the rcu timer on CPU0, which
> it did not because:
Just for annoying completeness, the location of the timer depends on how
the rcuo callback-offload kthreads are constrained. And yes, in the most
constrained case where all CPUs except for CPU 0 are nohz CPUs, they will
by default all run on CPU 0.
> > rcu_sched-7 [001] d... 109.952633: timer_start: timer\x160a9eb0 function=process_timeout expiresB94948284 [timeout=1] flags=0x00000001
>
> The CPU nr encoded in flags is: 1
>
> Now we cancel and restart the timer w/o seing the interrupt expiring
> it. And that expiry should have happened at 109.968000 !?!
>
> > <idle>-0 [001] d... 109.968225: hrtimer_cancel: hrtimer\x109f449c
> > <idle>-0 [001] d... 109.968526: hrtimer_start: hrtimer\x109f449c function=tick_sched_timer expires\x109890000000 softexpires\x109890000000
>
> So this advances the next tick even further out. And CPU 0 sets the timer to
> the exact smae value:
>
> > <idle>-0 [000] d.h. 109.969104: hrtimer_start: hrtimer\x109e949c function=tick_sched_timer expires\x109890000000 softexpires\x109890000000
>
>
> > <idle>-0 [000] d.h. 109.977690: irq_handler_entry: irq\x16 name=jcore_pit
> > <idle>-0 [000] d.h. 109.977911: hrtimer_cancel: hrtimer\x109e949c
> > <idle>-0 [000] d.h. 109.978053: hrtimer_expire_entry: hrtimer\x109e949c function=tick_sched_timer now\x109890434160
>
> Which expires here. And CPU1 instead of getting an interrupt and expiring
> the timer does the cancel/restart to the next jiffie again:
>
> > <idle>-0 [001] d... 109.978206: hrtimer_cancel: hrtimer\x109f449c
> > <idle>-0 [001] d... 109.978495: hrtimer_start: hrtimer\x109f449c function=tick_sched_timer expires\x109900000000 softexpires\x109900000000
>
> And this repeats;
>
> > <idle>-0 [000] d.h. 109.987726: irq_handler_entry: irq\x16 name=jcore_pit
> > <idle>-0 [000] d.h. 109.987954: hrtimer_cancel: hrtimer\x109e949c
> > <idle>-0 [000] d.h. 109.988095: hrtimer_expire_entry: hrtimer\x109e949c function=tick_sched_timer now\x109900474620
>
> > <idle>-0 [001] d... 109.988243: hrtimer_cancel: hrtimer\x109f449c
> > <idle>-0 [001] d... 109.988537: hrtimer_start: hrtimer\x109f449c fun9c
>
> There is something badly wrong here.
>
> > <idle>-0 [000] ..s. 110.019443: softirq_entry: vec=1 [action=TIMER]
> > <idle>-0 [000] ..s. 110.019617: softirq_exit: vec=1 [action=TIMER]
> > <idle>-0 [000] ..s. 110.019730: softirq_entry: vec=7 [action=SCHED]
> > <idle>-0 [000] ..s. 110.020174: softirq_exit: vec=7 [action=SCHED]
> > <idle>-0 [000] d.h. 110.027674: irq_handler_entry: irq\x16 name=jcore_pit
> >
> > The rcu_sched process does not run again after the tick_stop until
> > 132s, and only a few RCU softirqs happen (all shown above). During
> > this time, cpu1 has no interrupt activity and nothing in the trace
> > except the above hrtimer_cancel/hrtimer_start pairs (not sure how
> > they're happening without any interrupts).
>
> If you drop out of the arch idle into the core idle loop then you might end
> up with this. You want to add a few trace points or trace_printks() to the
> involved functions. tick_nohz_restart() tick_nohz_stop_sched_tick()
> tick_nohz_restart_sched_tick() and the idle code should be a good starting
> point.
>
> > This pattern repeats until almost 131s, where cpu1 goes into a frenzy
> > of hrtimer_cancel/start:
>
> It's not a frenzy. It's the same pattern as above. It arms the timer to the
> next tick, but that timer never ever fires. And it does that every tick ....
>
> Please put a tracepoint into your set_next_event() callback as well. SO
> this changes here:
>
> > <idle>-0 [001] d... 132.198170: hrtimer_cancel: hrtimer\x109f449c
> > <idle>-0 [001] d... 132.198451: hrtimer_start: hrtimer\x109f449c function=tick_sched_timer expires\x132120000000 softexpires\x132120000000
>
> > <idle>-0 [001] dnh. 132.205860: irq_handler_entry: irq name=ipi
> > <idle>-0 [001] dnh. 132.206041: irq_handler_exit: irq ret=handle
>
> So CPU1 gets an IPI
>
> > <idle>-0 [001] dn.. 132.206650: hrtimer_cancel: hrtimer\x109f449c
> 49c function=tick_sched_timer now\x132119115200
> > <idle>-0 [001] dn.. 132.206936: hrtimer_start: hrtimer\x109f449c function=tick_sched_timer expires\x132120000000 softexpires\x132120000000
>
> And rcu-sched-7 gets running magically, but we don't know what woke it
> up. Definitely not the timer, because that did not fire.
>
> > rcu_sched-7 [001] d... 132.207710: timer_cancel: timer\x160a9eb0
It could have been an explicit wakeup at the end of a grace period. That
would explain its cancelling the timer, anyway.
> > - During the whole sequence, hrtimer expiration times are being set to
> > exact jiffies (@ 100 Hz), whereas before it they're quite arbitrary.
>
> When a CPU goes into NOHZ idle and the next (timer/hrtimer) is farther out
> than the next tick, then tick_sched_timer is set to this next event which
> can be far out. So that's expected.
>
> > - The CLOCK_MONOTONIC hrtimer times do not match up with the
> > timestamps; they're off by about 0.087s. I assume this is just
> > sched_clock vs clocksource time and not a big deal.
>
> Yes. You can tell the tracer to use clock monotonic so then they should match.
>
> > - The rcu_sched process is sleeping with timeout=1. This seems
> > odd/excessive.
>
> Why is that odd? That's one tick, i.e. 10ms in your case. And that's not
> the problem at all. The problem is your timer not firing, but the cpu is
> obviously either getting out of idle and then moves the tick ahead for some
> unknown reason.
And a one-jiffy timeout is in fact expected behavior when HZ\x100.
You have to be running HZ%0 or better to have two-jiffy timeouts,
and HZP0 or better for three-jiffy timeouts.
Thanx, Paul
WARNING: multiple messages have this Message-ID (diff)
From: "Paul E. McKenney" <paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
To: Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
Cc: Rich Felker <dalias-8zAoT0mYgF4@public.gmane.org>,
Daniel Lezcano
<daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-sh-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
Subject: Re: [PATCH v7 2/2] clocksource: add J-Core timer/clocksource driver
Date: Fri, 30 Sep 2016 06:48:35 -0700 [thread overview]
Message-ID: <20160930134835.GT14933@linux.vnet.ibm.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1609301319410.4799@nanos>
On Fri, Sep 30, 2016 at 03:15:11PM +0200, Thomas Gleixner wrote:
> On Tue, 27 Sep 2016, Rich Felker wrote:
> > I've managed to get a trace with a stall. I'm not sure what the best
> > way to share the full thing is, since it's large, but here are the
> > potentially interesting parts.
[ . . . ]
Some RCU commentary, on the off-chance that it helps...
> So that should kick rcu_sched-7 in 10ms, latest 20ms from now and CPU1 goes
> into a NOHZ idle sleep.
>
> > <idle>-0 [001] d... 109.953436: tick_stop: success=1 dependency=NONE
> > <idle>-0 [001] d... 109.953617: hrtimer_cancel: hrtimer=109f449c
> > <idle>-0 [001] d... 109.953818: hrtimer_start: hrtimer=109f449c function=tick_sched_timer expires=109880000000 softexpires=109880000000
>
> which is (using the 0.087621us delta between the trace clock and clock
> MONO) at: 109.880 + 0.087621 = 109.968
>
> Which is about correct as we expect the RCU timer to fire at:
>
> 109.952633 + 0.01 = 109.963633
>
> or latest at
>
> 109.952633 + 0.02 = 109.983633
>
> There is another caveat. That nohz stuff can queue the rcu timer on CPU0, which
> it did not because:
Just for annoying completeness, the location of the timer depends on how
the rcuo callback-offload kthreads are constrained. And yes, in the most
constrained case where all CPUs except for CPU 0 are nohz CPUs, they will
by default all run on CPU 0.
> > rcu_sched-7 [001] d... 109.952633: timer_start: timer=160a9eb0 function=process_timeout expires=4294948284 [timeout=1] flags=0x00000001
>
> The CPU nr encoded in flags is: 1
>
> Now we cancel and restart the timer w/o seing the interrupt expiring
> it. And that expiry should have happened at 109.968000 !?!
>
> > <idle>-0 [001] d... 109.968225: hrtimer_cancel: hrtimer=109f449c
> > <idle>-0 [001] d... 109.968526: hrtimer_start: hrtimer=109f449c function=tick_sched_timer expires=109890000000 softexpires=109890000000
>
> So this advances the next tick even further out. And CPU 0 sets the timer to
> the exact smae value:
>
> > <idle>-0 [000] d.h. 109.969104: hrtimer_start: hrtimer=109e949c function=tick_sched_timer expires=109890000000 softexpires=109890000000
>
>
> > <idle>-0 [000] d.h. 109.977690: irq_handler_entry: irq=16 name=jcore_pit
> > <idle>-0 [000] d.h. 109.977911: hrtimer_cancel: hrtimer=109e949c
> > <idle>-0 [000] d.h. 109.978053: hrtimer_expire_entry: hrtimer=109e949c function=tick_sched_timer now=109890434160
>
> Which expires here. And CPU1 instead of getting an interrupt and expiring
> the timer does the cancel/restart to the next jiffie again:
>
> > <idle>-0 [001] d... 109.978206: hrtimer_cancel: hrtimer=109f449c
> > <idle>-0 [001] d... 109.978495: hrtimer_start: hrtimer=109f449c function=tick_sched_timer expires=109900000000 softexpires=109900000000
>
> And this repeats;
>
> > <idle>-0 [000] d.h. 109.987726: irq_handler_entry: irq=16 name=jcore_pit
> > <idle>-0 [000] d.h. 109.987954: hrtimer_cancel: hrtimer=109e949c
> > <idle>-0 [000] d.h. 109.988095: hrtimer_expire_entry: hrtimer=109e949c function=tick_sched_timer now=109900474620
>
> > <idle>-0 [001] d... 109.988243: hrtimer_cancel: hrtimer=109f449c
> > <idle>-0 [001] d... 109.988537: hrtimer_start: hrtimer=109f449c fun9c
>
> There is something badly wrong here.
>
> > <idle>-0 [000] ..s. 110.019443: softirq_entry: vec=1 [action=TIMER]
> > <idle>-0 [000] ..s. 110.019617: softirq_exit: vec=1 [action=TIMER]
> > <idle>-0 [000] ..s. 110.019730: softirq_entry: vec=7 [action=SCHED]
> > <idle>-0 [000] ..s. 110.020174: softirq_exit: vec=7 [action=SCHED]
> > <idle>-0 [000] d.h. 110.027674: irq_handler_entry: irq=16 name=jcore_pit
> >
> > The rcu_sched process does not run again after the tick_stop until
> > 132s, and only a few RCU softirqs happen (all shown above). During
> > this time, cpu1 has no interrupt activity and nothing in the trace
> > except the above hrtimer_cancel/hrtimer_start pairs (not sure how
> > they're happening without any interrupts).
>
> If you drop out of the arch idle into the core idle loop then you might end
> up with this. You want to add a few trace points or trace_printks() to the
> involved functions. tick_nohz_restart() tick_nohz_stop_sched_tick()
> tick_nohz_restart_sched_tick() and the idle code should be a good starting
> point.
>
> > This pattern repeats until almost 131s, where cpu1 goes into a frenzy
> > of hrtimer_cancel/start:
>
> It's not a frenzy. It's the same pattern as above. It arms the timer to the
> next tick, but that timer never ever fires. And it does that every tick ....
>
> Please put a tracepoint into your set_next_event() callback as well. SO
> this changes here:
>
> > <idle>-0 [001] d... 132.198170: hrtimer_cancel: hrtimer=109f449c
> > <idle>-0 [001] d... 132.198451: hrtimer_start: hrtimer=109f449c function=tick_sched_timer expires=132120000000 softexpires=132120000000
>
> > <idle>-0 [001] dnh. 132.205860: irq_handler_entry: irq=20 name=ipi
> > <idle>-0 [001] dnh. 132.206041: irq_handler_exit: irq=20 ret=handle
>
> So CPU1 gets an IPI
>
> > <idle>-0 [001] dn.. 132.206650: hrtimer_cancel: hrtimer=109f449c
> 49c function=tick_sched_timer now=132119115200
> > <idle>-0 [001] dn.. 132.206936: hrtimer_start: hrtimer=109f449c function=tick_sched_timer expires=132120000000 softexpires=132120000000
>
> And rcu-sched-7 gets running magically, but we don't know what woke it
> up. Definitely not the timer, because that did not fire.
>
> > rcu_sched-7 [001] d... 132.207710: timer_cancel: timer=160a9eb0
It could have been an explicit wakeup at the end of a grace period. That
would explain its cancelling the timer, anyway.
> > - During the whole sequence, hrtimer expiration times are being set to
> > exact jiffies (@ 100 Hz), whereas before it they're quite arbitrary.
>
> When a CPU goes into NOHZ idle and the next (timer/hrtimer) is farther out
> than the next tick, then tick_sched_timer is set to this next event which
> can be far out. So that's expected.
>
> > - The CLOCK_MONOTONIC hrtimer times do not match up with the
> > timestamps; they're off by about 0.087s. I assume this is just
> > sched_clock vs clocksource time and not a big deal.
>
> Yes. You can tell the tracer to use clock monotonic so then they should match.
>
> > - The rcu_sched process is sleeping with timeout=1. This seems
> > odd/excessive.
>
> Why is that odd? That's one tick, i.e. 10ms in your case. And that's not
> the problem at all. The problem is your timer not firing, but the cpu is
> obviously either getting out of idle and then moves the tick ahead for some
> unknown reason.
And a one-jiffy timeout is in fact expected behavior when HZ=100.
You have to be running HZ=250 or better to have two-jiffy timeouts,
and HZ=500 or better for three-jiffy timeouts.
Thanx, Paul
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Rich Felker <dalias@libc.org>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-sh@vger.kernel.org, Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>
Subject: Re: [PATCH v7 2/2] clocksource: add J-Core timer/clocksource driver
Date: Fri, 30 Sep 2016 06:48:35 -0700 [thread overview]
Message-ID: <20160930134835.GT14933@linux.vnet.ibm.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1609301319410.4799@nanos>
On Fri, Sep 30, 2016 at 03:15:11PM +0200, Thomas Gleixner wrote:
> On Tue, 27 Sep 2016, Rich Felker wrote:
> > I've managed to get a trace with a stall. I'm not sure what the best
> > way to share the full thing is, since it's large, but here are the
> > potentially interesting parts.
[ . . . ]
Some RCU commentary, on the off-chance that it helps...
> So that should kick rcu_sched-7 in 10ms, latest 20ms from now and CPU1 goes
> into a NOHZ idle sleep.
>
> > <idle>-0 [001] d... 109.953436: tick_stop: success=1 dependency=NONE
> > <idle>-0 [001] d... 109.953617: hrtimer_cancel: hrtimer=109f449c
> > <idle>-0 [001] d... 109.953818: hrtimer_start: hrtimer=109f449c function=tick_sched_timer expires=109880000000 softexpires=109880000000
>
> which is (using the 0.087621us delta between the trace clock and clock
> MONO) at: 109.880 + 0.087621 = 109.968
>
> Which is about correct as we expect the RCU timer to fire at:
>
> 109.952633 + 0.01 = 109.963633
>
> or latest at
>
> 109.952633 + 0.02 = 109.983633
>
> There is another caveat. That nohz stuff can queue the rcu timer on CPU0, which
> it did not because:
Just for annoying completeness, the location of the timer depends on how
the rcuo callback-offload kthreads are constrained. And yes, in the most
constrained case where all CPUs except for CPU 0 are nohz CPUs, they will
by default all run on CPU 0.
> > rcu_sched-7 [001] d... 109.952633: timer_start: timer=160a9eb0 function=process_timeout expires=4294948284 [timeout=1] flags=0x00000001
>
> The CPU nr encoded in flags is: 1
>
> Now we cancel and restart the timer w/o seing the interrupt expiring
> it. And that expiry should have happened at 109.968000 !?!
>
> > <idle>-0 [001] d... 109.968225: hrtimer_cancel: hrtimer=109f449c
> > <idle>-0 [001] d... 109.968526: hrtimer_start: hrtimer=109f449c function=tick_sched_timer expires=109890000000 softexpires=109890000000
>
> So this advances the next tick even further out. And CPU 0 sets the timer to
> the exact smae value:
>
> > <idle>-0 [000] d.h. 109.969104: hrtimer_start: hrtimer=109e949c function=tick_sched_timer expires=109890000000 softexpires=109890000000
>
>
> > <idle>-0 [000] d.h. 109.977690: irq_handler_entry: irq=16 name=jcore_pit
> > <idle>-0 [000] d.h. 109.977911: hrtimer_cancel: hrtimer=109e949c
> > <idle>-0 [000] d.h. 109.978053: hrtimer_expire_entry: hrtimer=109e949c function=tick_sched_timer now=109890434160
>
> Which expires here. And CPU1 instead of getting an interrupt and expiring
> the timer does the cancel/restart to the next jiffie again:
>
> > <idle>-0 [001] d... 109.978206: hrtimer_cancel: hrtimer=109f449c
> > <idle>-0 [001] d... 109.978495: hrtimer_start: hrtimer=109f449c function=tick_sched_timer expires=109900000000 softexpires=109900000000
>
> And this repeats;
>
> > <idle>-0 [000] d.h. 109.987726: irq_handler_entry: irq=16 name=jcore_pit
> > <idle>-0 [000] d.h. 109.987954: hrtimer_cancel: hrtimer=109e949c
> > <idle>-0 [000] d.h. 109.988095: hrtimer_expire_entry: hrtimer=109e949c function=tick_sched_timer now=109900474620
>
> > <idle>-0 [001] d... 109.988243: hrtimer_cancel: hrtimer=109f449c
> > <idle>-0 [001] d... 109.988537: hrtimer_start: hrtimer=109f449c fun9c
>
> There is something badly wrong here.
>
> > <idle>-0 [000] ..s. 110.019443: softirq_entry: vec=1 [action=TIMER]
> > <idle>-0 [000] ..s. 110.019617: softirq_exit: vec=1 [action=TIMER]
> > <idle>-0 [000] ..s. 110.019730: softirq_entry: vec=7 [action=SCHED]
> > <idle>-0 [000] ..s. 110.020174: softirq_exit: vec=7 [action=SCHED]
> > <idle>-0 [000] d.h. 110.027674: irq_handler_entry: irq=16 name=jcore_pit
> >
> > The rcu_sched process does not run again after the tick_stop until
> > 132s, and only a few RCU softirqs happen (all shown above). During
> > this time, cpu1 has no interrupt activity and nothing in the trace
> > except the above hrtimer_cancel/hrtimer_start pairs (not sure how
> > they're happening without any interrupts).
>
> If you drop out of the arch idle into the core idle loop then you might end
> up with this. You want to add a few trace points or trace_printks() to the
> involved functions. tick_nohz_restart() tick_nohz_stop_sched_tick()
> tick_nohz_restart_sched_tick() and the idle code should be a good starting
> point.
>
> > This pattern repeats until almost 131s, where cpu1 goes into a frenzy
> > of hrtimer_cancel/start:
>
> It's not a frenzy. It's the same pattern as above. It arms the timer to the
> next tick, but that timer never ever fires. And it does that every tick ....
>
> Please put a tracepoint into your set_next_event() callback as well. SO
> this changes here:
>
> > <idle>-0 [001] d... 132.198170: hrtimer_cancel: hrtimer=109f449c
> > <idle>-0 [001] d... 132.198451: hrtimer_start: hrtimer=109f449c function=tick_sched_timer expires=132120000000 softexpires=132120000000
>
> > <idle>-0 [001] dnh. 132.205860: irq_handler_entry: irq=20 name=ipi
> > <idle>-0 [001] dnh. 132.206041: irq_handler_exit: irq=20 ret=handle
>
> So CPU1 gets an IPI
>
> > <idle>-0 [001] dn.. 132.206650: hrtimer_cancel: hrtimer=109f449c
> 49c function=tick_sched_timer now=132119115200
> > <idle>-0 [001] dn.. 132.206936: hrtimer_start: hrtimer=109f449c function=tick_sched_timer expires=132120000000 softexpires=132120000000
>
> And rcu-sched-7 gets running magically, but we don't know what woke it
> up. Definitely not the timer, because that did not fire.
>
> > rcu_sched-7 [001] d... 132.207710: timer_cancel: timer=160a9eb0
It could have been an explicit wakeup at the end of a grace period. That
would explain its cancelling the timer, anyway.
> > - During the whole sequence, hrtimer expiration times are being set to
> > exact jiffies (@ 100 Hz), whereas before it they're quite arbitrary.
>
> When a CPU goes into NOHZ idle and the next (timer/hrtimer) is farther out
> than the next tick, then tick_sched_timer is set to this next event which
> can be far out. So that's expected.
>
> > - The CLOCK_MONOTONIC hrtimer times do not match up with the
> > timestamps; they're off by about 0.087s. I assume this is just
> > sched_clock vs clocksource time and not a big deal.
>
> Yes. You can tell the tracer to use clock monotonic so then they should match.
>
> > - The rcu_sched process is sleeping with timeout=1. This seems
> > odd/excessive.
>
> Why is that odd? That's one tick, i.e. 10ms in your case. And that's not
> the problem at all. The problem is your timer not firing, but the cpu is
> obviously either getting out of idle and then moves the tick ahead for some
> unknown reason.
And a one-jiffy timeout is in fact expected behavior when HZ=100.
You have to be running HZ=250 or better to have two-jiffy timeouts,
and HZ=500 or better for three-jiffy timeouts.
Thanx, Paul
next prev parent reply other threads:[~2016-09-30 13:48 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-24 5:07 [PATCH v7 0/2] J-Core timer support Rich Felker
2016-09-24 5:07 ` Rich Felker
[not found] ` <cover.1474693319.git.dalias-8zAoT0mYgF4@public.gmane.org>
2016-09-24 5:07 ` [PATCH v7 2/2] clocksource: add J-Core timer/clocksource driver Rich Felker
2016-09-24 5:07 ` Rich Felker
[not found] ` <22c1ee0f908fe3bf8b70f5e87d659ceb29af1434.1474693319.git.dalias-8zAoT0mYgF4@public.gmane.org>
2016-09-26 21:07 ` Rich Felker
2016-09-26 21:07 ` Rich Felker
2016-09-26 21:07 ` Rich Felker
2016-09-26 21:27 ` Daniel Lezcano
2016-09-26 21:27 ` Daniel Lezcano
[not found] ` <4b02ba7d-4a31-297a-bbbd-be26da615e7b-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2016-09-26 22:23 ` Rich Felker
2016-09-26 22:23 ` Rich Felker
2016-09-26 22:23 ` Rich Felker
2016-09-26 23:55 ` Thomas Gleixner
2016-09-26 23:55 ` Thomas Gleixner
2016-09-27 0:42 ` Rich Felker
2016-09-27 0:42 ` Rich Felker
2016-09-27 22:08 ` Rich Felker
2016-09-27 22:08 ` Rich Felker
2016-09-30 13:15 ` Thomas Gleixner
2016-09-30 13:15 ` Thomas Gleixner
2016-09-30 13:48 ` Paul E. McKenney [this message]
2016-09-30 13:48 ` Paul E. McKenney
2016-09-30 13:48 ` Paul E. McKenney
2016-10-01 17:05 ` Rich Felker
2016-10-01 17:05 ` Rich Felker
2016-10-01 17:58 ` Paul E. McKenney
2016-10-01 17:58 ` Paul E. McKenney
[not found] ` <20161001175837.GP14933-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2016-10-02 0:00 ` Rich Felker
2016-10-02 0:00 ` Rich Felker
2016-10-02 0:00 ` Rich Felker
2016-10-02 3:59 ` Rich Felker
2016-10-02 3:59 ` Rich Felker
2016-10-02 5:59 ` Paul E. McKenney
2016-10-02 5:59 ` Paul E. McKenney
[not found] ` <20161002000049.GP19318-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2016-10-02 6:30 ` Paul E. McKenney
2016-10-02 6:30 ` Paul E. McKenney
2016-10-02 6:30 ` Paul E. McKenney
2016-10-08 1:32 ` Rich Felker
2016-10-08 1:32 ` Rich Felker
2016-10-08 11:32 ` Thomas Gleixner
2016-10-08 11:32 ` Thomas Gleixner
2016-10-08 16:26 ` Rich Felker
2016-10-08 16:26 ` Rich Felker
2016-10-08 16:26 ` Rich Felker
[not found] ` <20161008162614.GY19318-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2016-10-08 17:03 ` Thomas Gleixner
2016-10-08 17:03 ` Thomas Gleixner
2016-10-08 17:03 ` Thomas Gleixner
2016-10-09 1:28 ` Rich Felker
2016-10-09 1:28 ` Rich Felker
2016-10-09 9:14 ` Thomas Gleixner
2016-10-09 9:14 ` Thomas Gleixner
2016-10-09 14:35 ` Rich Felker
2016-10-09 14:35 ` Rich Felker
2016-10-03 22:10 ` Rich Felker
2016-10-03 22:10 ` Rich Felker
[not found] ` <20161003221039.GR19318-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2016-10-04 7:06 ` Paul E. McKenney
2016-10-04 7:06 ` Paul E. McKenney
2016-10-04 7:06 ` Paul E. McKenney
[not found] ` <20161004070623.GM14933-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2016-10-04 20:58 ` Rich Felker
2016-10-04 20:58 ` Rich Felker
2016-10-04 20:58 ` Rich Felker
2016-10-04 21:14 ` Paul E. McKenney
2016-10-04 21:14 ` Paul E. McKenney
2016-10-04 21:48 ` Rich Felker
2016-10-04 21:48 ` Rich Felker
2016-10-05 12:41 ` Paul E. McKenney
2016-10-05 12:41 ` Paul E. McKenney
2016-09-24 5:07 ` [PATCH v7 1/2] of: add J-Core timer bindings Rich Felker
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=20160930134835.GT14933@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=dalias-8zAoT0mYgF4@public.gmane.org \
--cc=daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-sh-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.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.