xref: /openbmc/linux/kernel/trace/Kconfig (revision 40892367)
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	 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-design.txt
38
39config HAVE_DYNAMIC_FTRACE
40	bool
41	help
42	  See Documentation/trace/ftrace-design.txt
43
44config HAVE_FTRACE_MCOUNT_RECORD
45	bool
46	help
47	  See Documentation/trace/ftrace-design.txt
48
49config HAVE_HW_BRANCH_TRACER
50	bool
51
52config HAVE_SYSCALL_TRACEPOINTS
53	bool
54	help
55	  See Documentation/trace/ftrace-design.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# hiding of the automatic 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 at 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 increase 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 increase 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.
271
272	 Either of the above profilers adds 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 in much detail.
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 kernel's
339	  power management decisions, specifically the C-state and P-state
340	  behavior.
341
342config KSYM_TRACER
343	bool "Trace read and write access on kernel memory locations"
344	depends on HAVE_HW_BREAKPOINT
345	select TRACING
346	help
347	  This tracer helps find read and write operations on any given kernel
348	  symbol i.e. /proc/kallsyms.
349
350config PROFILE_KSYM_TRACER
351	bool "Profile all kernel memory accesses on 'watched' variables"
352	depends on KSYM_TRACER
353	help
354	  This tracer profiles kernel accesses on variables watched through the
355	  ksym tracer ftrace plugin. Depending upon the hardware, all read
356	  and write operations on kernel variables can be monitored for
357	  accesses.
358
359	  The results will be displayed in:
360	  /debugfs/tracing/profile_ksym
361
362	  Say N if unsure.
363
364config STACK_TRACER
365	bool "Trace max stack"
366	depends on HAVE_FUNCTION_TRACER
367	select FUNCTION_TRACER
368	select STACKTRACE
369	select KALLSYMS
370	help
371	  This special tracer records the maximum stack footprint of the
372	  kernel and displays it in /sys/kernel/debug/tracing/stack_trace.
373
374	  This tracer works by hooking into every function call that the
375	  kernel executes, and keeping a maximum stack depth value and
376	  stack-trace saved.  If this is configured with DYNAMIC_FTRACE
377	  then it will not have any overhead while the stack tracer
378	  is disabled.
379
380	  To enable the stack tracer on bootup, pass in 'stacktrace'
381	  on the kernel command line.
382
383	  The stack tracer can also be enabled or disabled via the
384	  sysctl kernel.stack_tracer_enabled
385
386	  Say N if unsure.
387
388config HW_BRANCH_TRACER
389	depends on HAVE_HW_BRANCH_TRACER
390	bool "Trace hw branches"
391	select GENERIC_TRACER
392	help
393	  This tracer records all branches on the system in a circular
394	  buffer, giving access to the last N branches for each cpu.
395
396config KMEMTRACE
397	bool "Trace SLAB allocations"
398	select GENERIC_TRACER
399	help
400	  kmemtrace provides tracing for slab allocator functions, such as
401	  kmalloc, kfree, kmem_cache_alloc, kmem_cache_free, etc. Collected
402	  data is then fed to the userspace application in order to analyse
403	  allocation hotspots, internal fragmentation and so on, making it
404	  possible to see how well an allocator performs, as well as debug
405	  and profile kernel code.
406
407	  This requires an userspace application to use. See
408	  Documentation/trace/kmemtrace.txt for more information.
409
410	  Saying Y will make the kernel somewhat larger and slower. However,
411	  if you disable kmemtrace at run-time or boot-time, the performance
412	  impact is minimal (depending on the arch the kernel is built for).
413
414	  If unsure, say N.
415
416config WORKQUEUE_TRACER
417	bool "Trace workqueues"
418	select GENERIC_TRACER
419	help
420	  The workqueue tracer provides some statistical information
421          about each cpu workqueue thread such as the number of the
422          works inserted and executed since their creation. It can help
423          to evaluate the amount of work each of them has to perform.
424          For example it can help a developer to decide whether he should
425          choose a per-cpu workqueue instead of a singlethreaded one.
426
427config BLK_DEV_IO_TRACE
428	bool "Support for tracing block IO actions"
429	depends on SYSFS
430	depends on BLOCK
431	select RELAY
432	select DEBUG_FS
433	select TRACEPOINTS
434	select GENERIC_TRACER
435	select STACKTRACE
436	help
437	  Say Y here if you want to be able to trace the block layer actions
438	  on a given queue. Tracing allows you to see any traffic happening
439	  on a block device queue. For more information (and the userspace
440	  support tools needed), fetch the blktrace tools from:
441
442	  git://git.kernel.dk/blktrace.git
443
444	  Tracing also is possible using the ftrace interface, e.g.:
445
446	    echo 1 > /sys/block/sda/sda1/trace/enable
447	    echo blk > /sys/kernel/debug/tracing/current_tracer
448	    cat /sys/kernel/debug/tracing/trace_pipe
449
450	  If unsure, say N.
451
452config KPROBE_EVENT
453	depends on KPROBES
454	depends on X86
455	bool "Enable kprobes-based dynamic events"
456	select TRACING
457	default y
458	help
459	  This allows the user to add tracing events (similar to tracepoints)
460	  on the fly via the ftrace interface. See
461	  Documentation/trace/kprobetrace.txt for more details.
462
463	  Those events can be inserted wherever kprobes can probe, and record
464	  various register and memory values.
465
466	  This option is also required by perf-probe subcommand of perf tools.
467	  If you want to use perf tools, this option is strongly recommended.
468
469config DYNAMIC_FTRACE
470	bool "enable/disable ftrace tracepoints dynamically"
471	depends on FUNCTION_TRACER
472	depends on HAVE_DYNAMIC_FTRACE
473	default y
474	help
475          This option will modify all the calls to ftrace dynamically
476	  (will patch them out of the binary image and replace them
477	  with a No-Op instruction) as they are called. A table is
478	  created to dynamically enable them again.
479
480	  This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but
481	  otherwise has native performance as long as no tracing is active.
482
483	  The changes to the code are done by a kernel thread that
484	  wakes up once a second and checks to see if any ftrace calls
485	  were made. If so, it runs stop_machine (stops all CPUS)
486	  and modifies the code to jump over the call to ftrace.
487
488config FUNCTION_PROFILER
489	bool "Kernel function profiler"
490	depends on FUNCTION_TRACER
491	default n
492	help
493	  This option enables the kernel function profiler. A file is created
494	  in debugfs called function_profile_enabled which defaults to zero.
495	  When a 1 is echoed into this file profiling begins, and when a
496	  zero is entered, profiling stops. A "functions" file is created in
497	  the trace_stats directory; this file shows the list of functions that
498	  have been hit and their counters.
499
500	  If in doubt, say N.
501
502config FTRACE_MCOUNT_RECORD
503	def_bool y
504	depends on DYNAMIC_FTRACE
505	depends on HAVE_FTRACE_MCOUNT_RECORD
506
507config FTRACE_SELFTEST
508	bool
509
510config FTRACE_STARTUP_TEST
511	bool "Perform a startup test on ftrace"
512	depends on GENERIC_TRACER
513	select FTRACE_SELFTEST
514	help
515	  This option performs a series of startup tests on ftrace. On bootup
516	  a series of tests are made to verify that the tracer is
517	  functioning properly. It will do tests on all the configured
518	  tracers of ftrace.
519
520config EVENT_TRACE_TEST_SYSCALLS
521	bool "Run selftest on syscall events"
522	depends on FTRACE_STARTUP_TEST
523	help
524	 This option will also enable testing every syscall event.
525	 It only enables the event and disables it and runs various loads
526	 with the event enabled. This adds a bit more time for kernel boot
527	 up since it runs this on every system call defined.
528
529	 TBD - enable a way to actually call the syscalls as we test their
530	       events
531
532config MMIOTRACE
533	bool "Memory mapped IO tracing"
534	depends on HAVE_MMIOTRACE_SUPPORT && PCI
535	select GENERIC_TRACER
536	help
537	  Mmiotrace traces Memory Mapped I/O access and is meant for
538	  debugging and reverse engineering. It is called from the ioremap
539	  implementation and works via page faults. Tracing is disabled by
540	  default and can be enabled at run-time.
541
542	  See Documentation/trace/mmiotrace.txt.
543	  If you are not helping to develop drivers, say N.
544
545config MMIOTRACE_TEST
546	tristate "Test module for mmiotrace"
547	depends on MMIOTRACE && m
548	help
549	  This is a dumb module for testing mmiotrace. It is very dangerous
550	  as it will write garbage to IO memory starting at a given address.
551	  However, it should be safe to use on e.g. unused portion of VRAM.
552
553	  Say N, unless you absolutely know what you are doing.
554
555config RING_BUFFER_BENCHMARK
556	tristate "Ring buffer benchmark stress tester"
557	depends on RING_BUFFER
558	help
559	  This option creates a test to stress the ring buffer and benchmark it.
560	  It creates its own ring buffer such that it will not interfere with
561	  any other users of the ring buffer (such as ftrace). It then creates
562	  a producer and consumer that will run for 10 seconds and sleep for
563	  10 seconds. Each interval it will print out the number of events
564	  it recorded and give a rough estimate of how long each iteration took.
565
566	  It does not disable interrupts or raise its priority, so it may be
567	  affected by processes that are running.
568
569	  If unsure, say N.
570
571endif # FTRACE
572
573endif # TRACING_SUPPORT
574
575