blob: 8e4a2a61cd7525829ea2366ed5abbdc5b5da15fa [file] [log] [blame]
Arnaldo Carvalho de Melo16444a82008-05-12 21:20:42 +02001#
Steven Rostedt606576c2008-10-06 19:06:12 -04002# Architectures that offer an FUNCTION_TRACER implementation should
3# select HAVE_FUNCTION_TRACER:
Arnaldo Carvalho de Melo16444a82008-05-12 21:20:42 +02004#
Frédéric Weisbecker2a3a4f62008-09-21 20:12:14 +02005
Török Edwin8d264872008-11-23 12:39:08 +02006config USER_STACKTRACE_SUPPORT
7 bool
8
Frédéric Weisbecker2a3a4f62008-09-21 20:12:14 +02009config NOP_TRACER
10 bool
11
Steven Rostedt78d904b2009-02-05 18:43:07 -050012config HAVE_FTRACE_NMI_ENTER
13 bool
14
Steven Rostedt606576c2008-10-06 19:06:12 -040015config HAVE_FUNCTION_TRACER
Arnaldo Carvalho de Melo16444a82008-05-12 21:20:42 +020016 bool
Steven Rostedtbc0c38d2008-05-12 21:20:42 +020017
Frederic Weisbeckerfb526072008-11-25 21:07:04 +010018config HAVE_FUNCTION_GRAPH_TRACER
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +010019 bool
20
Steven Rostedt60a7ecf2008-11-05 16:05:44 -050021config HAVE_FUNCTION_TRACE_MCOUNT_TEST
22 bool
23 help
24 This gets selected when the arch tests the function_trace_stop
25 variable at the mcount call site. Otherwise, this variable
26 is tested by the called function.
27
Steven Rostedt677aa9f2008-05-17 00:01:36 -040028config HAVE_DYNAMIC_FTRACE
29 bool
30
Steven Rostedt8da38212008-08-14 15:45:07 -040031config HAVE_FTRACE_MCOUNT_RECORD
32 bool
33
Markus Metzger1e9b51c2008-11-25 09:24:15 +010034config HAVE_HW_BRANCH_TRACER
35 bool
36
Steven Rostedt352ad252008-05-12 21:20:42 +020037config TRACER_MAX_TRACE
38 bool
39
Steven Rostedt7a8e76a2008-09-29 23:02:38 -040040config RING_BUFFER
41 bool
42
Steven Rostedt78d904b2009-02-05 18:43:07 -050043config FTRACE_NMI_ENTER
44 bool
45 depends on HAVE_FTRACE_NMI_ENTER
46 default y
47
Steven Rostedtbc0c38d2008-05-12 21:20:42 +020048config TRACING
49 bool
50 select DEBUG_FS
Steven Rostedt7a8e76a2008-09-29 23:02:38 -040051 select RING_BUFFER
Al Viroc2c80522008-10-31 19:50:41 +000052 select STACKTRACE if STACKTRACE_SUPPORT
Ingo Molnar5f87f112008-07-23 14:15:22 +020053 select TRACEPOINTS
Steven Rostedtf3384b22008-10-29 11:15:57 -040054 select NOP_TRACER
Frederic Weisbecker769b0442009-03-06 17:21:49 +010055 select BINARY_PRINTF
Steven Rostedtbc0c38d2008-05-12 21:20:42 +020056
Ingo Molnar40ada302009-03-05 21:19:55 +010057#
58# Minimum requirements an architecture has to meet for us to
59# be able to offer generic tracing facilities:
60#
61config TRACING_SUPPORT
62 bool
63 depends on TRACE_IRQFLAGS_SUPPORT
64 depends on STACKTRACE_SUPPORT
KOSAKI Motohiro422d3c72009-03-06 10:40:53 +090065 default y
Ingo Molnar40ada302009-03-05 21:19:55 +010066
67if TRACING_SUPPORT
68
Peter Zijlstra17d80fd2008-10-21 16:31:18 +020069menu "Tracers"
70
Steven Rostedt606576c2008-10-06 19:06:12 -040071config FUNCTION_TRACER
Steven Rostedt1b29b012008-05-12 21:20:42 +020072 bool "Kernel Function Tracer"
Steven Rostedt606576c2008-10-06 19:06:12 -040073 depends on HAVE_FUNCTION_TRACER
Steven Rostedt1b29b012008-05-12 21:20:42 +020074 select FRAME_POINTER
Steven Rostedt4d7a0772009-02-18 22:06:18 -050075 select KALLSYMS
Steven Rostedt1b29b012008-05-12 21:20:42 +020076 select TRACING
Steven Rostedt35e8e302008-05-12 21:20:42 +020077 select CONTEXT_SWITCH_TRACER
Steven Rostedt1b29b012008-05-12 21:20:42 +020078 help
79 Enable the kernel to trace every kernel function. This is done
80 by using a compiler feature to insert a small, 5-byte No-Operation
81 instruction to the beginning of every kernel function, which NOP
82 sequence is then dynamically patched into a tracer call when
83 tracing is enabled by the administrator. If it's runtime disabled
84 (the bootup default), then the overhead of the instructions is very
85 small and not measurable even in micro-benchmarks.
Steven Rostedt35e8e302008-05-12 21:20:42 +020086
Frederic Weisbeckerfb526072008-11-25 21:07:04 +010087config FUNCTION_GRAPH_TRACER
88 bool "Kernel Function Graph Tracer"
89 depends on HAVE_FUNCTION_GRAPH_TRACER
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +010090 depends on FUNCTION_TRACER
Ingo Molnar764f3b92008-12-03 10:33:58 +010091 default y
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +010092 help
Frederic Weisbeckerfb526072008-11-25 21:07:04 +010093 Enable the kernel to trace a function at both its return
94 and its entry.
95 It's first purpose is to trace the duration of functions and
96 draw a call graph for each thread with some informations like
97 the return value.
98 This is done by setting the current return address on the current
99 task structure into a stack of calls.
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +0100100
Steven Rostedt81d68a92008-05-12 21:20:42 +0200101config IRQSOFF_TRACER
102 bool "Interrupts-off Latency Tracer"
103 default n
104 depends on TRACE_IRQFLAGS_SUPPORT
105 depends on GENERIC_TIME
106 select TRACE_IRQFLAGS
107 select TRACING
108 select TRACER_MAX_TRACE
109 help
110 This option measures the time spent in irqs-off critical
111 sections, with microsecond accuracy.
112
113 The default measurement method is a maximum search, which is
114 disabled by default and can be runtime (re-)started
115 via:
116
117 echo 0 > /debugfs/tracing/tracing_max_latency
118
Steven Rostedt6cd8a4b2008-05-12 21:20:42 +0200119 (Note that kernel size and overhead increases with this option
120 enabled. This option and the preempt-off timing option can be
121 used together or separately.)
122
123config PREEMPT_TRACER
124 bool "Preemption-off Latency Tracer"
125 default n
126 depends on GENERIC_TIME
127 depends on PREEMPT
128 select TRACING
129 select TRACER_MAX_TRACE
130 help
131 This option measures the time spent in preemption off critical
132 sections, with microsecond accuracy.
133
134 The default measurement method is a maximum search, which is
135 disabled by default and can be runtime (re-)started
136 via:
137
138 echo 0 > /debugfs/tracing/tracing_max_latency
139
140 (Note that kernel size and overhead increases with this option
141 enabled. This option and the irqs-off timing option can be
142 used together or separately.)
143
Ingo Molnarf06c3812008-05-12 21:20:47 +0200144config SYSPROF_TRACER
145 bool "Sysprof Tracer"
Thomas Gleixner4d2df792008-05-24 15:00:46 +0200146 depends on X86
Ingo Molnarf06c3812008-05-12 21:20:47 +0200147 select TRACING
Frederic Weisbeckerb22f4852009-02-10 15:49:11 +0100148 select CONTEXT_SWITCH_TRACER
Ingo Molnarf06c3812008-05-12 21:20:47 +0200149 help
150 This tracer provides the trace needed by the 'Sysprof' userspace
151 tool.
152
Steven Rostedt352ad252008-05-12 21:20:42 +0200153config SCHED_TRACER
154 bool "Scheduling Latency Tracer"
Steven Rostedt352ad252008-05-12 21:20:42 +0200155 select TRACING
156 select CONTEXT_SWITCH_TRACER
157 select TRACER_MAX_TRACE
158 help
159 This tracer tracks the latency of the highest priority task
160 to be scheduled in, starting from the point it has woken up.
161
Steven Rostedt35e8e302008-05-12 21:20:42 +0200162config CONTEXT_SWITCH_TRACER
163 bool "Trace process context switches"
Steven Rostedt35e8e302008-05-12 21:20:42 +0200164 select TRACING
165 select MARKERS
166 help
167 This tracer gets called from the context switch and records
168 all switching of tasks.
169
Steven Rostedtb77e38a2009-02-24 10:21:36 -0500170config EVENT_TRACER
171 bool "Trace various events in the kernel"
Steven Rostedtb77e38a2009-02-24 10:21:36 -0500172 select TRACING
173 help
174 This tracer hooks to various trace points in the kernel
175 allowing the user to pick and choose which trace point they
176 want to trace.
177
Frédéric Weisbecker1f5c2ab2008-09-23 11:36:20 +0100178config BOOT_TRACER
179 bool "Trace boot initcalls"
Frédéric Weisbecker1f5c2ab2008-09-23 11:36:20 +0100180 select TRACING
Frederic Weisbeckerea31e722008-10-22 19:26:23 +0200181 select CONTEXT_SWITCH_TRACER
Frédéric Weisbecker1f5c2ab2008-09-23 11:36:20 +0100182 help
183 This tracer helps developers to optimize boot times: it records
Ingo Molnar98d9c662008-10-14 14:27:20 +0200184 the timings of the initcalls and traces key events and the identity
185 of tasks that can cause boot delays, such as context-switches.
186
187 Its aim is to be parsed by the /scripts/bootgraph.pl tool to
188 produce pretty graphics about boot inefficiencies, giving a visual
189 representation of the delays during initcalls - but the raw
190 /debug/tracing/trace text output is readable too.
191
Steven Rostedt79fb0762009-02-02 21:38:33 -0500192 You must pass in ftrace=initcall to the kernel command line
193 to enable this on bootup.
Frédéric Weisbecker1f5c2ab2008-09-23 11:36:20 +0100194
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500195config TRACE_BRANCH_PROFILING
Steven Rostedt1f0d69a2008-11-12 00:14:39 -0500196 bool "Trace likely/unlikely profiler"
Steven Rostedt1f0d69a2008-11-12 00:14:39 -0500197 select TRACING
198 help
199 This tracer profiles all the the likely and unlikely macros
200 in the kernel. It will display the results in:
201
Steven Rostedt45b79742008-11-21 00:40:40 -0500202 /debugfs/tracing/profile_annotated_branch
Steven Rostedt1f0d69a2008-11-12 00:14:39 -0500203
204 Note: this will add a significant overhead, only turn this
205 on if you need to profile the system's use of these macros.
206
207 Say N if unsure.
208
Steven Rostedt2bcd5212008-11-21 01:30:54 -0500209config PROFILE_ALL_BRANCHES
210 bool "Profile all if conditionals"
211 depends on TRACE_BRANCH_PROFILING
212 help
213 This tracer profiles all branch conditions. Every if ()
214 taken in the kernel is recorded whether it hit or miss.
215 The results will be displayed in:
216
217 /debugfs/tracing/profile_branch
218
219 This configuration, when enabled, will impose a great overhead
220 on the system. This should only be enabled when the system
221 is to be analyzed
222
223 Say N if unsure.
224
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500225config TRACING_BRANCHES
Steven Rostedt52f232c2008-11-12 00:14:40 -0500226 bool
227 help
228 Selected by tracers that will trace the likely and unlikely
229 conditions. This prevents the tracers themselves from being
230 profiled. Profiling the tracing infrastructure can only happen
231 when the likelys and unlikelys are not being traced.
232
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500233config BRANCH_TRACER
Steven Rostedt52f232c2008-11-12 00:14:40 -0500234 bool "Trace likely/unlikely instances"
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500235 depends on TRACE_BRANCH_PROFILING
236 select TRACING_BRANCHES
Steven Rostedt52f232c2008-11-12 00:14:40 -0500237 help
238 This traces the events of likely and unlikely condition
239 calls in the kernel. The difference between this and the
240 "Trace likely/unlikely profiler" is that this is not a
241 histogram of the callers, but actually places the calling
242 events into a running trace buffer to see when and where the
243 events happened, as well as their results.
244
245 Say N if unsure.
246
Arjan van de Venf3f47a62008-11-23 16:49:58 -0800247config POWER_TRACER
248 bool "Trace power consumption behavior"
Arjan van de Venf3f47a62008-11-23 16:49:58 -0800249 depends on X86
250 select TRACING
251 help
252 This tracer helps developers to analyze and optimize the kernels
253 power management decisions, specifically the C-state and P-state
254 behavior.
255
256
Steven Rostedte5a81b62008-08-27 23:31:01 -0400257config STACK_TRACER
258 bool "Trace max stack"
Steven Rostedt606576c2008-10-06 19:06:12 -0400259 depends on HAVE_FUNCTION_TRACER
Steven Rostedt606576c2008-10-06 19:06:12 -0400260 select FUNCTION_TRACER
Steven Rostedte5a81b62008-08-27 23:31:01 -0400261 select STACKTRACE
Steven Rostedt4d7a0772009-02-18 22:06:18 -0500262 select KALLSYMS
Steven Rostedte5a81b62008-08-27 23:31:01 -0400263 help
Ingo Molnar4519d9e2008-10-14 14:15:43 +0200264 This special tracer records the maximum stack footprint of the
265 kernel and displays it in debugfs/tracing/stack_trace.
266
267 This tracer works by hooking into every function call that the
268 kernel executes, and keeping a maximum stack depth value and
Steven Rostedtf38f1d22008-12-16 23:06:40 -0500269 stack-trace saved. If this is configured with DYNAMIC_FTRACE
270 then it will not have any overhead while the stack tracer
271 is disabled.
272
273 To enable the stack tracer on bootup, pass in 'stacktrace'
274 on the kernel command line.
275
276 The stack tracer can also be enabled or disabled via the
277 sysctl kernel.stack_tracer_enabled
Ingo Molnar4519d9e2008-10-14 14:15:43 +0200278
279 Say N if unsure.
Steven Rostedte5a81b62008-08-27 23:31:01 -0400280
Markus Metzgera93751c2008-12-11 13:53:26 +0100281config HW_BRANCH_TRACER
Markus Metzger1e9b51c2008-11-25 09:24:15 +0100282 depends on HAVE_HW_BRANCH_TRACER
Markus Metzgera93751c2008-12-11 13:53:26 +0100283 bool "Trace hw branches"
Markus Metzger1e9b51c2008-11-25 09:24:15 +0100284 select TRACING
285 help
286 This tracer records all branches on the system in a circular
287 buffer giving access to the last N branches for each cpu.
288
Frederic Weisbecker36994e52008-12-29 13:42:23 -0800289config KMEMTRACE
290 bool "Trace SLAB allocations"
291 select TRACING
Frederic Weisbecker36994e52008-12-29 13:42:23 -0800292 help
293 kmemtrace provides tracing for slab allocator functions, such as
294 kmalloc, kfree, kmem_cache_alloc, kmem_cache_free etc.. Collected
295 data is then fed to the userspace application in order to analyse
296 allocation hotspots, internal fragmentation and so on, making it
297 possible to see how well an allocator performs, as well as debug
298 and profile kernel code.
299
300 This requires an userspace application to use. See
301 Documentation/vm/kmemtrace.txt for more information.
302
303 Saying Y will make the kernel somewhat larger and slower. However,
304 if you disable kmemtrace at run-time or boot-time, the performance
305 impact is minimal (depending on the arch the kernel is built for).
306
307 If unsure, say N.
308
Frederic Weisbeckere1d8aa92009-01-12 23:15:46 +0100309config WORKQUEUE_TRACER
310 bool "Trace workqueues"
311 select TRACING
312 help
313 The workqueue tracer provides some statistical informations
314 about each cpu workqueue thread such as the number of the
315 works inserted and executed since their creation. It can help
316 to evaluate the amount of work each of them have to perform.
317 For example it can help a developer to decide whether he should
318 choose a per cpu workqueue instead of a singlethreaded one.
319
Frederic Weisbecker2db270a2009-02-07 20:46:45 +0100320config BLK_DEV_IO_TRACE
321 bool "Support for tracing block io actions"
322 depends on SYSFS
Ingo Molnar1dfba052009-02-09 12:06:54 +0100323 depends on BLOCK
Frederic Weisbecker2db270a2009-02-07 20:46:45 +0100324 select RELAY
325 select DEBUG_FS
326 select TRACEPOINTS
327 select TRACING
328 select STACKTRACE
329 help
330 Say Y here if you want to be able to trace the block layer actions
331 on a given queue. Tracing allows you to see any traffic happening
332 on a block device queue. For more information (and the userspace
333 support tools needed), fetch the blktrace tools from:
334
335 git://git.kernel.dk/blktrace.git
336
337 Tracing also is possible using the ftrace interface, e.g.:
338
339 echo 1 > /sys/block/sda/sda1/trace/enable
340 echo blk > /sys/kernel/debug/tracing/current_tracer
341 cat /sys/kernel/debug/tracing/trace_pipe
342
343 If unsure, say N.
Frederic Weisbecker36994e52008-12-29 13:42:23 -0800344
Steven Rostedt3d083392008-05-12 21:20:42 +0200345config DYNAMIC_FTRACE
346 bool "enable/disable ftrace tracepoints dynamically"
Steven Rostedt606576c2008-10-06 19:06:12 -0400347 depends on FUNCTION_TRACER
Steven Rostedt677aa9f2008-05-17 00:01:36 -0400348 depends on HAVE_DYNAMIC_FTRACE
Steven Rostedt3d083392008-05-12 21:20:42 +0200349 default y
350 help
351 This option will modify all the calls to ftrace dynamically
352 (will patch them out of the binary image and replaces them
353 with a No-Op instruction) as they are called. A table is
354 created to dynamically enable them again.
355
Steven Rostedt606576c2008-10-06 19:06:12 -0400356 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise
Steven Rostedt3d083392008-05-12 21:20:42 +0200357 has native performance as long as no tracing is active.
358
359 The changes to the code are done by a kernel thread that
360 wakes up once a second and checks to see if any ftrace calls
361 were made. If so, it runs stop_machine (stops all CPUS)
362 and modifies the code to jump over the call to ftrace.
Steven Rostedt60a11772008-05-12 21:20:44 +0200363
Steven Rostedt8da38212008-08-14 15:45:07 -0400364config FTRACE_MCOUNT_RECORD
365 def_bool y
366 depends on DYNAMIC_FTRACE
367 depends on HAVE_FTRACE_MCOUNT_RECORD
368
Steven Rostedt60a11772008-05-12 21:20:44 +0200369config FTRACE_SELFTEST
370 bool
371
372config FTRACE_STARTUP_TEST
373 bool "Perform a startup test on ftrace"
Ingo Molnar40ada302009-03-05 21:19:55 +0100374 depends on TRACING
Steven Rostedt60a11772008-05-12 21:20:44 +0200375 select FTRACE_SELFTEST
376 help
377 This option performs a series of startup tests on ftrace. On bootup
378 a series of tests are made to verify that the tracer is
379 functioning properly. It will do tests on all the configured
380 tracers of ftrace.
Peter Zijlstra17d80fd2008-10-21 16:31:18 +0200381
Pekka Paalanenfe6f90e2009-01-03 21:23:51 +0200382config MMIOTRACE
383 bool "Memory mapped IO tracing"
Ingo Molnar40ada302009-03-05 21:19:55 +0100384 depends on HAVE_MMIOTRACE_SUPPORT && PCI
Pekka Paalanenfe6f90e2009-01-03 21:23:51 +0200385 select TRACING
386 help
387 Mmiotrace traces Memory Mapped I/O access and is meant for
388 debugging and reverse engineering. It is called from the ioremap
389 implementation and works via page faults. Tracing is disabled by
390 default and can be enabled at run-time.
391
392 See Documentation/tracers/mmiotrace.txt.
393 If you are not helping to develop drivers, say N.
394
395config MMIOTRACE_TEST
396 tristate "Test module for mmiotrace"
397 depends on MMIOTRACE && m
398 help
399 This is a dumb module for testing mmiotrace. It is very dangerous
400 as it will write garbage to IO memory starting at a given address.
401 However, it should be safe to use on e.g. unused portion of VRAM.
402
403 Say N, unless you absolutely know what you are doing.
404
Peter Zijlstra17d80fd2008-10-21 16:31:18 +0200405endmenu
Ingo Molnar40ada302009-03-05 21:19:55 +0100406
407endif # TRACING_SUPPORT
408