aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace.c
diff options
context:
space:
mode:
authorLi Zefan <lizf@cn.fujitsu.com>2010-07-01 23:07:32 -0400
committerSteven Rostedt <rostedt@goodmis.org>2010-07-20 21:52:33 -0400
commite870e9a1240bcef1157ffaaf71dac63362e71904 (patch)
treeb8f57a68ff45b35dab8cdfa474e17622d275bdc6 /kernel/trace/trace.c
parentcc5edb0eb9ce892b530e34a5d110382483587942 (diff)
tracing: Allow to disable cmdline recording
We found that even enabling a single trace event that will rarely be triggered can add big overhead to context switch. (lmbench context switch test) ------------------------------------------------- 2p/0K 2p/16K 2p/64K 8p/16K 8p/64K 16p/16K 16p/64K ctxsw ctxsw ctxsw ctxsw ctxsw ctxsw ctxsw ------ ------ ------ ------ ------ ------- ------- 2.19 2.3 2.21 2.56 2.13 2.54 2.07 2.39 2.51 2.35 2.75 2.27 2.81 2.24 The overhead is 6% ~ 11%. It's because when a trace event is enabled 3 tracepoints (sched_switch, sched_wakeup, sched_wakeup_new) will be activated to map pid to cmdname. We'd like to avoid this overhead, so add a trace option '(no)record-cmd' to allow to disable cmdline recording. Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> LKML-Reference: <4C2D57F4.2050204@cn.fujitsu.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r--kernel/trace/trace.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 8683dec6946b..af9042977c08 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -344,7 +344,7 @@ static DECLARE_WAIT_QUEUE_HEAD(trace_wait);
344/* trace_flags holds trace_options default values */ 344/* trace_flags holds trace_options default values */
345unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK | 345unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
346 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | TRACE_ITER_SLEEP_TIME | 346 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | TRACE_ITER_SLEEP_TIME |
347 TRACE_ITER_GRAPH_TIME; 347 TRACE_ITER_GRAPH_TIME | TRACE_ITER_RECORD_CMD;
348 348
349static int trace_stop_count; 349static int trace_stop_count;
350static DEFINE_SPINLOCK(tracing_start_lock); 350static DEFINE_SPINLOCK(tracing_start_lock);
@@ -428,6 +428,7 @@ static const char *trace_options[] = {
428 "latency-format", 428 "latency-format",
429 "sleep-time", 429 "sleep-time",
430 "graph-time", 430 "graph-time",
431 "record-cmd",
431 NULL 432 NULL
432}; 433};
433 434
@@ -2561,6 +2562,9 @@ static void set_tracer_flags(unsigned int mask, int enabled)
2561 trace_flags |= mask; 2562 trace_flags |= mask;
2562 else 2563 else
2563 trace_flags &= ~mask; 2564 trace_flags &= ~mask;
2565
2566 if (mask == TRACE_ITER_RECORD_CMD)
2567 trace_event_enable_cmd_record(enabled);
2564} 2568}
2565 2569
2566static ssize_t 2570static ssize_t