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