percpu: make percpu symbols in tracer unique
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / kernel / trace / Kconfig
blobb416512ad17ff77eea13b6b391d907f32f76143b
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-implementation.txt
17 config HAVE_FUNCTION_TRACER
18         bool
19         help
20           See Documentation/trace/ftrace-implementation.txt
22 config HAVE_FUNCTION_GRAPH_TRACER
23         bool
24         help
25           See Documentation/trace/ftrace-implementation.txt
27 config HAVE_FUNCTION_GRAPH_FP_TEST
28         bool
29         help
30          An arch may pass in a unique value (frame pointer) to both the
31          entering and exiting of a function. On exit, the value is compared
32          and if it does not match, then it will panic the kernel.
34 config HAVE_FUNCTION_TRACE_MCOUNT_TEST
35         bool
36         help
37           See Documentation/trace/ftrace-implementation.txt
39 config HAVE_DYNAMIC_FTRACE
40         bool
41         help
42           See Documentation/trace/ftrace-implementation.txt
44 config HAVE_FTRACE_MCOUNT_RECORD
45         bool
46         help
47           See Documentation/trace/ftrace-implementation.txt
49 config HAVE_HW_BRANCH_TRACER
50         bool
52 config HAVE_SYSCALL_TRACEPOINTS
53         bool
54         help
55           See Documentation/trace/ftrace-implementation.txt
57 config TRACER_MAX_TRACE
58         bool
60 config RING_BUFFER
61         bool
63 config FTRACE_NMI_ENTER
64        bool
65        depends on HAVE_FTRACE_NMI_ENTER
66        default y
68 config EVENT_TRACING
69         select CONTEXT_SWITCH_TRACER
70         bool
72 config CONTEXT_SWITCH_TRACER
73         bool
75 config RING_BUFFER_ALLOW_SWAP
76         bool
77         help
78          Allow the use of ring_buffer_swap_cpu.
79          Adds a very slight overhead to tracing when enabled.
81 # All tracer options should select GENERIC_TRACER. For those options that are
82 # enabled by all tracers (context switch and event tracer) they select TRACING.
83 # This allows those options to appear when no other tracer is selected. But the
84 # options do not appear when something else selects it. We need the two options
85 # GENERIC_TRACER and TRACING to avoid circular dependencies to accomplish the
86 # hidding of the automatic options.
88 config TRACING
89         bool
90         select DEBUG_FS
91         select RING_BUFFER
92         select STACKTRACE if STACKTRACE_SUPPORT
93         select TRACEPOINTS
94         select NOP_TRACER
95         select BINARY_PRINTF
96         select EVENT_TRACING
98 config GENERIC_TRACER
99         bool
100         select TRACING
103 # Minimum requirements an architecture has to meet for us to
104 # be able to offer generic tracing facilities:
106 config TRACING_SUPPORT
107         bool
108         # PPC32 has no irqflags tracing support, but it can use most of the
109         # tracers anyway, they were tested to build and work. Note that new
110         # exceptions to this list aren't welcomed, better implement the
111         # irqflags tracing for your architecture.
112         depends on TRACE_IRQFLAGS_SUPPORT || PPC32
113         depends on STACKTRACE_SUPPORT
114         default y
116 if TRACING_SUPPORT
118 menuconfig FTRACE
119         bool "Tracers"
120         default y if DEBUG_KERNEL
121         help
122          Enable the kernel tracing infrastructure.
124 if FTRACE
126 config FUNCTION_TRACER
127         bool "Kernel Function Tracer"
128         depends on HAVE_FUNCTION_TRACER
129         select FRAME_POINTER
130         select KALLSYMS
131         select GENERIC_TRACER
132         select CONTEXT_SWITCH_TRACER
133         help
134           Enable the kernel to trace every kernel function. This is done
135           by using a compiler feature to insert a small, 5-byte No-Operation
136           instruction to the beginning of every kernel function, which NOP
137           sequence is then dynamically patched into a tracer call when
138           tracing is enabled by the administrator. If it's runtime disabled
139           (the bootup default), then the overhead of the instructions is very
140           small and not measurable even in micro-benchmarks.
142 config FUNCTION_GRAPH_TRACER
143         bool "Kernel Function Graph Tracer"
144         depends on HAVE_FUNCTION_GRAPH_TRACER
145         depends on FUNCTION_TRACER
146         depends on !X86_32 || !CC_OPTIMIZE_FOR_SIZE
147         default y
148         help
149           Enable the kernel to trace a function at both its return
150           and its entry.
151           Its first purpose is to trace the duration of functions and
152           draw a call graph for each thread with some information like
153           the return value. This is done by setting the current return 
154           address on the current task structure into a stack of calls.
157 config IRQSOFF_TRACER
158         bool "Interrupts-off Latency Tracer"
159         default n
160         depends on TRACE_IRQFLAGS_SUPPORT
161         depends on GENERIC_TIME
162         select TRACE_IRQFLAGS
163         select GENERIC_TRACER
164         select TRACER_MAX_TRACE
165         select RING_BUFFER_ALLOW_SWAP
166         help
167           This option measures the time spent in irqs-off critical
168           sections, with microsecond accuracy.
170           The default measurement method is a maximum search, which is
171           disabled by default and can be runtime (re-)started
172           via:
174               echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
176           (Note that kernel size and overhead increases with this option
177           enabled. This option and the preempt-off timing option can be
178           used together or separately.)
180 config PREEMPT_TRACER
181         bool "Preemption-off Latency Tracer"
182         default n
183         depends on GENERIC_TIME
184         depends on PREEMPT
185         select GENERIC_TRACER
186         select TRACER_MAX_TRACE
187         select RING_BUFFER_ALLOW_SWAP
188         help
189           This option measures the time spent in preemption off critical
190           sections, with microsecond accuracy.
192           The default measurement method is a maximum search, which is
193           disabled by default and can be runtime (re-)started
194           via:
196               echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
198           (Note that kernel size and overhead increases with this option
199           enabled. This option and the irqs-off timing option can be
200           used together or separately.)
202 config SYSPROF_TRACER
203         bool "Sysprof Tracer"
204         depends on X86
205         select GENERIC_TRACER
206         select CONTEXT_SWITCH_TRACER
207         help
208           This tracer provides the trace needed by the 'Sysprof' userspace
209           tool.
211 config SCHED_TRACER
212         bool "Scheduling Latency Tracer"
213         select GENERIC_TRACER
214         select CONTEXT_SWITCH_TRACER
215         select TRACER_MAX_TRACE
216         help
217           This tracer tracks the latency of the highest priority task
218           to be scheduled in, starting from the point it has woken up.
220 config ENABLE_DEFAULT_TRACERS
221         bool "Trace process context switches and events"
222         depends on !GENERIC_TRACER
223         select TRACING
224         help
225           This tracer hooks to various trace points in the kernel
226           allowing the user to pick and choose which trace point they
227           want to trace. It also includes the sched_switch tracer plugin.
229 config FTRACE_SYSCALLS
230         bool "Trace syscalls"
231         depends on HAVE_SYSCALL_TRACEPOINTS
232         select GENERIC_TRACER
233         select KALLSYMS
234         help
235           Basic tracer to catch the syscall entry and exit events.
237 config BOOT_TRACER
238         bool "Trace boot initcalls"
239         select GENERIC_TRACER
240         select CONTEXT_SWITCH_TRACER
241         help
242           This tracer helps developers to optimize boot times: it records
243           the timings of the initcalls and traces key events and the identity
244           of tasks that can cause boot delays, such as context-switches.
246           Its aim is to be parsed by the scripts/bootgraph.pl tool to
247           produce pretty graphics about boot inefficiencies, giving a visual
248           representation of the delays during initcalls - but the raw
249           /debug/tracing/trace text output is readable too.
251           You must pass in initcall_debug and ftrace=initcall to the kernel
252           command line to enable this on bootup.
254 config TRACE_BRANCH_PROFILING
255         bool
256         select GENERIC_TRACER
258 choice
259         prompt "Branch Profiling"
260         default BRANCH_PROFILE_NONE
261         help
262          The branch profiling is a software profiler. It will add hooks
263          into the C conditionals to test which path a branch takes.
265          The likely/unlikely profiler only looks at the conditions that
266          are annotated with a likely or unlikely macro.
268          The "all branch" profiler will profile every if statement in the
269          kernel. This profiler will also enable the likely/unlikely
270          profiler as well.
272          Either of the above profilers add a bit of overhead to the system.
273          If unsure choose "No branch profiling".
275 config BRANCH_PROFILE_NONE
276         bool "No branch profiling"
277         help
278          No branch profiling. Branch profiling adds a bit of overhead.
279          Only enable it if you want to analyse the branching behavior.
280          Otherwise keep it disabled.
282 config PROFILE_ANNOTATED_BRANCHES
283         bool "Trace likely/unlikely profiler"
284         select TRACE_BRANCH_PROFILING
285         help
286           This tracer profiles all the the likely and unlikely macros
287           in the kernel. It will display the results in:
289           /sys/kernel/debug/tracing/profile_annotated_branch
291           Note: this will add a significant overhead, only turn this
292           on if you need to profile the system's use of these macros.
294 config PROFILE_ALL_BRANCHES
295         bool "Profile all if conditionals"
296         select TRACE_BRANCH_PROFILING
297         help
298           This tracer profiles all branch conditions. Every if ()
299           taken in the kernel is recorded whether it hit or miss.
300           The results will be displayed in:
302           /sys/kernel/debug/tracing/profile_branch
304           This option also enables the likely/unlikely profiler.
306           This configuration, when enabled, will impose a great overhead
307           on the system. This should only be enabled when the system
308           is to be analyzed
309 endchoice
311 config TRACING_BRANCHES
312         bool
313         help
314           Selected by tracers that will trace the likely and unlikely
315           conditions. This prevents the tracers themselves from being
316           profiled. Profiling the tracing infrastructure can only happen
317           when the likelys and unlikelys are not being traced.
319 config BRANCH_TRACER
320         bool "Trace likely/unlikely instances"
321         depends on TRACE_BRANCH_PROFILING
322         select TRACING_BRANCHES
323         help
324           This traces the events of likely and unlikely condition
325           calls in the kernel.  The difference between this and the
326           "Trace likely/unlikely profiler" is that this is not a
327           histogram of the callers, but actually places the calling
328           events into a running trace buffer to see when and where the
329           events happened, as well as their results.
331           Say N if unsure.
333 config POWER_TRACER
334         bool "Trace power consumption behavior"
335         depends on X86
336         select GENERIC_TRACER
337         help
338           This tracer helps developers to analyze and optimize the kernels
339           power management decisions, specifically the C-state and P-state
340           behavior.
343 config STACK_TRACER
344         bool "Trace max stack"
345         depends on HAVE_FUNCTION_TRACER
346         select FUNCTION_TRACER
347         select STACKTRACE
348         select KALLSYMS
349         help
350           This special tracer records the maximum stack footprint of the
351           kernel and displays it in /sys/kernel/debug/tracing/stack_trace.
353           This tracer works by hooking into every function call that the
354           kernel executes, and keeping a maximum stack depth value and
355           stack-trace saved.  If this is configured with DYNAMIC_FTRACE
356           then it will not have any overhead while the stack tracer
357           is disabled.
359           To enable the stack tracer on bootup, pass in 'stacktrace'
360           on the kernel command line.
362           The stack tracer can also be enabled or disabled via the
363           sysctl kernel.stack_tracer_enabled
365           Say N if unsure.
367 config HW_BRANCH_TRACER
368         depends on HAVE_HW_BRANCH_TRACER
369         bool "Trace hw branches"
370         select GENERIC_TRACER
371         help
372           This tracer records all branches on the system in a circular
373           buffer giving access to the last N branches for each cpu.
375 config KMEMTRACE
376         bool "Trace SLAB allocations"
377         select GENERIC_TRACER
378         help
379           kmemtrace provides tracing for slab allocator functions, such as
380           kmalloc, kfree, kmem_cache_alloc, kmem_cache_free etc.. Collected
381           data is then fed to the userspace application in order to analyse
382           allocation hotspots, internal fragmentation and so on, making it
383           possible to see how well an allocator performs, as well as debug
384           and profile kernel code.
386           This requires an userspace application to use. See
387           Documentation/trace/kmemtrace.txt for more information.
389           Saying Y will make the kernel somewhat larger and slower. However,
390           if you disable kmemtrace at run-time or boot-time, the performance
391           impact is minimal (depending on the arch the kernel is built for).
393           If unsure, say N.
395 config WORKQUEUE_TRACER
396         bool "Trace workqueues"
397         select GENERIC_TRACER
398         help
399           The workqueue tracer provides some statistical informations
400           about each cpu workqueue thread such as the number of the
401           works inserted and executed since their creation. It can help
402           to evaluate the amount of work each of them have to perform.
403           For example it can help a developer to decide whether he should
404           choose a per cpu workqueue instead of a singlethreaded one.
406 config BLK_DEV_IO_TRACE
407         bool "Support for tracing block io actions"
408         depends on SYSFS
409         depends on BLOCK
410         select RELAY
411         select DEBUG_FS
412         select TRACEPOINTS
413         select GENERIC_TRACER
414         select STACKTRACE
415         help
416           Say Y here if you want to be able to trace the block layer actions
417           on a given queue. Tracing allows you to see any traffic happening
418           on a block device queue. For more information (and the userspace
419           support tools needed), fetch the blktrace tools from:
421           git://git.kernel.dk/blktrace.git
423           Tracing also is possible using the ftrace interface, e.g.:
425             echo 1 > /sys/block/sda/sda1/trace/enable
426             echo blk > /sys/kernel/debug/tracing/current_tracer
427             cat /sys/kernel/debug/tracing/trace_pipe
429           If unsure, say N.
431 config DYNAMIC_FTRACE
432         bool "enable/disable ftrace tracepoints dynamically"
433         depends on FUNCTION_TRACER
434         depends on HAVE_DYNAMIC_FTRACE
435         default y
436         help
437          This option will modify all the calls to ftrace dynamically
438          (will patch them out of the binary image and replaces them
439          with a No-Op instruction) as they are called. A table is
440          created to dynamically enable them again.
442          This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise
443          has native performance as long as no tracing is active.
445          The changes to the code are done by a kernel thread that
446          wakes up once a second and checks to see if any ftrace calls
447          were made. If so, it runs stop_machine (stops all CPUS)
448          and modifies the code to jump over the call to ftrace.
450 config FUNCTION_PROFILER
451         bool "Kernel function profiler"
452         depends on FUNCTION_TRACER
453         default n
454         help
455          This option enables the kernel function profiler. A file is created
456          in debugfs called function_profile_enabled which defaults to zero.
457          When a 1 is echoed into this file profiling begins, and when a
458          zero is entered, profiling stops. A file in the trace_stats
459          directory called functions, that show the list of functions that
460          have been hit and their counters.
462          If in doubt, say N
464 config FTRACE_MCOUNT_RECORD
465         def_bool y
466         depends on DYNAMIC_FTRACE
467         depends on HAVE_FTRACE_MCOUNT_RECORD
469 config FTRACE_SELFTEST
470         bool
472 config FTRACE_STARTUP_TEST
473         bool "Perform a startup test on ftrace"
474         depends on GENERIC_TRACER
475         select FTRACE_SELFTEST
476         help
477           This option performs a series of startup tests on ftrace. On bootup
478           a series of tests are made to verify that the tracer is
479           functioning properly. It will do tests on all the configured
480           tracers of ftrace.
482 config EVENT_TRACE_TEST_SYSCALLS
483         bool "Run selftest on syscall events"
484         depends on FTRACE_STARTUP_TEST
485         help
486          This option will also enable testing every syscall event.
487          It only enables the event and disables it and runs various loads
488          with the event enabled. This adds a bit more time for kernel boot
489          up since it runs this on every system call defined.
491          TBD - enable a way to actually call the syscalls as we test their
492                events
494 config MMIOTRACE
495         bool "Memory mapped IO tracing"
496         depends on HAVE_MMIOTRACE_SUPPORT && PCI
497         select GENERIC_TRACER
498         help
499           Mmiotrace traces Memory Mapped I/O access and is meant for
500           debugging and reverse engineering. It is called from the ioremap
501           implementation and works via page faults. Tracing is disabled by
502           default and can be enabled at run-time.
504           See Documentation/trace/mmiotrace.txt.
505           If you are not helping to develop drivers, say N.
507 config MMIOTRACE_TEST
508         tristate "Test module for mmiotrace"
509         depends on MMIOTRACE && m
510         help
511           This is a dumb module for testing mmiotrace. It is very dangerous
512           as it will write garbage to IO memory starting at a given address.
513           However, it should be safe to use on e.g. unused portion of VRAM.
515           Say N, unless you absolutely know what you are doing.
517 config RING_BUFFER_BENCHMARK
518         tristate "Ring buffer benchmark stress tester"
519         depends on RING_BUFFER
520         help
521           This option creates a test to stress the ring buffer and bench mark it.
522           It creates its own ring buffer such that it will not interfer with
523           any other users of the ring buffer (such as ftrace). It then creates
524           a producer and consumer that will run for 10 seconds and sleep for
525           10 seconds. Each interval it will print out the number of events
526           it recorded and give a rough estimate of how long each iteration took.
528           It does not disable interrupts or raise its priority, so it may be
529           affected by processes that are running.
531           If unsure, say N
533 endif # FTRACE
535 endif # TRACING_SUPPORT