1
linux/kernel/trace
KOSAKI Motohiro c3ffc7a40b tracing: Don't use tracing_record_cmdline() in workqueue tracer
Impact: improve workqueue tracer output

Currently, /sys/kernel/debug/tracing/trace_stat/workqueues can display
wrong and strange thread names.

Why?

Currently, ftrace has tracing_record_cmdline()/trace_find_cmdline()
convenience function that implements a task->comm string cache.

This can avoid unnecessary memcpy overhead and the workqueue tracer
uses it.

However, in general, any trace statistics feature shouldn't use
tracing_record_cmdline() because trace statistics can display
very old process. Then comm cache can return wrong string because
recent process overrides the cache.

Fortunately, workqueue trace guarantees that displayed processes
are live. Thus we can search comm string from PID at display time.

<before>

% cat workqueues
 # CPU  INSERTED  EXECUTED   NAME
 # |      |         |          |

   7 431913     431913       kondemand/7
   7      0          0       tail
   7     21         21       git
   7      0          0       ls
   7      9          9       cat
   7 832632     832632       unix_chkpwd
   7 236292     236292       ls

Note: tail, git, ls, cat unix_chkpwd are obiously not workqueue thread.

<after>

% cat workqueues
 # CPU  INSERTED  EXECUTED   NAME
 # |      |         |          |

   7    510        510       kondemand/7
   7      0          0       kmpathd/7
   7     15         15       ata/7
   7      0          0       aio/7
   7     11         11       kblockd/7
   7   1063       1063       work_on_cpu/7
   7    167        167       events/7

Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: Steven Rostedt <srostedt@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-03-09 10:26:13 +01:00
..
blktrace.c Merge branch 'x86/core' into tracing/textedit 2009-03-06 16:45:01 +01:00
events.c tracing: add raw trace point recording infrastructure 2009-02-28 03:09:32 -05:00
ftrace.c tracing: fix deadlock when setting set_ftrace_pid 2009-03-06 12:07:38 +01:00
Kconfig tracing/core: drop the old trace_printk() implementation in favour of trace_bprintk() 2009-03-06 17:59:12 +01:00
kmemtrace.c tracing: Introduce trace_buffer_{lock_reserve,unlock_commit} 2009-02-06 01:01:41 +01:00
Makefile tracing/core: drop the old trace_printk() implementation in favour of trace_bprintk() 2009-03-06 17:59:12 +01:00
ring_buffer.c tracing: make all file_operations const 2009-03-05 21:46:40 -05:00
trace_boot.c tracing: Introduce trace_buffer_{lock_reserve,unlock_commit} 2009-02-06 01:01:41 +01:00
trace_branch.c tracing: remove extra latency_trace method from trace structure 2009-03-04 21:42:04 -05:00
trace_clock.c tracing: implement trace_clock_*() APIs 2009-02-26 18:44:06 +01:00
trace_event_types.h tracing: add format files for ftrace default entries 2009-03-05 21:46:44 -05:00
trace_events_stage_1.h tracing: add TRACE_FIELD_SPECIAL to record complex entries 2009-03-02 10:53:15 -05:00
trace_events_stage_2.h tracing: move print of event format to separate file 2009-03-05 21:46:42 -05:00
trace_events_stage_3.h tracing: add lockdep tracepoints for lock acquire/release 2009-03-04 18:49:58 +01:00
trace_events.c tracing: add format files for ftrace default entries 2009-03-05 21:46:44 -05:00
trace_export.c tracing: add format files for ftrace default entries 2009-03-05 21:46:44 -05:00
trace_format.h tracing: add format files for ftrace default entries 2009-03-05 21:46:44 -05:00
trace_functions_graph.c tracing/core: drop the old trace_printk() implementation in favour of trace_bprintk() 2009-03-06 17:59:12 +01:00
trace_functions.c tracing/core: use appropriate waiting on trace_pipe 2009-02-18 01:40:20 +01:00
trace_hw_branches.c tracing/hw-branch-tracing: convert bts-tracer mutex to a spinlock 2009-02-25 09:16:01 +01:00
trace_irqsoff.c tracing: have latency tracers set the latency format 2009-03-04 22:15:30 -05:00
trace_mmiotrace.c tracing/core: drop the old trace_printk() implementation in favour of trace_bprintk() 2009-03-06 17:59:12 +01:00
trace_nop.c trace: Call tracing_reset_online_cpus before tracer->init() 2009-02-06 01:01:41 +01:00
trace_output.c tracing/core: drop the old trace_printk() implementation in favour of trace_bprintk() 2009-03-06 17:59:12 +01:00
trace_output.h tracing/core: drop the old trace_printk() implementation in favour of trace_bprintk() 2009-03-06 17:59:12 +01:00
trace_power.c tracing: convert c/p state power tracer to use tracepoints 2009-02-13 09:06:18 -05:00
trace_printk.c tracing/core: drop the old trace_printk() implementation in favour of trace_bprintk() 2009-03-06 17:59:12 +01:00
trace_sched_switch.c tracing/core: use appropriate waiting on trace_pipe 2009-02-18 01:40:20 +01:00
trace_sched_wakeup.c tracing: have latency tracers set the latency format 2009-03-04 22:15:30 -05:00
trace_selftest_dynamic.c
trace_selftest.c Merge branches 'tracing/blktrace', 'tracing/ftrace' and 'tracing/urgent' into tracing/core 2009-02-19 10:20:17 +01:00
trace_stack.c trace: better use of stack_trace_enabled for boot up code 2008-12-18 12:56:56 +01:00
trace_stat.c tracing: fix typing mistake in hint message and comments 2009-02-17 12:38:24 -05:00
trace_stat.h tracing/ftrace: separate events tracing and stats tracing engine 2009-01-14 12:11:37 +01:00
trace_sysprof.c tracing: make all file_operations const 2009-03-05 21:46:40 -05:00
trace_workqueue.c tracing: Don't use tracing_record_cmdline() in workqueue tracer 2009-03-09 10:26:13 +01:00
trace.c ftrace: tracing header should put '#' at the beginning of a line 2009-03-08 16:57:22 +01:00
trace.h tracing: trace_bprintk() cleanups 2009-03-06 17:59:12 +01:00