blob: 95e9ad5735d9c29aa62f5694c2927335198f275e [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
Frederic Weisbeckeree08c6e2009-03-07 05:52:59 +010037config HAVE_FTRACE_SYSCALLS
38 bool
39
Steven Rostedt352ad252008-05-12 21:20:42 +020040config TRACER_MAX_TRACE
41 bool
42
Steven Rostedt7a8e76a2008-09-29 23:02:38 -040043config RING_BUFFER
44 bool
45
Steven Rostedt78d904b2009-02-05 18:43:07 -050046config FTRACE_NMI_ENTER
47 bool
48 depends on HAVE_FTRACE_NMI_ENTER
49 default y
50
Steven Rostedtbc0c38d2008-05-12 21:20:42 +020051config TRACING
52 bool
53 select DEBUG_FS
Steven Rostedt7a8e76a2008-09-29 23:02:38 -040054 select RING_BUFFER
Al Viroc2c80522008-10-31 19:50:41 +000055 select STACKTRACE if STACKTRACE_SUPPORT
Ingo Molnar5f87f112008-07-23 14:15:22 +020056 select TRACEPOINTS
Steven Rostedtf3384b22008-10-29 11:15:57 -040057 select NOP_TRACER
Frederic Weisbecker769b0442009-03-06 17:21:49 +010058 select BINARY_PRINTF
Steven Rostedtbc0c38d2008-05-12 21:20:42 +020059
Ingo Molnar40ada302009-03-05 21:19:55 +010060#
61# Minimum requirements an architecture has to meet for us to
62# be able to offer generic tracing facilities:
63#
64config TRACING_SUPPORT
65 bool
Anton Vorontsov45b95602009-03-24 01:07:24 +030066 # PPC32 has no irqflags tracing support, but it can use most of the
67 # tracers anyway, they were tested to build and work. Note that new
68 # exceptions to this list aren't welcomed, better implement the
69 # irqflags tracing for your architecture.
70 depends on TRACE_IRQFLAGS_SUPPORT || PPC32
Ingo Molnar40ada302009-03-05 21:19:55 +010071 depends on STACKTRACE_SUPPORT
KOSAKI Motohiro422d3c72009-03-06 10:40:53 +090072 default y
Ingo Molnar40ada302009-03-05 21:19:55 +010073
74if TRACING_SUPPORT
75
Peter Zijlstra17d80fd2008-10-21 16:31:18 +020076menu "Tracers"
77
Steven Rostedt606576c2008-10-06 19:06:12 -040078config FUNCTION_TRACER
Steven Rostedt1b29b012008-05-12 21:20:42 +020079 bool "Kernel Function Tracer"
Steven Rostedt606576c2008-10-06 19:06:12 -040080 depends on HAVE_FUNCTION_TRACER
Steven Rostedt1b29b012008-05-12 21:20:42 +020081 select FRAME_POINTER
Steven Rostedt4d7a0772009-02-18 22:06:18 -050082 select KALLSYMS
Steven Rostedt1b29b012008-05-12 21:20:42 +020083 select TRACING
Steven Rostedt35e8e302008-05-12 21:20:42 +020084 select CONTEXT_SWITCH_TRACER
Steven Rostedt1b29b012008-05-12 21:20:42 +020085 help
86 Enable the kernel to trace every kernel function. This is done
87 by using a compiler feature to insert a small, 5-byte No-Operation
88 instruction to the beginning of every kernel function, which NOP
89 sequence is then dynamically patched into a tracer call when
90 tracing is enabled by the administrator. If it's runtime disabled
91 (the bootup default), then the overhead of the instructions is very
92 small and not measurable even in micro-benchmarks.
Steven Rostedt35e8e302008-05-12 21:20:42 +020093
Frederic Weisbeckerfb526072008-11-25 21:07:04 +010094config FUNCTION_GRAPH_TRACER
95 bool "Kernel Function Graph Tracer"
96 depends on HAVE_FUNCTION_GRAPH_TRACER
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +010097 depends on FUNCTION_TRACER
Ingo Molnar764f3b92008-12-03 10:33:58 +010098 default y
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +010099 help
Frederic Weisbeckerfb526072008-11-25 21:07:04 +0100100 Enable the kernel to trace a function at both its return
101 and its entry.
102 It's first purpose is to trace the duration of functions and
103 draw a call graph for each thread with some informations like
104 the return value.
105 This is done by setting the current return address on the current
106 task structure into a stack of calls.
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +0100107
Steven Rostedtbac429f2009-03-20 12:50:56 -0400108
Steven Rostedt81d68a92008-05-12 21:20:42 +0200109config IRQSOFF_TRACER
110 bool "Interrupts-off Latency Tracer"
111 default n
112 depends on TRACE_IRQFLAGS_SUPPORT
113 depends on GENERIC_TIME
114 select TRACE_IRQFLAGS
115 select TRACING
116 select TRACER_MAX_TRACE
117 help
118 This option measures the time spent in irqs-off critical
119 sections, with microsecond accuracy.
120
121 The default measurement method is a maximum search, which is
122 disabled by default and can be runtime (re-)started
123 via:
124
125 echo 0 > /debugfs/tracing/tracing_max_latency
126
Steven Rostedt6cd8a4b2008-05-12 21:20:42 +0200127 (Note that kernel size and overhead increases with this option
128 enabled. This option and the preempt-off timing option can be
129 used together or separately.)
130
131config PREEMPT_TRACER
132 bool "Preemption-off Latency Tracer"
133 default n
134 depends on GENERIC_TIME
135 depends on PREEMPT
136 select TRACING
137 select TRACER_MAX_TRACE
138 help
139 This option measures the time spent in preemption off critical
140 sections, with microsecond accuracy.
141
142 The default measurement method is a maximum search, which is
143 disabled by default and can be runtime (re-)started
144 via:
145
146 echo 0 > /debugfs/tracing/tracing_max_latency
147
148 (Note that kernel size and overhead increases with this option
149 enabled. This option and the irqs-off timing option can be
150 used together or separately.)
151
Ingo Molnarf06c3812008-05-12 21:20:47 +0200152config SYSPROF_TRACER
153 bool "Sysprof Tracer"
Thomas Gleixner4d2df792008-05-24 15:00:46 +0200154 depends on X86
Ingo Molnarf06c3812008-05-12 21:20:47 +0200155 select TRACING
Frederic Weisbeckerb22f48582009-02-10 15:49:11 +0100156 select CONTEXT_SWITCH_TRACER
Ingo Molnarf06c3812008-05-12 21:20:47 +0200157 help
158 This tracer provides the trace needed by the 'Sysprof' userspace
159 tool.
160
Steven Rostedt352ad252008-05-12 21:20:42 +0200161config SCHED_TRACER
162 bool "Scheduling Latency Tracer"
Steven Rostedt352ad252008-05-12 21:20:42 +0200163 select TRACING
164 select CONTEXT_SWITCH_TRACER
165 select TRACER_MAX_TRACE
166 help
167 This tracer tracks the latency of the highest priority task
168 to be scheduled in, starting from the point it has woken up.
169
Steven Rostedt35e8e302008-05-12 21:20:42 +0200170config CONTEXT_SWITCH_TRACER
171 bool "Trace process context switches"
Steven Rostedt35e8e302008-05-12 21:20:42 +0200172 select TRACING
173 select MARKERS
174 help
175 This tracer gets called from the context switch and records
176 all switching of tasks.
177
Steven Rostedtb77e38a2009-02-24 10:21:36 -0500178config EVENT_TRACER
179 bool "Trace various events in the kernel"
Steven Rostedtb77e38a2009-02-24 10:21:36 -0500180 select TRACING
181 help
182 This tracer hooks to various trace points in the kernel
183 allowing the user to pick and choose which trace point they
184 want to trace.
185
Frederic Weisbeckeree08c6e2009-03-07 05:52:59 +0100186config FTRACE_SYSCALLS
187 bool "Trace syscalls"
188 depends on HAVE_FTRACE_SYSCALLS
189 select TRACING
Frederic Weisbecker0ea1c412009-03-15 22:10:38 +0100190 select KALLSYMS
Frederic Weisbeckeree08c6e2009-03-07 05:52:59 +0100191 help
192 Basic tracer to catch the syscall entry and exit events.
193
Frédéric Weisbecker1f5c2ab2008-09-23 11:36:20 +0100194config BOOT_TRACER
195 bool "Trace boot initcalls"
Frédéric Weisbecker1f5c2ab2008-09-23 11:36:20 +0100196 select TRACING
Frederic Weisbeckerea31e722008-10-22 19:26:23 +0200197 select CONTEXT_SWITCH_TRACER
Frédéric Weisbecker1f5c2ab2008-09-23 11:36:20 +0100198 help
199 This tracer helps developers to optimize boot times: it records
Ingo Molnar98d9c662008-10-14 14:27:20 +0200200 the timings of the initcalls and traces key events and the identity
201 of tasks that can cause boot delays, such as context-switches.
202
203 Its aim is to be parsed by the /scripts/bootgraph.pl tool to
204 produce pretty graphics about boot inefficiencies, giving a visual
205 representation of the delays during initcalls - but the raw
206 /debug/tracing/trace text output is readable too.
207
Steven Rostedt79fb0768f2009-02-02 21:38:33 -0500208 You must pass in ftrace=initcall to the kernel command line
209 to enable this on bootup.
Frédéric Weisbecker1f5c2ab2008-09-23 11:36:20 +0100210
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500211config TRACE_BRANCH_PROFILING
Steven Rostedt1f0d69a2008-11-12 00:14:39 -0500212 bool "Trace likely/unlikely profiler"
Steven Rostedt1f0d69a2008-11-12 00:14:39 -0500213 select TRACING
214 help
215 This tracer profiles all the the likely and unlikely macros
216 in the kernel. It will display the results in:
217
Steven Rostedt45b79742008-11-21 00:40:40 -0500218 /debugfs/tracing/profile_annotated_branch
Steven Rostedt1f0d69a2008-11-12 00:14:39 -0500219
220 Note: this will add a significant overhead, only turn this
221 on if you need to profile the system's use of these macros.
222
223 Say N if unsure.
224
Steven Rostedt2bcd5212008-11-21 01:30:54 -0500225config PROFILE_ALL_BRANCHES
226 bool "Profile all if conditionals"
227 depends on TRACE_BRANCH_PROFILING
228 help
229 This tracer profiles all branch conditions. Every if ()
230 taken in the kernel is recorded whether it hit or miss.
231 The results will be displayed in:
232
233 /debugfs/tracing/profile_branch
234
235 This configuration, when enabled, will impose a great overhead
236 on the system. This should only be enabled when the system
237 is to be analyzed
238
239 Say N if unsure.
240
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500241config TRACING_BRANCHES
Steven Rostedt52f232c2008-11-12 00:14:40 -0500242 bool
243 help
244 Selected by tracers that will trace the likely and unlikely
245 conditions. This prevents the tracers themselves from being
246 profiled. Profiling the tracing infrastructure can only happen
247 when the likelys and unlikelys are not being traced.
248
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500249config BRANCH_TRACER
Steven Rostedt52f232c2008-11-12 00:14:40 -0500250 bool "Trace likely/unlikely instances"
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500251 depends on TRACE_BRANCH_PROFILING
252 select TRACING_BRANCHES
Steven Rostedt52f232c2008-11-12 00:14:40 -0500253 help
254 This traces the events of likely and unlikely condition
255 calls in the kernel. The difference between this and the
256 "Trace likely/unlikely profiler" is that this is not a
257 histogram of the callers, but actually places the calling
258 events into a running trace buffer to see when and where the
259 events happened, as well as their results.
260
261 Say N if unsure.
262
Arjan van de Venf3f47a62008-11-23 16:49:58 -0800263config POWER_TRACER
264 bool "Trace power consumption behavior"
Arjan van de Venf3f47a62008-11-23 16:49:58 -0800265 depends on X86
266 select TRACING
267 help
268 This tracer helps developers to analyze and optimize the kernels
269 power management decisions, specifically the C-state and P-state
270 behavior.
271
272
Steven Rostedte5a81b62008-08-27 23:31:01 -0400273config STACK_TRACER
274 bool "Trace max stack"
Steven Rostedt606576c2008-10-06 19:06:12 -0400275 depends on HAVE_FUNCTION_TRACER
Steven Rostedt606576c2008-10-06 19:06:12 -0400276 select FUNCTION_TRACER
Steven Rostedte5a81b62008-08-27 23:31:01 -0400277 select STACKTRACE
Steven Rostedt4d7a0772009-02-18 22:06:18 -0500278 select KALLSYMS
Steven Rostedte5a81b62008-08-27 23:31:01 -0400279 help
Ingo Molnar4519d9e2008-10-14 14:15:43 +0200280 This special tracer records the maximum stack footprint of the
281 kernel and displays it in debugfs/tracing/stack_trace.
282
283 This tracer works by hooking into every function call that the
284 kernel executes, and keeping a maximum stack depth value and
Steven Rostedtf38f1d22008-12-16 23:06:40 -0500285 stack-trace saved. If this is configured with DYNAMIC_FTRACE
286 then it will not have any overhead while the stack tracer
287 is disabled.
288
289 To enable the stack tracer on bootup, pass in 'stacktrace'
290 on the kernel command line.
291
292 The stack tracer can also be enabled or disabled via the
293 sysctl kernel.stack_tracer_enabled
Ingo Molnar4519d9e2008-10-14 14:15:43 +0200294
295 Say N if unsure.
Steven Rostedte5a81b62008-08-27 23:31:01 -0400296
Markus Metzgera93751c2008-12-11 13:53:26 +0100297config HW_BRANCH_TRACER
Markus Metzger1e9b51c2008-11-25 09:24:15 +0100298 depends on HAVE_HW_BRANCH_TRACER
Markus Metzgera93751c2008-12-11 13:53:26 +0100299 bool "Trace hw branches"
Markus Metzger1e9b51c2008-11-25 09:24:15 +0100300 select TRACING
301 help
302 This tracer records all branches on the system in a circular
303 buffer giving access to the last N branches for each cpu.
304
Frederic Weisbecker36994e52008-12-29 13:42:23 -0800305config KMEMTRACE
306 bool "Trace SLAB allocations"
307 select TRACING
Frederic Weisbecker36994e52008-12-29 13:42:23 -0800308 help
309 kmemtrace provides tracing for slab allocator functions, such as
310 kmalloc, kfree, kmem_cache_alloc, kmem_cache_free etc.. Collected
311 data is then fed to the userspace application in order to analyse
312 allocation hotspots, internal fragmentation and so on, making it
313 possible to see how well an allocator performs, as well as debug
314 and profile kernel code.
315
316 This requires an userspace application to use. See
317 Documentation/vm/kmemtrace.txt for more information.
318
319 Saying Y will make the kernel somewhat larger and slower. However,
320 if you disable kmemtrace at run-time or boot-time, the performance
321 impact is minimal (depending on the arch the kernel is built for).
322
323 If unsure, say N.
324
Frederic Weisbeckere1d8aa92009-01-12 23:15:46 +0100325config WORKQUEUE_TRACER
326 bool "Trace workqueues"
327 select TRACING
328 help
329 The workqueue tracer provides some statistical informations
330 about each cpu workqueue thread such as the number of the
331 works inserted and executed since their creation. It can help
332 to evaluate the amount of work each of them have to perform.
333 For example it can help a developer to decide whether he should
334 choose a per cpu workqueue instead of a singlethreaded one.
335
Frederic Weisbecker2db270a2009-02-07 20:46:45 +0100336config BLK_DEV_IO_TRACE
337 bool "Support for tracing block io actions"
338 depends on SYSFS
Ingo Molnar1dfba052009-02-09 12:06:54 +0100339 depends on BLOCK
Frederic Weisbecker2db270a2009-02-07 20:46:45 +0100340 select RELAY
341 select DEBUG_FS
342 select TRACEPOINTS
343 select TRACING
344 select STACKTRACE
345 help
346 Say Y here if you want to be able to trace the block layer actions
347 on a given queue. Tracing allows you to see any traffic happening
348 on a block device queue. For more information (and the userspace
349 support tools needed), fetch the blktrace tools from:
350
351 git://git.kernel.dk/blktrace.git
352
353 Tracing also is possible using the ftrace interface, e.g.:
354
355 echo 1 > /sys/block/sda/sda1/trace/enable
356 echo blk > /sys/kernel/debug/tracing/current_tracer
357 cat /sys/kernel/debug/tracing/trace_pipe
358
359 If unsure, say N.
Frederic Weisbecker36994e52008-12-29 13:42:23 -0800360
Steven Rostedt3d083392008-05-12 21:20:42 +0200361config DYNAMIC_FTRACE
362 bool "enable/disable ftrace tracepoints dynamically"
Steven Rostedt606576c2008-10-06 19:06:12 -0400363 depends on FUNCTION_TRACER
Steven Rostedt677aa9f2008-05-17 00:01:36 -0400364 depends on HAVE_DYNAMIC_FTRACE
Steven Rostedt3d083392008-05-12 21:20:42 +0200365 default y
366 help
367 This option will modify all the calls to ftrace dynamically
368 (will patch them out of the binary image and replaces them
369 with a No-Op instruction) as they are called. A table is
370 created to dynamically enable them again.
371
Steven Rostedt606576c2008-10-06 19:06:12 -0400372 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise
Steven Rostedt3d083392008-05-12 21:20:42 +0200373 has native performance as long as no tracing is active.
374
375 The changes to the code are done by a kernel thread that
376 wakes up once a second and checks to see if any ftrace calls
377 were made. If so, it runs stop_machine (stops all CPUS)
378 and modifies the code to jump over the call to ftrace.
Steven Rostedt60a11772008-05-12 21:20:44 +0200379
Steven Rostedtbac429f2009-03-20 12:50:56 -0400380config FUNCTION_PROFILER
381 bool "Kernel function profiler"
382 depends on DYNAMIC_FTRACE
383 default n
384 help
385 This option enables the kernel function profiler. When the dynamic
386 function tracing is enabled, a counter is added into the function
387 records used by the dynamic function tracer. A file is created in
388 debugfs called function_profile_enabled which defaults to zero.
389 When a 1 is echoed into this file profiling begins, and when a
390 zero is entered, profiling stops. A file in the trace_stats
391 directory called functions, that show the list of functions that
392 have been hit and their counters.
393
394 This takes up around 320K more memory.
395
396 If in doubt, say N
397
Steven Rostedt8da38212008-08-14 15:45:07 -0400398config FTRACE_MCOUNT_RECORD
399 def_bool y
400 depends on DYNAMIC_FTRACE
401 depends on HAVE_FTRACE_MCOUNT_RECORD
402
Steven Rostedt60a11772008-05-12 21:20:44 +0200403config FTRACE_SELFTEST
404 bool
405
406config FTRACE_STARTUP_TEST
407 bool "Perform a startup test on ftrace"
Ingo Molnar40ada302009-03-05 21:19:55 +0100408 depends on TRACING
Steven Rostedt60a11772008-05-12 21:20:44 +0200409 select FTRACE_SELFTEST
410 help
411 This option performs a series of startup tests on ftrace. On bootup
412 a series of tests are made to verify that the tracer is
413 functioning properly. It will do tests on all the configured
414 tracers of ftrace.
Peter Zijlstra17d80fd2008-10-21 16:31:18 +0200415
Pekka Paalanenfe6f90e2009-01-03 21:23:51 +0200416config MMIOTRACE
417 bool "Memory mapped IO tracing"
Ingo Molnar40ada302009-03-05 21:19:55 +0100418 depends on HAVE_MMIOTRACE_SUPPORT && PCI
Pekka Paalanenfe6f90e2009-01-03 21:23:51 +0200419 select TRACING
420 help
421 Mmiotrace traces Memory Mapped I/O access and is meant for
422 debugging and reverse engineering. It is called from the ioremap
423 implementation and works via page faults. Tracing is disabled by
424 default and can be enabled at run-time.
425
426 See Documentation/tracers/mmiotrace.txt.
427 If you are not helping to develop drivers, say N.
428
429config MMIOTRACE_TEST
430 tristate "Test module for mmiotrace"
431 depends on MMIOTRACE && m
432 help
433 This is a dumb module for testing mmiotrace. It is very dangerous
434 as it will write garbage to IO memory starting at a given address.
435 However, it should be safe to use on e.g. unused portion of VRAM.
436
437 Say N, unless you absolutely know what you are doing.
438
Peter Zijlstra17d80fd2008-10-21 16:31:18 +0200439endmenu
Ingo Molnar40ada302009-03-05 21:19:55 +0100440
441endif # TRACING_SUPPORT
442