Linux 3.7.1
[linux/fpc-iii.git] / kernel / trace / Kconfig
blob4cea4f41c1d9ed73eb56dcbcffe2ac427534b5a2
2 # Architectures that offer an FUNCTION_TRACER implementation should
3 #  select HAVE_FUNCTION_TRACER:
6 config USER_STACKTRACE_SUPPORT
7         bool
9 config NOP_TRACER
10         bool
12 config HAVE_FTRACE_NMI_ENTER
13         bool
14         help
15           See Documentation/trace/ftrace-design.txt
17 config HAVE_FUNCTION_TRACER
18         bool
19         help
20           See Documentation/trace/ftrace-design.txt
22 config HAVE_FUNCTION_GRAPH_TRACER
23         bool
24         help
25           See Documentation/trace/ftrace-design.txt
27 config HAVE_FUNCTION_GRAPH_FP_TEST
28         bool
29         help
30           See Documentation/trace/ftrace-design.txt
32 config HAVE_FUNCTION_TRACE_MCOUNT_TEST
33         bool
34         help
35           See Documentation/trace/ftrace-design.txt
37 config HAVE_DYNAMIC_FTRACE
38         bool
39         help
40           See Documentation/trace/ftrace-design.txt
42 config HAVE_FTRACE_MCOUNT_RECORD
43         bool
44         help
45           See Documentation/trace/ftrace-design.txt
47 config HAVE_SYSCALL_TRACEPOINTS
48         bool
49         help
50           See Documentation/trace/ftrace-design.txt
52 config HAVE_FENTRY
53         bool
54         help
55           Arch supports the gcc options -pg with -mfentry
57 config HAVE_C_RECORDMCOUNT
58         bool
59         help
60           C version of recordmcount available?
62 config TRACER_MAX_TRACE
63         bool
65 config TRACE_CLOCK
66         bool
68 config RING_BUFFER
69         bool
70         select TRACE_CLOCK
72 config FTRACE_NMI_ENTER
73        bool
74        depends on HAVE_FTRACE_NMI_ENTER
75        default y
77 config EVENT_TRACING
78         select CONTEXT_SWITCH_TRACER
79         bool
81 config EVENT_POWER_TRACING_DEPRECATED
82         depends on EVENT_TRACING
83         bool "Deprecated power event trace API, to be removed"
84         default y
85         help
86           Provides old power event types:
87           C-state/idle accounting events:
88           power:power_start
89           power:power_end
90           and old cpufreq accounting event:
91           power:power_frequency
92           This is for userspace compatibility
93           and will vanish after 5 kernel iterations,
94           namely 3.1.
96 config CONTEXT_SWITCH_TRACER
97         bool
99 config RING_BUFFER_ALLOW_SWAP
100         bool
101         help
102          Allow the use of ring_buffer_swap_cpu.
103          Adds a very slight overhead to tracing when enabled.
105 # All tracer options should select GENERIC_TRACER. For those options that are
106 # enabled by all tracers (context switch and event tracer) they select TRACING.
107 # This allows those options to appear when no other tracer is selected. But the
108 # options do not appear when something else selects it. We need the two options
109 # GENERIC_TRACER and TRACING to avoid circular dependencies to accomplish the
110 # hiding of the automatic options.
112 config TRACING
113         bool
114         select DEBUG_FS
115         select RING_BUFFER
116         select STACKTRACE if STACKTRACE_SUPPORT
117         select TRACEPOINTS
118         select NOP_TRACER
119         select BINARY_PRINTF
120         select EVENT_TRACING
121         select TRACE_CLOCK
123 config GENERIC_TRACER
124         bool
125         select TRACING
128 # Minimum requirements an architecture has to meet for us to
129 # be able to offer generic tracing facilities:
131 config TRACING_SUPPORT
132         bool
133         # PPC32 has no irqflags tracing support, but it can use most of the
134         # tracers anyway, they were tested to build and work. Note that new
135         # exceptions to this list aren't welcomed, better implement the
136         # irqflags tracing for your architecture.
137         depends on TRACE_IRQFLAGS_SUPPORT || PPC32
138         depends on STACKTRACE_SUPPORT
139         default y
141 if TRACING_SUPPORT
143 menuconfig FTRACE
144         bool "Tracers"
145         default y if DEBUG_KERNEL
146         help
147           Enable the kernel tracing infrastructure.
149 if FTRACE
151 config FUNCTION_TRACER
152         bool "Kernel Function Tracer"
153         depends on HAVE_FUNCTION_TRACER
154         select KALLSYMS
155         select GENERIC_TRACER
156         select CONTEXT_SWITCH_TRACER
157         help
158           Enable the kernel to trace every kernel function. This is done
159           by using a compiler feature to insert a small, 5-byte No-Operation
160           instruction at the beginning of every kernel function, which NOP
161           sequence is then dynamically patched into a tracer call when
162           tracing is enabled by the administrator. If it's runtime disabled
163           (the bootup default), then the overhead of the instructions is very
164           small and not measurable even in micro-benchmarks.
166 config FUNCTION_GRAPH_TRACER
167         bool "Kernel Function Graph Tracer"
168         depends on HAVE_FUNCTION_GRAPH_TRACER
169         depends on FUNCTION_TRACER
170         depends on !X86_32 || !CC_OPTIMIZE_FOR_SIZE
171         default y
172         help
173           Enable the kernel to trace a function at both its return
174           and its entry.
175           Its first purpose is to trace the duration of functions and
176           draw a call graph for each thread with some information like
177           the return value. This is done by setting the current return
178           address on the current task structure into a stack of calls.
181 config IRQSOFF_TRACER
182         bool "Interrupts-off Latency Tracer"
183         default n
184         depends on TRACE_IRQFLAGS_SUPPORT
185         depends on !ARCH_USES_GETTIMEOFFSET
186         select TRACE_IRQFLAGS
187         select GENERIC_TRACER
188         select TRACER_MAX_TRACE
189         select RING_BUFFER_ALLOW_SWAP
190         help
191           This option measures the time spent in irqs-off critical
192           sections, with microsecond accuracy.
194           The default measurement method is a maximum search, which is
195           disabled by default and can be runtime (re-)started
196           via:
198               echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
200           (Note that kernel size and overhead increase with this option
201           enabled. This option and the preempt-off timing option can be
202           used together or separately.)
204 config PREEMPT_TRACER
205         bool "Preemption-off Latency Tracer"
206         default n
207         depends on !ARCH_USES_GETTIMEOFFSET
208         depends on PREEMPT
209         select GENERIC_TRACER
210         select TRACER_MAX_TRACE
211         select RING_BUFFER_ALLOW_SWAP
212         help
213           This option measures the time spent in preemption-off critical
214           sections, with microsecond accuracy.
216           The default measurement method is a maximum search, which is
217           disabled by default and can be runtime (re-)started
218           via:
220               echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
222           (Note that kernel size and overhead increase with this option
223           enabled. This option and the irqs-off timing option can be
224           used together or separately.)
226 config SCHED_TRACER
227         bool "Scheduling Latency Tracer"
228         select GENERIC_TRACER
229         select CONTEXT_SWITCH_TRACER
230         select TRACER_MAX_TRACE
231         help
232           This tracer tracks the latency of the highest priority task
233           to be scheduled in, starting from the point it has woken up.
235 config ENABLE_DEFAULT_TRACERS
236         bool "Trace process context switches and events"
237         depends on !GENERIC_TRACER
238         select TRACING
239         help
240           This tracer hooks to various trace points in the kernel,
241           allowing the user to pick and choose which trace point they
242           want to trace. It also includes the sched_switch tracer plugin.
244 config FTRACE_SYSCALLS
245         bool "Trace syscalls"
246         depends on HAVE_SYSCALL_TRACEPOINTS
247         select GENERIC_TRACER
248         select KALLSYMS
249         help
250           Basic tracer to catch the syscall entry and exit events.
252 config TRACE_BRANCH_PROFILING
253         bool
254         select GENERIC_TRACER
256 choice
257         prompt "Branch Profiling"
258         default BRANCH_PROFILE_NONE
259         help
260          The branch profiling is a software profiler. It will add hooks
261          into the C conditionals to test which path a branch takes.
263          The likely/unlikely profiler only looks at the conditions that
264          are annotated with a likely or unlikely macro.
266          The "all branch" profiler will profile every if-statement in the
267          kernel. This profiler will also enable the likely/unlikely
268          profiler.
270          Either of the above profilers adds a bit of overhead to the system.
271          If unsure, choose "No branch profiling".
273 config BRANCH_PROFILE_NONE
274         bool "No branch profiling"
275         help
276           No branch profiling. Branch profiling adds a bit of overhead.
277           Only enable it if you want to analyse the branching behavior.
278           Otherwise keep it disabled.
280 config PROFILE_ANNOTATED_BRANCHES
281         bool "Trace likely/unlikely profiler"
282         select TRACE_BRANCH_PROFILING
283         help
284           This tracer profiles all likely and unlikely macros
285           in the kernel. It will display the results in:
287           /sys/kernel/debug/tracing/trace_stat/branch_annotated
289           Note: this will add a significant overhead; only turn this
290           on if you need to profile the system's use of these macros.
292 config PROFILE_ALL_BRANCHES
293         bool "Profile all if conditionals"
294         select TRACE_BRANCH_PROFILING
295         help
296           This tracer profiles all branch conditions. Every if ()
297           taken in the kernel is recorded whether it hit or miss.
298           The results will be displayed in:
300           /sys/kernel/debug/tracing/trace_stat/branch_all
302           This option also enables the likely/unlikely profiler.
304           This configuration, when enabled, will impose a great overhead
305           on the system. This should only be enabled when the system
306           is to be analyzed in much detail.
307 endchoice
309 config TRACING_BRANCHES
310         bool
311         help
312           Selected by tracers that will trace the likely and unlikely
313           conditions. This prevents the tracers themselves from being
314           profiled. Profiling the tracing infrastructure can only happen
315           when the likelys and unlikelys are not being traced.
317 config BRANCH_TRACER
318         bool "Trace likely/unlikely instances"
319         depends on TRACE_BRANCH_PROFILING
320         select TRACING_BRANCHES
321         help
322           This traces the events of likely and unlikely condition
323           calls in the kernel.  The difference between this and the
324           "Trace likely/unlikely profiler" is that this is not a
325           histogram of the callers, but actually places the calling
326           events into a running trace buffer to see when and where the
327           events happened, as well as their results.
329           Say N if unsure.
331 config STACK_TRACER
332         bool "Trace max stack"
333         depends on HAVE_FUNCTION_TRACER
334         select FUNCTION_TRACER
335         select STACKTRACE
336         select KALLSYMS
337         help
338           This special tracer records the maximum stack footprint of the
339           kernel and displays it in /sys/kernel/debug/tracing/stack_trace.
341           This tracer works by hooking into every function call that the
342           kernel executes, and keeping a maximum stack depth value and
343           stack-trace saved.  If this is configured with DYNAMIC_FTRACE
344           then it will not have any overhead while the stack tracer
345           is disabled.
347           To enable the stack tracer on bootup, pass in 'stacktrace'
348           on the kernel command line.
350           The stack tracer can also be enabled or disabled via the
351           sysctl kernel.stack_tracer_enabled
353           Say N if unsure.
355 config BLK_DEV_IO_TRACE
356         bool "Support for tracing block IO actions"
357         depends on SYSFS
358         depends on BLOCK
359         select RELAY
360         select DEBUG_FS
361         select TRACEPOINTS
362         select GENERIC_TRACER
363         select STACKTRACE
364         help
365           Say Y here if you want to be able to trace the block layer actions
366           on a given queue. Tracing allows you to see any traffic happening
367           on a block device queue. For more information (and the userspace
368           support tools needed), fetch the blktrace tools from:
370           git://git.kernel.dk/blktrace.git
372           Tracing also is possible using the ftrace interface, e.g.:
374             echo 1 > /sys/block/sda/sda1/trace/enable
375             echo blk > /sys/kernel/debug/tracing/current_tracer
376             cat /sys/kernel/debug/tracing/trace_pipe
378           If unsure, say N.
380 config KPROBE_EVENT
381         depends on KPROBES
382         depends on HAVE_REGS_AND_STACK_ACCESS_API
383         bool "Enable kprobes-based dynamic events"
384         select TRACING
385         select PROBE_EVENTS
386         default y
387         help
388           This allows the user to add tracing events (similar to tracepoints)
389           on the fly via the ftrace interface. See
390           Documentation/trace/kprobetrace.txt for more details.
392           Those events can be inserted wherever kprobes can probe, and record
393           various register and memory values.
395           This option is also required by perf-probe subcommand of perf tools.
396           If you want to use perf tools, this option is strongly recommended.
398 config UPROBE_EVENT
399         bool "Enable uprobes-based dynamic events"
400         depends on ARCH_SUPPORTS_UPROBES
401         depends on MMU
402         select UPROBES
403         select PROBE_EVENTS
404         select TRACING
405         default n
406         help
407           This allows the user to add tracing events on top of userspace
408           dynamic events (similar to tracepoints) on the fly via the trace
409           events interface. Those events can be inserted wherever uprobes
410           can probe, and record various registers.
411           This option is required if you plan to use perf-probe subcommand
412           of perf tools on user space applications.
414 config PROBE_EVENTS
415         def_bool n
417 config DYNAMIC_FTRACE
418         bool "enable/disable ftrace tracepoints dynamically"
419         depends on FUNCTION_TRACER
420         depends on HAVE_DYNAMIC_FTRACE
421         default y
422         help
423           This option will modify all the calls to ftrace dynamically
424           (will patch them out of the binary image and replace them
425           with a No-Op instruction) as they are called. A table is
426           created to dynamically enable them again.
428           This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but
429           otherwise has native performance as long as no tracing is active.
431           The changes to the code are done by a kernel thread that
432           wakes up once a second and checks to see if any ftrace calls
433           were made. If so, it runs stop_machine (stops all CPUS)
434           and modifies the code to jump over the call to ftrace.
436 config FUNCTION_PROFILER
437         bool "Kernel function profiler"
438         depends on FUNCTION_TRACER
439         default n
440         help
441           This option enables the kernel function profiler. A file is created
442           in debugfs called function_profile_enabled which defaults to zero.
443           When a 1 is echoed into this file profiling begins, and when a
444           zero is entered, profiling stops. A "functions" file is created in
445           the trace_stats directory; this file shows the list of functions that
446           have been hit and their counters.
448           If in doubt, say N.
450 config FTRACE_MCOUNT_RECORD
451         def_bool y
452         depends on DYNAMIC_FTRACE
453         depends on HAVE_FTRACE_MCOUNT_RECORD
455 config FTRACE_SELFTEST
456         bool
458 config FTRACE_STARTUP_TEST
459         bool "Perform a startup test on ftrace"
460         depends on GENERIC_TRACER
461         select FTRACE_SELFTEST
462         help
463           This option performs a series of startup tests on ftrace. On bootup
464           a series of tests are made to verify that the tracer is
465           functioning properly. It will do tests on all the configured
466           tracers of ftrace.
468 config EVENT_TRACE_TEST_SYSCALLS
469         bool "Run selftest on syscall events"
470         depends on FTRACE_STARTUP_TEST
471         help
472          This option will also enable testing every syscall event.
473          It only enables the event and disables it and runs various loads
474          with the event enabled. This adds a bit more time for kernel boot
475          up since it runs this on every system call defined.
477          TBD - enable a way to actually call the syscalls as we test their
478                events
480 config MMIOTRACE
481         bool "Memory mapped IO tracing"
482         depends on HAVE_MMIOTRACE_SUPPORT && PCI
483         select GENERIC_TRACER
484         help
485           Mmiotrace traces Memory Mapped I/O access and is meant for
486           debugging and reverse engineering. It is called from the ioremap
487           implementation and works via page faults. Tracing is disabled by
488           default and can be enabled at run-time.
490           See Documentation/trace/mmiotrace.txt.
491           If you are not helping to develop drivers, say N.
493 config MMIOTRACE_TEST
494         tristate "Test module for mmiotrace"
495         depends on MMIOTRACE && m
496         help
497           This is a dumb module for testing mmiotrace. It is very dangerous
498           as it will write garbage to IO memory starting at a given address.
499           However, it should be safe to use on e.g. unused portion of VRAM.
501           Say N, unless you absolutely know what you are doing.
503 config RING_BUFFER_BENCHMARK
504         tristate "Ring buffer benchmark stress tester"
505         depends on RING_BUFFER
506         help
507           This option creates a test to stress the ring buffer and benchmark it.
508           It creates its own ring buffer such that it will not interfere with
509           any other users of the ring buffer (such as ftrace). It then creates
510           a producer and consumer that will run for 10 seconds and sleep for
511           10 seconds. Each interval it will print out the number of events
512           it recorded and give a rough estimate of how long each iteration took.
514           It does not disable interrupts or raise its priority, so it may be
515           affected by processes that are running.
517           If unsure, say N.
519 endif # FTRACE
521 endif # TRACING_SUPPORT