xref: /linux-6.15/kernel/trace/Kconfig (revision b22e7939)
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_DYNAMIC_FTRACE_WITH_REGS
43	bool
44
45config HAVE_FTRACE_MCOUNT_RECORD
46	bool
47	help
48	  See Documentation/trace/ftrace-design.txt
49
50config HAVE_SYSCALL_TRACEPOINTS
51	bool
52	help
53	  See Documentation/trace/ftrace-design.txt
54
55config HAVE_FENTRY
56	bool
57	help
58	  Arch supports the gcc options -pg with -mfentry
59
60config HAVE_C_RECORDMCOUNT
61	bool
62	help
63	  C version of recordmcount available?
64
65config TRACER_MAX_TRACE
66	bool
67
68config TRACE_CLOCK
69	bool
70
71config RING_BUFFER
72	bool
73	select TRACE_CLOCK
74
75config FTRACE_NMI_ENTER
76       bool
77       depends on HAVE_FTRACE_NMI_ENTER
78       default y
79
80config EVENT_TRACING
81	select CONTEXT_SWITCH_TRACER
82	bool
83
84config EVENT_POWER_TRACING_DEPRECATED
85	depends on EVENT_TRACING
86	bool "Deprecated power event trace API, to be removed"
87	default y
88	help
89	  Provides old power event types:
90	  C-state/idle accounting events:
91	  power:power_start
92	  power:power_end
93	  and old cpufreq accounting event:
94	  power:power_frequency
95	  This is for userspace compatibility
96	  and will vanish after 5 kernel iterations,
97	  namely 3.1.
98
99config CONTEXT_SWITCH_TRACER
100	bool
101
102config RING_BUFFER_ALLOW_SWAP
103	bool
104	help
105	 Allow the use of ring_buffer_swap_cpu.
106	 Adds a very slight overhead to tracing when enabled.
107
108# All tracer options should select GENERIC_TRACER. For those options that are
109# enabled by all tracers (context switch and event tracer) they select TRACING.
110# This allows those options to appear when no other tracer is selected. But the
111# options do not appear when something else selects it. We need the two options
112# GENERIC_TRACER and TRACING to avoid circular dependencies to accomplish the
113# hiding of the automatic options.
114
115config TRACING
116	bool
117	select DEBUG_FS
118	select RING_BUFFER
119	select STACKTRACE if STACKTRACE_SUPPORT
120	select TRACEPOINTS
121	select NOP_TRACER
122	select BINARY_PRINTF
123	select EVENT_TRACING
124	select TRACE_CLOCK
125	select IRQ_WORK
126
127config GENERIC_TRACER
128	bool
129	select TRACING
130
131#
132# Minimum requirements an architecture has to meet for us to
133# be able to offer generic tracing facilities:
134#
135config TRACING_SUPPORT
136	bool
137	# PPC32 has no irqflags tracing support, but it can use most of the
138	# tracers anyway, they were tested to build and work. Note that new
139	# exceptions to this list aren't welcomed, better implement the
140	# irqflags tracing for your architecture.
141	depends on TRACE_IRQFLAGS_SUPPORT || PPC32
142	depends on STACKTRACE_SUPPORT
143	default y
144
145if TRACING_SUPPORT
146
147menuconfig FTRACE
148	bool "Tracers"
149	default y if DEBUG_KERNEL
150	help
151	  Enable the kernel tracing infrastructure.
152
153if FTRACE
154
155config FUNCTION_TRACER
156	bool "Kernel Function Tracer"
157	depends on HAVE_FUNCTION_TRACER
158	select KALLSYMS
159	select GENERIC_TRACER
160	select CONTEXT_SWITCH_TRACER
161	help
162	  Enable the kernel to trace every kernel function. This is done
163	  by using a compiler feature to insert a small, 5-byte No-Operation
164	  instruction at the beginning of every kernel function, which NOP
165	  sequence is then dynamically patched into a tracer call when
166	  tracing is enabled by the administrator. If it's runtime disabled
167	  (the bootup default), then the overhead of the instructions is very
168	  small and not measurable even in micro-benchmarks.
169
170config FUNCTION_GRAPH_TRACER
171	bool "Kernel Function Graph Tracer"
172	depends on HAVE_FUNCTION_GRAPH_TRACER
173	depends on FUNCTION_TRACER
174	depends on !X86_32 || !CC_OPTIMIZE_FOR_SIZE
175	default y
176	help
177	  Enable the kernel to trace a function at both its return
178	  and its entry.
179	  Its first purpose is to trace the duration of functions and
180	  draw a call graph for each thread with some information like
181	  the return value. This is done by setting the current return
182	  address on the current task structure into a stack of calls.
183
184
185config IRQSOFF_TRACER
186	bool "Interrupts-off Latency Tracer"
187	default n
188	depends on TRACE_IRQFLAGS_SUPPORT
189	depends on !ARCH_USES_GETTIMEOFFSET
190	select TRACE_IRQFLAGS
191	select GENERIC_TRACER
192	select TRACER_MAX_TRACE
193	select RING_BUFFER_ALLOW_SWAP
194	help
195	  This option measures the time spent in irqs-off critical
196	  sections, with microsecond accuracy.
197
198	  The default measurement method is a maximum search, which is
199	  disabled by default and can be runtime (re-)started
200	  via:
201
202	      echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
203
204	  (Note that kernel size and overhead increase with this option
205	  enabled. This option and the preempt-off timing option can be
206	  used together or separately.)
207
208config PREEMPT_TRACER
209	bool "Preemption-off Latency Tracer"
210	default n
211	depends on !ARCH_USES_GETTIMEOFFSET
212	depends on PREEMPT
213	select GENERIC_TRACER
214	select TRACER_MAX_TRACE
215	select RING_BUFFER_ALLOW_SWAP
216	help
217	  This option measures the time spent in preemption-off critical
218	  sections, with microsecond accuracy.
219
220	  The default measurement method is a maximum search, which is
221	  disabled by default and can be runtime (re-)started
222	  via:
223
224	      echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
225
226	  (Note that kernel size and overhead increase with this option
227	  enabled. This option and the irqs-off timing option can be
228	  used together or separately.)
229
230config SCHED_TRACER
231	bool "Scheduling Latency Tracer"
232	select GENERIC_TRACER
233	select CONTEXT_SWITCH_TRACER
234	select TRACER_MAX_TRACE
235	help
236	  This tracer tracks the latency of the highest priority task
237	  to be scheduled in, starting from the point it has woken up.
238
239config ENABLE_DEFAULT_TRACERS
240	bool "Trace process context switches and events"
241	depends on !GENERIC_TRACER
242	select TRACING
243	help
244	  This tracer hooks to various trace points in the kernel,
245	  allowing the user to pick and choose which trace point they
246	  want to trace. It also includes the sched_switch tracer plugin.
247
248config FTRACE_SYSCALLS
249	bool "Trace syscalls"
250	depends on HAVE_SYSCALL_TRACEPOINTS
251	select GENERIC_TRACER
252	select KALLSYMS
253	help
254	  Basic tracer to catch the syscall entry and exit events.
255
256config TRACER_SNAPSHOT
257	bool "Create a snapshot trace buffer"
258	select TRACER_MAX_TRACE
259	help
260	  Allow tracing users to take snapshot of the current buffer using the
261	  ftrace interface, e.g.:
262
263	      echo 1 > /sys/kernel/debug/tracing/snapshot
264	      cat snapshot
265
266config TRACE_BRANCH_PROFILING
267	bool
268	select GENERIC_TRACER
269
270choice
271	prompt "Branch Profiling"
272	default BRANCH_PROFILE_NONE
273	help
274	 The branch profiling is a software profiler. It will add hooks
275	 into the C conditionals to test which path a branch takes.
276
277	 The likely/unlikely profiler only looks at the conditions that
278	 are annotated with a likely or unlikely macro.
279
280	 The "all branch" profiler will profile every if-statement in the
281	 kernel. This profiler will also enable the likely/unlikely
282	 profiler.
283
284	 Either of the above profilers adds a bit of overhead to the system.
285	 If unsure, choose "No branch profiling".
286
287config BRANCH_PROFILE_NONE
288	bool "No branch profiling"
289	help
290	  No branch profiling. Branch profiling adds a bit of overhead.
291	  Only enable it if you want to analyse the branching behavior.
292	  Otherwise keep it disabled.
293
294config PROFILE_ANNOTATED_BRANCHES
295	bool "Trace likely/unlikely profiler"
296	select TRACE_BRANCH_PROFILING
297	help
298	  This tracer profiles all likely and unlikely macros
299	  in the kernel. It will display the results in:
300
301	  /sys/kernel/debug/tracing/trace_stat/branch_annotated
302
303	  Note: this will add a significant overhead; only turn this
304	  on if you need to profile the system's use of these macros.
305
306config PROFILE_ALL_BRANCHES
307	bool "Profile all if conditionals"
308	select TRACE_BRANCH_PROFILING
309	help
310	  This tracer profiles all branch conditions. Every if ()
311	  taken in the kernel is recorded whether it hit or miss.
312	  The results will be displayed in:
313
314	  /sys/kernel/debug/tracing/trace_stat/branch_all
315
316	  This option also enables the likely/unlikely profiler.
317
318	  This configuration, when enabled, will impose a great overhead
319	  on the system. This should only be enabled when the system
320	  is to be analyzed in much detail.
321endchoice
322
323config TRACING_BRANCHES
324	bool
325	help
326	  Selected by tracers that will trace the likely and unlikely
327	  conditions. This prevents the tracers themselves from being
328	  profiled. Profiling the tracing infrastructure can only happen
329	  when the likelys and unlikelys are not being traced.
330
331config BRANCH_TRACER
332	bool "Trace likely/unlikely instances"
333	depends on TRACE_BRANCH_PROFILING
334	select TRACING_BRANCHES
335	help
336	  This traces the events of likely and unlikely condition
337	  calls in the kernel.  The difference between this and the
338	  "Trace likely/unlikely profiler" is that this is not a
339	  histogram of the callers, but actually places the calling
340	  events into a running trace buffer to see when and where the
341	  events happened, as well as their results.
342
343	  Say N if unsure.
344
345config STACK_TRACER
346	bool "Trace max stack"
347	depends on HAVE_FUNCTION_TRACER
348	select FUNCTION_TRACER
349	select STACKTRACE
350	select KALLSYMS
351	help
352	  This special tracer records the maximum stack footprint of the
353	  kernel and displays it in /sys/kernel/debug/tracing/stack_trace.
354
355	  This tracer works by hooking into every function call that the
356	  kernel executes, and keeping a maximum stack depth value and
357	  stack-trace saved.  If this is configured with DYNAMIC_FTRACE
358	  then it will not have any overhead while the stack tracer
359	  is disabled.
360
361	  To enable the stack tracer on bootup, pass in 'stacktrace'
362	  on the kernel command line.
363
364	  The stack tracer can also be enabled or disabled via the
365	  sysctl kernel.stack_tracer_enabled
366
367	  Say N if unsure.
368
369config BLK_DEV_IO_TRACE
370	bool "Support for tracing block IO actions"
371	depends on SYSFS
372	depends on BLOCK
373	select RELAY
374	select DEBUG_FS
375	select TRACEPOINTS
376	select GENERIC_TRACER
377	select STACKTRACE
378	help
379	  Say Y here if you want to be able to trace the block layer actions
380	  on a given queue. Tracing allows you to see any traffic happening
381	  on a block device queue. For more information (and the userspace
382	  support tools needed), fetch the blktrace tools from:
383
384	  git://git.kernel.dk/blktrace.git
385
386	  Tracing also is possible using the ftrace interface, e.g.:
387
388	    echo 1 > /sys/block/sda/sda1/trace/enable
389	    echo blk > /sys/kernel/debug/tracing/current_tracer
390	    cat /sys/kernel/debug/tracing/trace_pipe
391
392	  If unsure, say N.
393
394config KPROBE_EVENT
395	depends on KPROBES
396	depends on HAVE_REGS_AND_STACK_ACCESS_API
397	bool "Enable kprobes-based dynamic events"
398	select TRACING
399	select PROBE_EVENTS
400	default y
401	help
402	  This allows the user to add tracing events (similar to tracepoints)
403	  on the fly via the ftrace interface. See
404	  Documentation/trace/kprobetrace.txt for more details.
405
406	  Those events can be inserted wherever kprobes can probe, and record
407	  various register and memory values.
408
409	  This option is also required by perf-probe subcommand of perf tools.
410	  If you want to use perf tools, this option is strongly recommended.
411
412config UPROBE_EVENT
413	bool "Enable uprobes-based dynamic events"
414	depends on ARCH_SUPPORTS_UPROBES
415	depends on MMU
416	select UPROBES
417	select PROBE_EVENTS
418	select TRACING
419	default n
420	help
421	  This allows the user to add tracing events on top of userspace
422	  dynamic events (similar to tracepoints) on the fly via the trace
423	  events interface. Those events can be inserted wherever uprobes
424	  can probe, and record various registers.
425	  This option is required if you plan to use perf-probe subcommand
426	  of perf tools on user space applications.
427
428config PROBE_EVENTS
429	def_bool 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 replace 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
443	  otherwise 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 DYNAMIC_FTRACE_WITH_REGS
451	def_bool y
452	depends on DYNAMIC_FTRACE
453	depends on HAVE_DYNAMIC_FTRACE_WITH_REGS
454
455config FUNCTION_PROFILER
456	bool "Kernel function profiler"
457	depends on FUNCTION_TRACER
458	default n
459	help
460	  This option enables the kernel function profiler. A file is created
461	  in debugfs called function_profile_enabled which defaults to zero.
462	  When a 1 is echoed into this file profiling begins, and when a
463	  zero is entered, profiling stops. A "functions" file is created in
464	  the trace_stats directory; this file shows the list of functions that
465	  have been hit and their counters.
466
467	  If in doubt, say N.
468
469config FTRACE_MCOUNT_RECORD
470	def_bool y
471	depends on DYNAMIC_FTRACE
472	depends on HAVE_FTRACE_MCOUNT_RECORD
473
474config FTRACE_SELFTEST
475	bool
476
477config FTRACE_STARTUP_TEST
478	bool "Perform a startup test on ftrace"
479	depends on GENERIC_TRACER
480	select FTRACE_SELFTEST
481	help
482	  This option performs a series of startup tests on ftrace. On bootup
483	  a series of tests are made to verify that the tracer is
484	  functioning properly. It will do tests on all the configured
485	  tracers of ftrace.
486
487config EVENT_TRACE_TEST_SYSCALLS
488	bool "Run selftest on syscall events"
489	depends on FTRACE_STARTUP_TEST
490	help
491	 This option will also enable testing every syscall event.
492	 It only enables the event and disables it and runs various loads
493	 with the event enabled. This adds a bit more time for kernel boot
494	 up since it runs this on every system call defined.
495
496	 TBD - enable a way to actually call the syscalls as we test their
497	       events
498
499config MMIOTRACE
500	bool "Memory mapped IO tracing"
501	depends on HAVE_MMIOTRACE_SUPPORT && PCI
502	select GENERIC_TRACER
503	help
504	  Mmiotrace traces Memory Mapped I/O access and is meant for
505	  debugging and reverse engineering. It is called from the ioremap
506	  implementation and works via page faults. Tracing is disabled by
507	  default and can be enabled at run-time.
508
509	  See Documentation/trace/mmiotrace.txt.
510	  If you are not helping to develop drivers, say N.
511
512config MMIOTRACE_TEST
513	tristate "Test module for mmiotrace"
514	depends on MMIOTRACE && m
515	help
516	  This is a dumb module for testing mmiotrace. It is very dangerous
517	  as it will write garbage to IO memory starting at a given address.
518	  However, it should be safe to use on e.g. unused portion of VRAM.
519
520	  Say N, unless you absolutely know what you are doing.
521
522config RING_BUFFER_BENCHMARK
523	tristate "Ring buffer benchmark stress tester"
524	depends on RING_BUFFER
525	help
526	  This option creates a test to stress the ring buffer and benchmark it.
527	  It creates its own ring buffer such that it will not interfere with
528	  any other users of the ring buffer (such as ftrace). It then creates
529	  a producer and consumer that will run for 10 seconds and sleep for
530	  10 seconds. Each interval it will print out the number of events
531	  it recorded and give a rough estimate of how long each iteration took.
532
533	  It does not disable interrupts or raise its priority, so it may be
534	  affected by processes that are running.
535
536	  If unsure, say N.
537
538endif # FTRACE
539
540endif # TRACING_SUPPORT
541
542