diff options
author | Li Zefan <lizf@cn.fujitsu.com> | 2010-07-01 23:07:32 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-07-20 21:52:33 -0400 |
commit | e870e9a1240bcef1157ffaaf71dac63362e71904 (patch) | |
tree | b8f57a68ff45b35dab8cdfa474e17622d275bdc6 /kernel/trace/trace.c | |
parent | cc5edb0eb9ce892b530e34a5d110382483587942 (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.c | 6 |
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 */ |
345 | unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK | | 345 | unsigned 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 | ||
349 | static int trace_stop_count; | 349 | static int trace_stop_count; |
350 | static DEFINE_SPINLOCK(tracing_start_lock); | 350 | static 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 | ||
2566 | static ssize_t | 2570 | static ssize_t |