Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1621671 > unrolled thread
| Started by | Steven Rostedt <rostedt@goodmis.org> |
|---|---|
| First post | 2017-04-12 01:00 +0200 |
| Last post | 2017-04-12 01:50 +0200 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH] tracing: Have the trace_event benchmark thread call cond_resched_rcu_qs() Steven Rostedt <rostedt@goodmis.org> - 2017-04-12 01:00 +0200
Re: [PATCH] tracing: Have the trace_event benchmark thread call cond_resched_rcu_qs() Steven Rostedt <rostedt@goodmis.org> - 2017-04-12 01:00 +0200
Re: [PATCH] tracing: Have the trace_event benchmark thread call cond_resched_rcu_qs() "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2017-04-12 01:50 +0200
| From | Steven Rostedt <rostedt@goodmis.org> |
|---|---|
| Date | 2017-04-12 01:00 +0200 |
| Subject | [PATCH] tracing: Have the trace_event benchmark thread call cond_resched_rcu_qs() |
| Message-ID | <tvcVs-4Kn-3@gated-at.bofh.it> |
From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> The trace_event benchmark thread runs in kernel space in an infinite loop while also calling cond_resched() in case anything else wants to schedule in. Unfortunately, on a PREEMPT kernel, that makes it a nop, in which case, this will never voluntarily schedule. That will cause synchronize_rcu_tasks() to forever block on this thread, while it is running. This is exactly what cond_resched_rcu_qs() is for. Use that instead. Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> --- kernel/trace/trace_benchmark.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/kernel/trace/trace_benchmark.c b/kernel/trace/trace_benchmark.c index e49fbe9..16a8cf0 100644 --- a/kernel/trace/trace_benchmark.c +++ b/kernel/trace/trace_benchmark.c @@ -153,10 +153,18 @@ static int benchmark_event_kthread(void *arg) trace_do_benchmark(); /* - * We don't go to sleep, but let others - * run as well. + * We don't go to sleep, but let others run as well. + * This is bascially a "yield()" to let any task that + * wants to run, schedule in, but if the CPU is idle, + * we'll keep burning cycles. + * + * Note the _rcu_qs() version of cond_resched() will + * notify synchronize_rcu_tasks() that this thread has + * passed a quiescent state for rcu_tasks. Otherwise + * this thread will never voluntarily schedule which would + * block synchronize_rcu_tasks() indefinitely. */ - cond_resched(); + cond_resched_rcu_qs(); } return 0; -- 2.9.3
[toc] | [next] | [standalone]
| From | Steven Rostedt <rostedt@goodmis.org> |
|---|---|
| Date | 2017-04-12 01:00 +0200 |
| Message-ID | <tvcVs-4Kn-11@gated-at.bofh.it> |
| In reply to | #1621671 |
On Tue, 11 Apr 2017 18:54:35 -0400 Steven Rostedt <rostedt@goodmis.org> wrote: > From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> > > The trace_event benchmark thread runs in kernel space in an infinite loop > while also calling cond_resched() in case anything else wants to schedule > in. Unfortunately, on a PREEMPT kernel, that makes it a nop, in which case, > this will never voluntarily schedule. That will cause synchronize_rcu_tasks() > to forever block on this thread, while it is running. > > This is exactly what cond_resched_rcu_qs() is for. Use that instead. > > Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> This actually should be: Recommended-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> -- Steve > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> > ---
[toc] | [prev] | [next] | [standalone]
| From | "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> |
|---|---|
| Date | 2017-04-12 01:50 +0200 |
| Message-ID | <tvdHP-5iG-5@gated-at.bofh.it> |
| In reply to | #1621673 |
On Tue, Apr 11, 2017 at 06:56:01PM -0400, Steven Rostedt wrote: > On Tue, 11 Apr 2017 18:54:35 -0400 > Steven Rostedt <rostedt@goodmis.org> wrote: > > > From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> > > > > The trace_event benchmark thread runs in kernel space in an infinite loop > > while also calling cond_resched() in case anything else wants to schedule > > in. Unfortunately, on a PREEMPT kernel, that makes it a nop, in which case, > > this will never voluntarily schedule. That will cause synchronize_rcu_tasks() > > to forever block on this thread, while it is running. > > > > This is exactly what cond_resched_rcu_qs() is for. Use that instead. > > > > Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> > > This actually should be: > > Recommended-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> And: Acked-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> > -- Steve > > > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> > > --- >
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web