* [GIT PULL] nohz: Help for testing
@ 2013-04-22 21:08 Frederic Weisbecker
2013-04-22 21:08 ` [PATCH 1/2] nohz: Select wide RCU nocb for full dynticks Frederic Weisbecker
2013-04-22 21:08 ` [PATCH 2/2] nohz: Add basic tracing Frederic Weisbecker
0 siblings, 2 replies; 6+ messages in thread
From: Frederic Weisbecker @ 2013-04-22 21:08 UTC (permalink / raw)
To: Ingo Molnar
Cc: LKML, Frederic Weisbecker, Chris Metcalf, Christoph Lameter,
Geoff Levand, Gilad Ben Yossef, Hakan Akkan, Kevin Hilman,
Li Zhong, Oleg Nesterov, Paul E. McKenney, Paul Gortmaker,
Peter Zijlstra, Steven Rostedt, Thomas Gleixner
Ingo,
Please pull the testing enhancements for full dynticks from:
git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git
timers/nohz-help-testing
HEAD: cb41a29076e9f95547da46578d5c8804f7b8845d
This is on top of my previous pull request (the timers/nohz branch) and
it is deemed to ease testing and help to diagnose failures:
* First patch enables CONFIG_RCU_NOCB_ALL when we have full dynticks to
ease automatic testing of the feature. This should also further
help simplifying the code. If users want more granularity in the future
to set RCU nocbs and timekeeper masks, we can still step back and
select CONFIG_RCU_NOCB_ALL only when we have CONFIG_NO_HZ_FULL_ALL.
Note this will only have an effect on tip/master because that config
is in core/rcu and not yet upstream.
* Second patch adds some tracepoints to dump the dynticks behaviour as
I got many questions from user who don't know how to diagnose why the
tick didn't stop on their settings.
Thanks.
---
Frederic Weisbecker (2):
nohz: Select wide RCU nocb for full dynticks
nohz: Add basic tracing
include/trace/events/timer.h | 21 +++++++++++++++++++++
kernel/time/Kconfig | 1 +
kernel/time/tick-sched.c | 19 +++++++++++++++----
3 files changed, 37 insertions(+), 4 deletions(-)
--
1.7.5.4
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 1/2] nohz: Select wide RCU nocb for full dynticks 2013-04-22 21:08 [GIT PULL] nohz: Help for testing Frederic Weisbecker @ 2013-04-22 21:08 ` Frederic Weisbecker 2013-04-22 21:08 ` [PATCH 2/2] nohz: Add basic tracing Frederic Weisbecker 1 sibling, 0 replies; 6+ messages in thread From: Frederic Weisbecker @ 2013-04-22 21:08 UTC (permalink / raw) To: Ingo Molnar Cc: LKML, Frederic Weisbecker, Chris Metcalf, Christoph Lameter, Geoff Levand, Gilad Ben Yossef, Hakan Akkan, Kevin Hilman, Li Zhong, Oleg Nesterov, Paul E. McKenney, Paul Gortmaker, Peter Zijlstra, Steven Rostedt, Thomas Gleixner It makes testing and implementation much easier as we know in advance that all CPUs are RCU nocbs. Also this prepares to remove the dynamic check for nohz_full= boot mask to be a subset of rcu_nocbs= Eventually this should also help removing the requirement for the boot CPU to be outside the full dynticks range. Suggested-by: Christoph Lameter <cl@linux.com> Suggested-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Chris Metcalf <cmetcalf@tilera.com> Cc: Christoph Lameter <cl@linux.com> Cc: Geoff Levand <geoff@infradead.org> Cc: Gilad Ben Yossef <gilad@benyossef.com> Cc: Hakan Akkan <hakanakkan@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Kevin Hilman <khilman@linaro.org> Cc: Li Zhong <zhong@linux.vnet.ibm.com> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Paul Gortmaker <paul.gortmaker@windriver.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Thomas Gleixner <tglx@linutronix.de> --- kernel/time/Kconfig | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/kernel/time/Kconfig b/kernel/time/Kconfig index f6a792a..e1ac129 100644 --- a/kernel/time/Kconfig +++ b/kernel/time/Kconfig @@ -110,6 +110,7 @@ config NO_HZ_FULL select NO_HZ_COMMON select RCU_USER_QS select RCU_NOCB_CPU + select RCU_NOCB_CPU_ALL select CONTEXT_TRACKING_FORCE select IRQ_WORK help -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] nohz: Add basic tracing 2013-04-22 21:08 [GIT PULL] nohz: Help for testing Frederic Weisbecker 2013-04-22 21:08 ` [PATCH 1/2] nohz: Select wide RCU nocb for full dynticks Frederic Weisbecker @ 2013-04-22 21:08 ` Frederic Weisbecker 2013-04-23 18:12 ` Christoph Lameter 1 sibling, 1 reply; 6+ messages in thread From: Frederic Weisbecker @ 2013-04-22 21:08 UTC (permalink / raw) To: Ingo Molnar Cc: LKML, Frederic Weisbecker, Chris Metcalf, Christoph Lameter, Geoff Levand, Gilad Ben Yossef, Hakan Akkan, Kevin Hilman, Li Zhong, Oleg Nesterov, Paul E. McKenney, Paul Gortmaker, Peter Zijlstra, Steven Rostedt, Thomas Gleixner It's not obvious to find out why the full dynticks subsystem doesn't always stop the tick: whether this is due to kthreads, posix timers, perf events, etc... These new tracepoints are here to help the user diagnose the failures and test this feature. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Chris Metcalf <cmetcalf@tilera.com> Cc: Christoph Lameter <cl@linux.com> Cc: Geoff Levand <geoff@infradead.org> Cc: Gilad Ben Yossef <gilad@benyossef.com> Cc: Hakan Akkan <hakanakkan@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Kevin Hilman <khilman@linaro.org> Cc: Li Zhong <zhong@linux.vnet.ibm.com> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Paul Gortmaker <paul.gortmaker@windriver.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Thomas Gleixner <tglx@linutronix.de> --- include/trace/events/timer.h | 21 +++++++++++++++++++++ kernel/time/tick-sched.c | 19 +++++++++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/include/trace/events/timer.h b/include/trace/events/timer.h index 425bcfe..f5eb53e 100644 --- a/include/trace/events/timer.h +++ b/include/trace/events/timer.h @@ -323,6 +323,27 @@ TRACE_EVENT(itimer_expire, (int) __entry->pid, (unsigned long long)__entry->now) ); +#ifdef CONFIG_NO_HZ_FULL +TRACE_EVENT(tick_stop, + + TP_PROTO(int success, char *error_msg), + + TP_ARGS(success, error_msg), + + TP_STRUCT__entry( + __field( int , success ) + __string( msg, error_msg ) + ), + + TP_fast_assign( + __entry->success = success; + __assign_str(msg, error_msg); + ), + + TP_printk("success=%s msg=%s", __entry->success ? "yes" : "no", __get_str(msg)) +); +#endif + #endif /* _TRACE_TIMER_H */ /* This part must be outside protection */ diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 12a900d..85e05ab 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -28,6 +28,8 @@ #include "tick-internal.h" +#include <trace/events/timer.h> + /* * Per cpu nohz control structure */ @@ -153,14 +155,20 @@ static bool can_stop_full_tick(void) { WARN_ON_ONCE(!irqs_disabled()); - if (!sched_can_stop_tick()) + if (!sched_can_stop_tick()) { + trace_tick_stop(0, "more than 1 task in runqueue\n"); return false; + } - if (!posix_cpu_timers_can_stop_tick(current)) + if (!posix_cpu_timers_can_stop_tick(current)) { + trace_tick_stop(0, "posix timers running\n"); return false; + } - if (!perf_event_can_stop_tick()) + if (!perf_event_can_stop_tick()) { + trace_tick_stop(0, "perf events running\n"); return false; + } /* sched_clock_tick() needs us? */ #ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK @@ -168,8 +176,10 @@ static bool can_stop_full_tick(void) * TODO: kick full dynticks CPUs when * sched_clock_stable is set. */ - if (!sched_clock_stable) + if (!sched_clock_stable) { + trace_tick_stop(0, "unstable sched clock\n"); return false; + } #endif return true; @@ -631,6 +641,7 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts, ts->last_tick = hrtimer_get_expires(&ts->sched_timer); ts->tick_stopped = 1; + trace_tick_stop(1, " "); } /* -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] nohz: Add basic tracing 2013-04-22 21:08 ` [PATCH 2/2] nohz: Add basic tracing Frederic Weisbecker @ 2013-04-23 18:12 ` Christoph Lameter 2013-04-23 20:00 ` Steven Rostedt 0 siblings, 1 reply; 6+ messages in thread From: Christoph Lameter @ 2013-04-23 18:12 UTC (permalink / raw) To: Frederic Weisbecker Cc: Ingo Molnar, LKML, Chris Metcalf, Geoff Levand, Gilad Ben Yossef, Hakan Akkan, Kevin Hilman, Li Zhong, Oleg Nesterov, Paul E. McKenney, Paul Gortmaker, Peter Zijlstra, Steven Rostedt, Thomas Gleixner On Mon, 22 Apr 2013, Frederic Weisbecker wrote: > It's not obvious to find out why the full dynticks subsystem > doesn't always stop the tick: whether this is due to kthreads, > posix timers, perf events, etc... > > These new tracepoints are here to help the user diagnose > the failures and test this feature. Very good. This will help a lot. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] nohz: Add basic tracing 2013-04-23 18:12 ` Christoph Lameter @ 2013-04-23 20:00 ` Steven Rostedt 2013-04-23 21:01 ` Paul E. McKenney 0 siblings, 1 reply; 6+ messages in thread From: Steven Rostedt @ 2013-04-23 20:00 UTC (permalink / raw) To: Christoph Lameter Cc: Frederic Weisbecker, Ingo Molnar, LKML, Chris Metcalf, Geoff Levand, Gilad Ben Yossef, Hakan Akkan, Kevin Hilman, Li Zhong, Oleg Nesterov, Paul E. McKenney, Paul Gortmaker, Peter Zijlstra, Thomas Gleixner On Tue, 2013-04-23 at 18:12 +0000, Christoph Lameter wrote: > On Mon, 22 Apr 2013, Frederic Weisbecker wrote: > > > It's not obvious to find out why the full dynticks subsystem > > doesn't always stop the tick: whether this is due to kthreads, > > posix timers, perf events, etc... > > > > These new tracepoints are here to help the user diagnose > > the failures and test this feature. > > Very good. This will help a lot. You can also do: cd /sys/kernel/debug/tracing echo 1 > max_graph_depth echo function_graph > current_tracer And then run your code, and look to see what happens on the cpu in question: cat per_cpu/cpuX/trace The "max_graph_depth" of one will make the function graph tracer just trace the first function that enters the kernel. You'll be able to see if the kernel did anything to your userspace application that wasn't planned. "max_graph_depth" was added in 3.9-rc1 -- Steve ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] nohz: Add basic tracing 2013-04-23 20:00 ` Steven Rostedt @ 2013-04-23 21:01 ` Paul E. McKenney 0 siblings, 0 replies; 6+ messages in thread From: Paul E. McKenney @ 2013-04-23 21:01 UTC (permalink / raw) To: Steven Rostedt Cc: Christoph Lameter, Frederic Weisbecker, Ingo Molnar, LKML, Chris Metcalf, Geoff Levand, Gilad Ben Yossef, Hakan Akkan, Kevin Hilman, Li Zhong, Oleg Nesterov, Paul Gortmaker, Peter Zijlstra, Thomas Gleixner On Tue, Apr 23, 2013 at 04:00:23PM -0400, Steven Rostedt wrote: > On Tue, 2013-04-23 at 18:12 +0000, Christoph Lameter wrote: > > On Mon, 22 Apr 2013, Frederic Weisbecker wrote: > > > > > It's not obvious to find out why the full dynticks subsystem > > > doesn't always stop the tick: whether this is due to kthreads, > > > posix timers, perf events, etc... > > > > > > These new tracepoints are here to help the user diagnose > > > the failures and test this feature. > > > > Very good. This will help a lot. > > You can also do: > > cd /sys/kernel/debug/tracing > echo 1 > max_graph_depth > echo function_graph > current_tracer > > And then run your code, and look to see what happens on the cpu in > question: > > cat per_cpu/cpuX/trace > > The "max_graph_depth" of one will make the function graph tracer just > trace the first function that enters the kernel. You'll be able to see > if the kernel did anything to your userspace application that wasn't > planned. > > "max_graph_depth" was added in 3.9-rc1 Very cool! I have added this to the documentation. Thanx, Paul ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-04-23 21:02 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-04-22 21:08 [GIT PULL] nohz: Help for testing Frederic Weisbecker 2013-04-22 21:08 ` [PATCH 1/2] nohz: Select wide RCU nocb for full dynticks Frederic Weisbecker 2013-04-22 21:08 ` [PATCH 2/2] nohz: Add basic tracing Frederic Weisbecker 2013-04-23 18:12 ` Christoph Lameter 2013-04-23 20:00 ` Steven Rostedt 2013-04-23 21:01 ` Paul E. McKenney
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox