xref: /linux/kernel/trace/Kconfig (revision 3eeebf17f31c583f83e081b17b3076477cb96886)
1#
2# Architectures that offer an FTRACE implementation should select HAVE_FTRACE:
3#
4
5config NOP_TRACER
6	bool
7
8config HAVE_FTRACE
9	bool
10	select NOP_TRACER
11
12config HAVE_DYNAMIC_FTRACE
13	bool
14
15config HAVE_FTRACE_MCOUNT_RECORD
16	bool
17
18config TRACER_MAX_TRACE
19	bool
20
21config RING_BUFFER
22	bool
23
24config TRACING
25	bool
26	select DEBUG_FS
27	select RING_BUFFER
28	select STACKTRACE
29	select TRACEPOINTS
30
31config FTRACE
32	bool "Kernel Function Tracer"
33	depends on HAVE_FTRACE
34	depends on DEBUG_KERNEL
35	select FRAME_POINTER
36	select TRACING
37	select CONTEXT_SWITCH_TRACER
38	help
39	  Enable the kernel to trace every kernel function. This is done
40	  by using a compiler feature to insert a small, 5-byte No-Operation
41	  instruction to the beginning of every kernel function, which NOP
42	  sequence is then dynamically patched into a tracer call when
43	  tracing is enabled by the administrator. If it's runtime disabled
44	  (the bootup default), then the overhead of the instructions is very
45	  small and not measurable even in micro-benchmarks.
46
47config IRQSOFF_TRACER
48	bool "Interrupts-off Latency Tracer"
49	default n
50	depends on TRACE_IRQFLAGS_SUPPORT
51	depends on GENERIC_TIME
52	depends on HAVE_FTRACE
53	depends on DEBUG_KERNEL
54	select TRACE_IRQFLAGS
55	select TRACING
56	select TRACER_MAX_TRACE
57	help
58	  This option measures the time spent in irqs-off critical
59	  sections, with microsecond accuracy.
60
61	  The default measurement method is a maximum search, which is
62	  disabled by default and can be runtime (re-)started
63	  via:
64
65	      echo 0 > /debugfs/tracing/tracing_max_latency
66
67	  (Note that kernel size and overhead increases with this option
68	  enabled. This option and the preempt-off timing option can be
69	  used together or separately.)
70
71config PREEMPT_TRACER
72	bool "Preemption-off Latency Tracer"
73	default n
74	depends on GENERIC_TIME
75	depends on PREEMPT
76	depends on HAVE_FTRACE
77	depends on DEBUG_KERNEL
78	select TRACING
79	select TRACER_MAX_TRACE
80	help
81	  This option measures the time spent in preemption off critical
82	  sections, with microsecond accuracy.
83
84	  The default measurement method is a maximum search, which is
85	  disabled by default and can be runtime (re-)started
86	  via:
87
88	      echo 0 > /debugfs/tracing/tracing_max_latency
89
90	  (Note that kernel size and overhead increases with this option
91	  enabled. This option and the irqs-off timing option can be
92	  used together or separately.)
93
94config SYSPROF_TRACER
95	bool "Sysprof Tracer"
96	depends on X86
97	select TRACING
98	help
99	  This tracer provides the trace needed by the 'Sysprof' userspace
100	  tool.
101
102config SCHED_TRACER
103	bool "Scheduling Latency Tracer"
104	depends on HAVE_FTRACE
105	depends on DEBUG_KERNEL
106	select TRACING
107	select CONTEXT_SWITCH_TRACER
108	select TRACER_MAX_TRACE
109	help
110	  This tracer tracks the latency of the highest priority task
111	  to be scheduled in, starting from the point it has woken up.
112
113config CONTEXT_SWITCH_TRACER
114	bool "Trace process context switches"
115	depends on HAVE_FTRACE
116	depends on DEBUG_KERNEL
117	select TRACING
118	select MARKERS
119	help
120	  This tracer gets called from the context switch and records
121	  all switching of tasks.
122
123config BOOT_TRACER
124	bool "Trace boot initcalls"
125	depends on HAVE_FTRACE
126	depends on DEBUG_KERNEL
127	select TRACING
128	help
129	  This tracer helps developers to optimize boot times: it records
130	  the timings of the initcalls and traces key events and the identity
131	  of tasks that can cause boot delays, such as context-switches.
132
133	  Its aim is to be parsed by the /scripts/bootgraph.pl tool to
134	  produce pretty graphics about boot inefficiencies, giving a visual
135	  representation of the delays during initcalls - but the raw
136	  /debug/tracing/trace text output is readable too.
137
138	  ( Note that tracing self tests can't be enabled if this tracer is
139	    selected, because the self-tests are an initcall as well and that
140	    would invalidate the boot trace. )
141
142config STACK_TRACER
143	bool "Trace max stack"
144	depends on HAVE_FTRACE
145	depends on DEBUG_KERNEL
146	select FTRACE
147	select STACKTRACE
148	help
149	  This special tracer records the maximum stack footprint of the
150	  kernel and displays it in debugfs/tracing/stack_trace.
151
152	  This tracer works by hooking into every function call that the
153	  kernel executes, and keeping a maximum stack depth value and
154	  stack-trace saved. Because this logic has to execute in every
155	  kernel function, all the time, this option can slow down the
156	  kernel measurably and is generally intended for kernel
157	  developers only.
158
159	  Say N if unsure.
160
161config DYNAMIC_FTRACE
162	bool "enable/disable ftrace tracepoints dynamically"
163	depends on FTRACE
164	depends on HAVE_DYNAMIC_FTRACE
165	depends on DEBUG_KERNEL
166	default y
167	help
168         This option will modify all the calls to ftrace dynamically
169	 (will patch them out of the binary image and replaces them
170	 with a No-Op instruction) as they are called. A table is
171	 created to dynamically enable them again.
172
173	 This way a CONFIG_FTRACE kernel is slightly larger, but otherwise
174	 has native performance as long as no tracing is active.
175
176	 The changes to the code are done by a kernel thread that
177	 wakes up once a second and checks to see if any ftrace calls
178	 were made. If so, it runs stop_machine (stops all CPUS)
179	 and modifies the code to jump over the call to ftrace.
180
181config FTRACE_MCOUNT_RECORD
182	def_bool y
183	depends on DYNAMIC_FTRACE
184	depends on HAVE_FTRACE_MCOUNT_RECORD
185
186config FTRACE_SELFTEST
187	bool
188
189config FTRACE_STARTUP_TEST
190	bool "Perform a startup test on ftrace"
191	depends on TRACING && DEBUG_KERNEL && !BOOT_TRACER
192	select FTRACE_SELFTEST
193	help
194	  This option performs a series of startup tests on ftrace. On bootup
195	  a series of tests are made to verify that the tracer is
196	  functioning properly. It will do tests on all the configured
197	  tracers of ftrace.
198