aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/kthread.c
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>2008-07-18 12:16:17 -0400
committerIngo Molnar <mingo@elte.hu>2008-10-14 04:30:52 -0400
commit0a16b6075843325dc402edf80c1662838b929aff (patch)
tree124e49d8c0196f3c6eb7aa09a7c4c3c3157fff7a /kernel/kthread.c
parent4a0897526bbc5c6ac0df80b16b8c60339e717ae2 (diff)
tracing, sched: LTTng instrumentation - scheduler
Instrument the scheduler activity (sched_switch, migration, wakeups, wait for a task, signal delivery) and process/thread creation/destruction (fork, exit, kthread stop). Actually, kthread creation is not instrumented in this patch because it is architecture dependent. It allows to connect tracers such as ftrace which detects scheduling latencies, good/bad scheduler decisions. Tools like LTTng can export this scheduler information along with instrumentation of the rest of the kernel activity to perform post-mortem analysis on the scheduler activity. About the performance impact of tracepoints (which is comparable to markers), even without immediate values optimizations, tests done by Hideo Aoki on ia64 show no regression. His test case was using hackbench on a kernel where scheduler instrumentation (about 5 events in code scheduler code) was added. See the "Tracepoints" patch header for performance result detail. Changelog : - Change instrumentation location and parameter to match ftrace instrumentation, previously done with kernel markers. [ mingo@elte.hu: conflict resolutions ] Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> Acked-by: 'Peter Zijlstra' <peterz@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/kthread.c')
-rw-r--r--kernel/kthread.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/kthread.c b/kernel/kthread.c
index 96cff2f8710b..50598e29439a 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -13,6 +13,7 @@
13#include <linux/file.h> 13#include <linux/file.h>
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/mutex.h> 15#include <linux/mutex.h>
16#include <trace/sched.h>
16 17
17#define KTHREAD_NICE_LEVEL (-5) 18#define KTHREAD_NICE_LEVEL (-5)
18 19
@@ -206,6 +207,8 @@ int kthread_stop(struct task_struct *k)
206 /* It could exit after stop_info.k set, but before wake_up_process. */ 207 /* It could exit after stop_info.k set, but before wake_up_process. */
207 get_task_struct(k); 208 get_task_struct(k);
208 209
210 trace_sched_kthread_stop(k);
211
209 /* Must init completion *before* thread sees kthread_stop_info.k */ 212 /* Must init completion *before* thread sees kthread_stop_info.k */
210 init_completion(&kthread_stop_info.done); 213 init_completion(&kthread_stop_info.done);
211 smp_wmb(); 214 smp_wmb();
@@ -221,6 +224,8 @@ int kthread_stop(struct task_struct *k)
221 ret = kthread_stop_info.err; 224 ret = kthread_stop_info.err;
222 mutex_unlock(&kthread_stop_lock); 225 mutex_unlock(&kthread_stop_lock);
223 226
227 trace_sched_kthread_stop_ret(ret);
228
224 return ret; 229 return ret;
225} 230}
226EXPORT_SYMBOL(kthread_stop); 231EXPORT_SYMBOL(kthread_stop);