xref: /openbmc/linux/kernel/trace/Kconfig (revision fd589a8f)
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-implementation.txt
16
17config HAVE_FUNCTION_TRACER
18	bool
19	help
20	  See Documentation/trace/ftrace-implementation.txt
21
22config HAVE_FUNCTION_GRAPH_TRACER
23	bool
24	help
25	  See Documentation/trace/ftrace-implementation.txt
26
27config 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.
33
34config HAVE_FUNCTION_TRACE_MCOUNT_TEST
35	bool
36	help
37	  See Documentation/trace/ftrace-implementation.txt
38
39config HAVE_DYNAMIC_FTRACE
40	bool
41	help
42	  See Documentation/trace/ftrace-implementation.txt
43
44config HAVE_FTRACE_MCOUNT_RECORD
45	bool
46	help
47	  See Documentation/trace/ftrace-implementation.txt
48
49config HAVE_HW_BRANCH_TRACER
50	bool
51
52config HAVE_SYSCALL_TRACEPOINTS
53	bool
54	help
55	  See Documentation/trace/ftrace-implementation.txt
56
57config TRACER_MAX_TRACE
58	bool
59
60config RING_BUFFER
61	bool
62
63config FTRACE_NMI_ENTER
64       bool
65       depends on HAVE_FTRACE_NMI_ENTER
66       default y
67
68config EVENT_TRACING
69	select CONTEXT_SWITCH_TRACER
70	bool
71
72config CONTEXT_SWITCH_TRACER
73	bool
74
75config 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.
80
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 options.
87
88config 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
97
98config GENERIC_TRACER
99	bool
100	select TRACING
101
102#
103# Minimum requirements an architecture has to meet for us to
104# be able to offer generic tracing facilities:
105#
106config 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
115
116if TRACING_SUPPORT
117
118menuconfig FTRACE
119	bool "Tracers"
120	default y if DEBUG_KERNEL
121	help
122	 Enable the kernel tracing infrastructure.
123
124if FTRACE
125
126config 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.
141
142config 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.
155
156
157config 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.
169
170	  The default measurement method is a maximum search, which is
171	  disabled by default and can be runtime (re-)started
172	  via:
173
174	      echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
175
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.)
179
180config 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.
191
192	  The default measurement method is a maximum search, which is
193	  disabled by default and can be runtime (re-)started
194	  via:
195
196	      echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
197
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.)
201
202config 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.
210
211config 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.
219
220config 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.
228
229config 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.
236
237config 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.
245
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.
250
251	  You must pass in initcall_debug and ftrace=initcall to the kernel
252	  command line to enable this on bootup.
253
254config TRACE_BRANCH_PROFILING
255	bool
256	select GENERIC_TRACER
257
258choice
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.
264
265	 The likely/unlikely profiler only looks at the conditions that
266	 are annotated with a likely or unlikely macro.
267
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.
271
272	 Either of the above profilers add a bit of overhead to the system.
273	 If unsure choose "No branch profiling".
274
275config 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.
281
282config 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:
288
289	  /sys/kernel/debug/tracing/profile_annotated_branch
290
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.
293
294config 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:
301
302	  /sys/kernel/debug/tracing/profile_branch
303
304	  This option also enables the likely/unlikely profiler.
305
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
309endchoice
310
311config 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.
318
319config 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.
330
331	  Say N if unsure.
332
333config 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.
341
342
343config 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.
352
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.
358
359	  To enable the stack tracer on bootup, pass in 'stacktrace'
360	  on the kernel command line.
361
362	  The stack tracer can also be enabled or disabled via the
363	  sysctl kernel.stack_tracer_enabled
364
365	  Say N if unsure.
366
367config 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.
374
375config 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.
385
386	  This requires an userspace application to use. See
387	  Documentation/trace/kmemtrace.txt for more information.
388
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).
392
393	  If unsure, say N.
394
395config 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.
405
406config 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:
420
421	  git://git.kernel.dk/blktrace.git
422
423	  Tracing also is possible using the ftrace interface, e.g.:
424
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
428
429	  If unsure, say N.
430
431config 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.
441
442	 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise
443	 has native performance as long as no tracing is active.
444
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.
449
450config 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.
461
462	 If in doubt, say N
463
464config FTRACE_MCOUNT_RECORD
465	def_bool y
466	depends on DYNAMIC_FTRACE
467	depends on HAVE_FTRACE_MCOUNT_RECORD
468
469config FTRACE_SELFTEST
470	bool
471
472config 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.
481
482config 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.
490
491	 TBD - enable a way to actually call the syscalls as we test their
492	       events
493
494config 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.
503
504	  See Documentation/trace/mmiotrace.txt.
505	  If you are not helping to develop drivers, say N.
506
507config 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.
514
515	  Say N, unless you absolutely know what you are doing.
516
517config 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.
527
528	  It does not disable interrupts or raise its priority, so it may be
529	  affected by processes that are running.
530
531	  If unsure, say N
532
533endif # FTRACE
534
535endif # TRACING_SUPPORT
536
537