xref: /linux/kernel/trace/Kconfig (revision 4413e16d9d21673bb5048a2e542f1aaa00015c2e)
1#
2# Architectures that offer an FUNCTION_TRACER implementation should
3#  select HAVE_FUNCTION_TRACER:
4#
5
6config USER_STACKTRACE_SUPPORT
7	bool
8
9config NOP_TRACER
10	bool
11
12config HAVE_FTRACE_NMI_ENTER
13	bool
14	help
15	  See Documentation/trace/ftrace-design.txt
16
17config HAVE_FUNCTION_TRACER
18	bool
19	help
20	  See Documentation/trace/ftrace-design.txt
21
22config HAVE_FUNCTION_GRAPH_TRACER
23	bool
24	help
25	  See Documentation/trace/ftrace-design.txt
26
27config HAVE_FUNCTION_GRAPH_FP_TEST
28	bool
29	help
30	  See Documentation/trace/ftrace-design.txt
31
32config HAVE_FUNCTION_TRACE_MCOUNT_TEST
33	bool
34	help
35	  See Documentation/trace/ftrace-design.txt
36
37config HAVE_DYNAMIC_FTRACE
38	bool
39	help
40	  See Documentation/trace/ftrace-design.txt
41
42config HAVE_FTRACE_MCOUNT_RECORD
43	bool
44	help
45	  See Documentation/trace/ftrace-design.txt
46
47config HAVE_SYSCALL_TRACEPOINTS
48	bool
49	help
50	  See Documentation/trace/ftrace-design.txt
51
52config HAVE_FENTRY
53	bool
54	help
55	  Arch supports the gcc options -pg with -mfentry
56
57config HAVE_C_RECORDMCOUNT
58	bool
59	help
60	  C version of recordmcount available?
61
62config TRACER_MAX_TRACE
63	bool
64
65config TRACE_CLOCK
66	bool
67
68config RING_BUFFER
69	bool
70	select TRACE_CLOCK
71
72config FTRACE_NMI_ENTER
73       bool
74       depends on HAVE_FTRACE_NMI_ENTER
75       default y
76
77config EVENT_TRACING
78	select CONTEXT_SWITCH_TRACER
79	bool
80
81config 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.
95
96config CONTEXT_SWITCH_TRACER
97	bool
98
99config 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.
104
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.
111
112config 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
122
123config GENERIC_TRACER
124	bool
125	select TRACING
126
127#
128# Minimum requirements an architecture has to meet for us to
129# be able to offer generic tracing facilities:
130#
131config 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
140
141if TRACING_SUPPORT
142
143menuconfig FTRACE
144	bool "Tracers"
145	default y if DEBUG_KERNEL
146	help
147	  Enable the kernel tracing infrastructure.
148
149if FTRACE
150
151config 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.
165
166config 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.
179
180
181config 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.
193
194	  The default measurement method is a maximum search, which is
195	  disabled by default and can be runtime (re-)started
196	  via:
197
198	      echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
199
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.)
203
204config 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.
215
216	  The default measurement method is a maximum search, which is
217	  disabled by default and can be runtime (re-)started
218	  via:
219
220	      echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
221
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.)
225
226config 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.
234
235config 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.
243
244config 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.
251
252config TRACE_BRANCH_PROFILING
253	bool
254	select GENERIC_TRACER
255
256choice
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.
262
263	 The likely/unlikely profiler only looks at the conditions that
264	 are annotated with a likely or unlikely macro.
265
266	 The "all branch" profiler will profile every if-statement in the
267	 kernel. This profiler will also enable the likely/unlikely
268	 profiler.
269
270	 Either of the above profilers adds a bit of overhead to the system.
271	 If unsure, choose "No branch profiling".
272
273config 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.
279
280config 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:
286
287	  /sys/kernel/debug/tracing/trace_stat/branch_annotated
288
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.
291
292config 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:
299
300	  /sys/kernel/debug/tracing/trace_stat/branch_all
301
302	  This option also enables the likely/unlikely profiler.
303
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.
307endchoice
308
309config 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.
316
317config 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.
328
329	  Say N if unsure.
330
331config 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.
340
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.
346
347	  To enable the stack tracer on bootup, pass in 'stacktrace'
348	  on the kernel command line.
349
350	  The stack tracer can also be enabled or disabled via the
351	  sysctl kernel.stack_tracer_enabled
352
353	  Say N if unsure.
354
355config 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:
369
370	  git://git.kernel.dk/blktrace.git
371
372	  Tracing also is possible using the ftrace interface, e.g.:
373
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
377
378	  If unsure, say N.
379
380config 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.
391
392	  Those events can be inserted wherever kprobes can probe, and record
393	  various register and memory values.
394
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.
397
398config 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.
413
414config PROBE_EVENTS
415	def_bool n
416
417config 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.
427
428	  This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but
429	  otherwise has native performance as long as no tracing is active.
430
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.
435
436config 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.
447
448	  If in doubt, say N.
449
450config FTRACE_MCOUNT_RECORD
451	def_bool y
452	depends on DYNAMIC_FTRACE
453	depends on HAVE_FTRACE_MCOUNT_RECORD
454
455config FTRACE_SELFTEST
456	bool
457
458config 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.
467
468config 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.
476
477	 TBD - enable a way to actually call the syscalls as we test their
478	       events
479
480config 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.
489
490	  See Documentation/trace/mmiotrace.txt.
491	  If you are not helping to develop drivers, say N.
492
493config 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.
500
501	  Say N, unless you absolutely know what you are doing.
502
503config 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.
513
514	  It does not disable interrupts or raise its priority, so it may be
515	  affected by processes that are running.
516
517	  If unsure, say N.
518
519endif # FTRACE
520
521endif # TRACING_SUPPORT
522
523