]> bbs.cooldavid.org Git - net-next-2.6.git/blob - kernel/trace/Kconfig
tracing: current tip/master can't enable ftrace
[net-next-2.6.git] / kernel / trace / Kconfig
1 #
2 # Architectures that offer an FUNCTION_TRACER implementation should
3 #  select HAVE_FUNCTION_TRACER:
4 #
5
6 config USER_STACKTRACE_SUPPORT
7         bool
8
9 config NOP_TRACER
10         bool
11
12 config HAVE_FTRACE_NMI_ENTER
13         bool
14
15 config HAVE_FUNCTION_TRACER
16         bool
17
18 config HAVE_FUNCTION_GRAPH_TRACER
19         bool
20
21 config 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
28 config HAVE_DYNAMIC_FTRACE
29         bool
30
31 config HAVE_FTRACE_MCOUNT_RECORD
32         bool
33
34 config HAVE_HW_BRANCH_TRACER
35         bool
36
37 config TRACER_MAX_TRACE
38         bool
39
40 config RING_BUFFER
41         bool
42
43 config FTRACE_NMI_ENTER
44        bool
45        depends on HAVE_FTRACE_NMI_ENTER
46        default y
47
48 config TRACING
49         bool
50         select DEBUG_FS
51         select RING_BUFFER
52         select STACKTRACE if STACKTRACE_SUPPORT
53         select TRACEPOINTS
54         select NOP_TRACER
55
56 #
57 # Minimum requirements an architecture has to meet for us to
58 # be able to offer generic tracing facilities:
59 #
60 config TRACING_SUPPORT
61         bool
62         depends on TRACE_IRQFLAGS_SUPPORT
63         depends on STACKTRACE_SUPPORT
64         default y
65
66 if TRACING_SUPPORT
67
68 menu "Tracers"
69
70 config FUNCTION_TRACER
71         bool "Kernel Function Tracer"
72         depends on HAVE_FUNCTION_TRACER
73         select FRAME_POINTER
74         select KALLSYMS
75         select TRACING
76         select CONTEXT_SWITCH_TRACER
77         help
78           Enable the kernel to trace every kernel function. This is done
79           by using a compiler feature to insert a small, 5-byte No-Operation
80           instruction to the beginning of every kernel function, which NOP
81           sequence is then dynamically patched into a tracer call when
82           tracing is enabled by the administrator. If it's runtime disabled
83           (the bootup default), then the overhead of the instructions is very
84           small and not measurable even in micro-benchmarks.
85
86 config FUNCTION_GRAPH_TRACER
87         bool "Kernel Function Graph Tracer"
88         depends on HAVE_FUNCTION_GRAPH_TRACER
89         depends on FUNCTION_TRACER
90         default y
91         help
92           Enable the kernel to trace a function at both its return
93           and its entry.
94           It's first purpose is to trace the duration of functions and
95           draw a call graph for each thread with some informations like
96           the return value.
97           This is done by setting the current return address on the current
98           task structure into a stack of calls.
99
100 config IRQSOFF_TRACER
101         bool "Interrupts-off Latency Tracer"
102         default n
103         depends on TRACE_IRQFLAGS_SUPPORT
104         depends on GENERIC_TIME
105         select TRACE_IRQFLAGS
106         select TRACING
107         select TRACER_MAX_TRACE
108         help
109           This option measures the time spent in irqs-off critical
110           sections, with microsecond accuracy.
111
112           The default measurement method is a maximum search, which is
113           disabled by default and can be runtime (re-)started
114           via:
115
116               echo 0 > /debugfs/tracing/tracing_max_latency
117
118           (Note that kernel size and overhead increases with this option
119           enabled. This option and the preempt-off timing option can be
120           used together or separately.)
121
122 config PREEMPT_TRACER
123         bool "Preemption-off Latency Tracer"
124         default n
125         depends on GENERIC_TIME
126         depends on PREEMPT
127         select TRACING
128         select TRACER_MAX_TRACE
129         help
130           This option measures the time spent in preemption off critical
131           sections, with microsecond accuracy.
132
133           The default measurement method is a maximum search, which is
134           disabled by default and can be runtime (re-)started
135           via:
136
137               echo 0 > /debugfs/tracing/tracing_max_latency
138
139           (Note that kernel size and overhead increases with this option
140           enabled. This option and the irqs-off timing option can be
141           used together or separately.)
142
143 config SYSPROF_TRACER
144         bool "Sysprof Tracer"
145         depends on X86
146         select TRACING
147         select CONTEXT_SWITCH_TRACER
148         help
149           This tracer provides the trace needed by the 'Sysprof' userspace
150           tool.
151
152 config SCHED_TRACER
153         bool "Scheduling Latency Tracer"
154         select TRACING
155         select CONTEXT_SWITCH_TRACER
156         select TRACER_MAX_TRACE
157         help
158           This tracer tracks the latency of the highest priority task
159           to be scheduled in, starting from the point it has woken up.
160
161 config CONTEXT_SWITCH_TRACER
162         bool "Trace process context switches"
163         select TRACING
164         select MARKERS
165         help
166           This tracer gets called from the context switch and records
167           all switching of tasks.
168
169 config EVENT_TRACER
170         bool "Trace various events in the kernel"
171         select TRACING
172         help
173           This tracer hooks to various trace points in the kernel
174           allowing the user to pick and choose which trace point they
175           want to trace.
176
177 config BOOT_TRACER
178         bool "Trace boot initcalls"
179         select TRACING
180         select CONTEXT_SWITCH_TRACER
181         help
182           This tracer helps developers to optimize boot times: it records
183           the timings of the initcalls and traces key events and the identity
184           of tasks that can cause boot delays, such as context-switches.
185
186           Its aim is to be parsed by the /scripts/bootgraph.pl tool to
187           produce pretty graphics about boot inefficiencies, giving a visual
188           representation of the delays during initcalls - but the raw
189           /debug/tracing/trace text output is readable too.
190
191           You must pass in ftrace=initcall to the kernel command line
192           to enable this on bootup.
193
194 config TRACE_BRANCH_PROFILING
195         bool "Trace likely/unlikely profiler"
196         select TRACING
197         help
198           This tracer profiles all the the likely and unlikely macros
199           in the kernel. It will display the results in:
200
201           /debugfs/tracing/profile_annotated_branch
202
203           Note: this will add a significant overhead, only turn this
204           on if you need to profile the system's use of these macros.
205
206           Say N if unsure.
207
208 config PROFILE_ALL_BRANCHES
209         bool "Profile all if conditionals"
210         depends on TRACE_BRANCH_PROFILING
211         help
212           This tracer profiles all branch conditions. Every if ()
213           taken in the kernel is recorded whether it hit or miss.
214           The results will be displayed in:
215
216           /debugfs/tracing/profile_branch
217
218           This configuration, when enabled, will impose a great overhead
219           on the system. This should only be enabled when the system
220           is to be analyzed
221
222           Say N if unsure.
223
224 config TRACING_BRANCHES
225         bool
226         help
227           Selected by tracers that will trace the likely and unlikely
228           conditions. This prevents the tracers themselves from being
229           profiled. Profiling the tracing infrastructure can only happen
230           when the likelys and unlikelys are not being traced.
231
232 config BRANCH_TRACER
233         bool "Trace likely/unlikely instances"
234         depends on TRACE_BRANCH_PROFILING
235         select TRACING_BRANCHES
236         help
237           This traces the events of likely and unlikely condition
238           calls in the kernel.  The difference between this and the
239           "Trace likely/unlikely profiler" is that this is not a
240           histogram of the callers, but actually places the calling
241           events into a running trace buffer to see when and where the
242           events happened, as well as their results.
243
244           Say N if unsure.
245
246 config POWER_TRACER
247         bool "Trace power consumption behavior"
248         depends on X86
249         select TRACING
250         help
251           This tracer helps developers to analyze and optimize the kernels
252           power management decisions, specifically the C-state and P-state
253           behavior.
254
255
256 config STACK_TRACER
257         bool "Trace max stack"
258         depends on HAVE_FUNCTION_TRACER
259         select FUNCTION_TRACER
260         select STACKTRACE
261         select KALLSYMS
262         help
263           This special tracer records the maximum stack footprint of the
264           kernel and displays it in debugfs/tracing/stack_trace.
265
266           This tracer works by hooking into every function call that the
267           kernel executes, and keeping a maximum stack depth value and
268           stack-trace saved.  If this is configured with DYNAMIC_FTRACE
269           then it will not have any overhead while the stack tracer
270           is disabled.
271
272           To enable the stack tracer on bootup, pass in 'stacktrace'
273           on the kernel command line.
274
275           The stack tracer can also be enabled or disabled via the
276           sysctl kernel.stack_tracer_enabled
277
278           Say N if unsure.
279
280 config HW_BRANCH_TRACER
281         depends on HAVE_HW_BRANCH_TRACER
282         bool "Trace hw branches"
283         select TRACING
284         help
285           This tracer records all branches on the system in a circular
286           buffer giving access to the last N branches for each cpu.
287
288 config KMEMTRACE
289         bool "Trace SLAB allocations"
290         select TRACING
291         help
292           kmemtrace provides tracing for slab allocator functions, such as
293           kmalloc, kfree, kmem_cache_alloc, kmem_cache_free etc.. Collected
294           data is then fed to the userspace application in order to analyse
295           allocation hotspots, internal fragmentation and so on, making it
296           possible to see how well an allocator performs, as well as debug
297           and profile kernel code.
298
299           This requires an userspace application to use. See
300           Documentation/vm/kmemtrace.txt for more information.
301
302           Saying Y will make the kernel somewhat larger and slower. However,
303           if you disable kmemtrace at run-time or boot-time, the performance
304           impact is minimal (depending on the arch the kernel is built for).
305
306           If unsure, say N.
307
308 config WORKQUEUE_TRACER
309         bool "Trace workqueues"
310         select TRACING
311         help
312           The workqueue tracer provides some statistical informations
313           about each cpu workqueue thread such as the number of the
314           works inserted and executed since their creation. It can help
315           to evaluate the amount of work each of them have to perform.
316           For example it can help a developer to decide whether he should
317           choose a per cpu workqueue instead of a singlethreaded one.
318
319 config BLK_DEV_IO_TRACE
320         bool "Support for tracing block io actions"
321         depends on SYSFS
322         depends on BLOCK
323         select RELAY
324         select DEBUG_FS
325         select TRACEPOINTS
326         select TRACING
327         select STACKTRACE
328         help
329           Say Y here if you want to be able to trace the block layer actions
330           on a given queue. Tracing allows you to see any traffic happening
331           on a block device queue. For more information (and the userspace
332           support tools needed), fetch the blktrace tools from:
333
334           git://git.kernel.dk/blktrace.git
335
336           Tracing also is possible using the ftrace interface, e.g.:
337
338             echo 1 > /sys/block/sda/sda1/trace/enable
339             echo blk > /sys/kernel/debug/tracing/current_tracer
340             cat /sys/kernel/debug/tracing/trace_pipe
341
342           If unsure, say N.
343
344 config DYNAMIC_FTRACE
345         bool "enable/disable ftrace tracepoints dynamically"
346         depends on FUNCTION_TRACER
347         depends on HAVE_DYNAMIC_FTRACE
348         default y
349         help
350          This option will modify all the calls to ftrace dynamically
351          (will patch them out of the binary image and replaces them
352          with a No-Op instruction) as they are called. A table is
353          created to dynamically enable them again.
354
355          This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise
356          has native performance as long as no tracing is active.
357
358          The changes to the code are done by a kernel thread that
359          wakes up once a second and checks to see if any ftrace calls
360          were made. If so, it runs stop_machine (stops all CPUS)
361          and modifies the code to jump over the call to ftrace.
362
363 config FTRACE_MCOUNT_RECORD
364         def_bool y
365         depends on DYNAMIC_FTRACE
366         depends on HAVE_FTRACE_MCOUNT_RECORD
367
368 config FTRACE_SELFTEST
369         bool
370
371 config FTRACE_STARTUP_TEST
372         bool "Perform a startup test on ftrace"
373         depends on TRACING
374         select FTRACE_SELFTEST
375         help
376           This option performs a series of startup tests on ftrace. On bootup
377           a series of tests are made to verify that the tracer is
378           functioning properly. It will do tests on all the configured
379           tracers of ftrace.
380
381 config MMIOTRACE
382         bool "Memory mapped IO tracing"
383         depends on HAVE_MMIOTRACE_SUPPORT && PCI
384         select TRACING
385         help
386           Mmiotrace traces Memory Mapped I/O access and is meant for
387           debugging and reverse engineering. It is called from the ioremap
388           implementation and works via page faults. Tracing is disabled by
389           default and can be enabled at run-time.
390
391           See Documentation/tracers/mmiotrace.txt.
392           If you are not helping to develop drivers, say N.
393
394 config MMIOTRACE_TEST
395         tristate "Test module for mmiotrace"
396         depends on MMIOTRACE && m
397         help
398           This is a dumb module for testing mmiotrace. It is very dangerous
399           as it will write garbage to IO memory starting at a given address.
400           However, it should be safe to use on e.g. unused portion of VRAM.
401
402           Say N, unless you absolutely know what you are doing.
403
404 endmenu
405
406 endif # TRACING_SUPPORT
407