]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - kernel/trace/Kconfig
tracing: use raw spinlocks for trace_vprintk
[mirror_ubuntu-jammy-kernel.git] / kernel / trace / Kconfig
1 #
2 # Architectures that offer an FUNCTION_TRACER implementation should
3 # select HAVE_FUNCTION_TRACER:
4 #
5
6 config USER_STACKTRACE_SUPPORT
7 bool
8
9 config NOP_TRACER
10 bool
11
12 config HAVE_FTRACE_NMI_ENTER
13 bool
14
15 config HAVE_FUNCTION_TRACER
16 bool
17
18 config HAVE_FUNCTION_GRAPH_TRACER
19 bool
20
21 config HAVE_FUNCTION_TRACE_MCOUNT_TEST
22 bool
23 help
24 This gets selected when the arch tests the function_trace_stop
25 variable at the mcount call site. Otherwise, this variable
26 is tested by the called function.
27
28 config HAVE_DYNAMIC_FTRACE
29 bool
30
31 config HAVE_FTRACE_MCOUNT_RECORD
32 bool
33
34 config HAVE_HW_BRANCH_TRACER
35 bool
36
37 config TRACER_MAX_TRACE
38 bool
39
40 config RING_BUFFER
41 bool
42
43 config FTRACE_NMI_ENTER
44 bool
45 depends on HAVE_FTRACE_NMI_ENTER
46 default y
47
48 config TRACING
49 bool
50 select DEBUG_FS
51 select RING_BUFFER
52 select STACKTRACE if STACKTRACE_SUPPORT
53 select TRACEPOINTS
54 select NOP_TRACER
55 select BINARY_PRINTF
56
57 #
58 # Minimum requirements an architecture has to meet for us to
59 # be able to offer generic tracing facilities:
60 #
61 config TRACING_SUPPORT
62 bool
63 depends on TRACE_IRQFLAGS_SUPPORT
64 depends on STACKTRACE_SUPPORT
65 default y
66
67 if TRACING_SUPPORT
68
69 menu "Tracers"
70
71 config FUNCTION_TRACER
72 bool "Kernel Function Tracer"
73 depends on HAVE_FUNCTION_TRACER
74 select FRAME_POINTER
75 select KALLSYMS
76 select TRACING
77 select CONTEXT_SWITCH_TRACER
78 help
79 Enable the kernel to trace every kernel function. This is done
80 by using a compiler feature to insert a small, 5-byte No-Operation
81 instruction to the beginning of every kernel function, which NOP
82 sequence is then dynamically patched into a tracer call when
83 tracing is enabled by the administrator. If it's runtime disabled
84 (the bootup default), then the overhead of the instructions is very
85 small and not measurable even in micro-benchmarks.
86
87 config FUNCTION_GRAPH_TRACER
88 bool "Kernel Function Graph Tracer"
89 depends on HAVE_FUNCTION_GRAPH_TRACER
90 depends on FUNCTION_TRACER
91 default y
92 help
93 Enable the kernel to trace a function at both its return
94 and its entry.
95 It's first purpose is to trace the duration of functions and
96 draw a call graph for each thread with some informations like
97 the return value.
98 This is done by setting the current return address on the current
99 task structure into a stack of calls.
100
101 config IRQSOFF_TRACER
102 bool "Interrupts-off Latency Tracer"
103 default n
104 depends on TRACE_IRQFLAGS_SUPPORT
105 depends on GENERIC_TIME
106 select TRACE_IRQFLAGS
107 select TRACING
108 select TRACER_MAX_TRACE
109 help
110 This option measures the time spent in irqs-off critical
111 sections, with microsecond accuracy.
112
113 The default measurement method is a maximum search, which is
114 disabled by default and can be runtime (re-)started
115 via:
116
117 echo 0 > /debugfs/tracing/tracing_max_latency
118
119 (Note that kernel size and overhead increases with this option
120 enabled. This option and the preempt-off timing option can be
121 used together or separately.)
122
123 config PREEMPT_TRACER
124 bool "Preemption-off Latency Tracer"
125 default n
126 depends on GENERIC_TIME
127 depends on PREEMPT
128 select TRACING
129 select TRACER_MAX_TRACE
130 help
131 This option measures the time spent in preemption off critical
132 sections, with microsecond accuracy.
133
134 The default measurement method is a maximum search, which is
135 disabled by default and can be runtime (re-)started
136 via:
137
138 echo 0 > /debugfs/tracing/tracing_max_latency
139
140 (Note that kernel size and overhead increases with this option
141 enabled. This option and the irqs-off timing option can be
142 used together or separately.)
143
144 config SYSPROF_TRACER
145 bool "Sysprof Tracer"
146 depends on X86
147 select TRACING
148 select CONTEXT_SWITCH_TRACER
149 help
150 This tracer provides the trace needed by the 'Sysprof' userspace
151 tool.
152
153 config SCHED_TRACER
154 bool "Scheduling Latency Tracer"
155 select TRACING
156 select CONTEXT_SWITCH_TRACER
157 select TRACER_MAX_TRACE
158 help
159 This tracer tracks the latency of the highest priority task
160 to be scheduled in, starting from the point it has woken up.
161
162 config CONTEXT_SWITCH_TRACER
163 bool "Trace process context switches"
164 select TRACING
165 select MARKERS
166 help
167 This tracer gets called from the context switch and records
168 all switching of tasks.
169
170 config EVENT_TRACER
171 bool "Trace various events in the kernel"
172 select TRACING
173 help
174 This tracer hooks to various trace points in the kernel
175 allowing the user to pick and choose which trace point they
176 want to trace.
177
178 config BOOT_TRACER
179 bool "Trace boot initcalls"
180 select TRACING
181 select CONTEXT_SWITCH_TRACER
182 help
183 This tracer helps developers to optimize boot times: it records
184 the timings of the initcalls and traces key events and the identity
185 of tasks that can cause boot delays, such as context-switches.
186
187 Its aim is to be parsed by the /scripts/bootgraph.pl tool to
188 produce pretty graphics about boot inefficiencies, giving a visual
189 representation of the delays during initcalls - but the raw
190 /debug/tracing/trace text output is readable too.
191
192 You must pass in ftrace=initcall to the kernel command line
193 to enable this on bootup.
194
195 config TRACE_BRANCH_PROFILING
196 bool "Trace likely/unlikely profiler"
197 select TRACING
198 help
199 This tracer profiles all the the likely and unlikely macros
200 in the kernel. It will display the results in:
201
202 /debugfs/tracing/profile_annotated_branch
203
204 Note: this will add a significant overhead, only turn this
205 on if you need to profile the system's use of these macros.
206
207 Say N if unsure.
208
209 config PROFILE_ALL_BRANCHES
210 bool "Profile all if conditionals"
211 depends on TRACE_BRANCH_PROFILING
212 help
213 This tracer profiles all branch conditions. Every if ()
214 taken in the kernel is recorded whether it hit or miss.
215 The results will be displayed in:
216
217 /debugfs/tracing/profile_branch
218
219 This configuration, when enabled, will impose a great overhead
220 on the system. This should only be enabled when the system
221 is to be analyzed
222
223 Say N if unsure.
224
225 config TRACING_BRANCHES
226 bool
227 help
228 Selected by tracers that will trace the likely and unlikely
229 conditions. This prevents the tracers themselves from being
230 profiled. Profiling the tracing infrastructure can only happen
231 when the likelys and unlikelys are not being traced.
232
233 config BRANCH_TRACER
234 bool "Trace likely/unlikely instances"
235 depends on TRACE_BRANCH_PROFILING
236 select TRACING_BRANCHES
237 help
238 This traces the events of likely and unlikely condition
239 calls in the kernel. The difference between this and the
240 "Trace likely/unlikely profiler" is that this is not a
241 histogram of the callers, but actually places the calling
242 events into a running trace buffer to see when and where the
243 events happened, as well as their results.
244
245 Say N if unsure.
246
247 config POWER_TRACER
248 bool "Trace power consumption behavior"
249 depends on X86
250 select TRACING
251 help
252 This tracer helps developers to analyze and optimize the kernels
253 power management decisions, specifically the C-state and P-state
254 behavior.
255
256
257 config STACK_TRACER
258 bool "Trace max stack"
259 depends on HAVE_FUNCTION_TRACER
260 select FUNCTION_TRACER
261 select STACKTRACE
262 select KALLSYMS
263 help
264 This special tracer records the maximum stack footprint of the
265 kernel and displays it in debugfs/tracing/stack_trace.
266
267 This tracer works by hooking into every function call that the
268 kernel executes, and keeping a maximum stack depth value and
269 stack-trace saved. If this is configured with DYNAMIC_FTRACE
270 then it will not have any overhead while the stack tracer
271 is disabled.
272
273 To enable the stack tracer on bootup, pass in 'stacktrace'
274 on the kernel command line.
275
276 The stack tracer can also be enabled or disabled via the
277 sysctl kernel.stack_tracer_enabled
278
279 Say N if unsure.
280
281 config HW_BRANCH_TRACER
282 depends on HAVE_HW_BRANCH_TRACER
283 bool "Trace hw branches"
284 select TRACING
285 help
286 This tracer records all branches on the system in a circular
287 buffer giving access to the last N branches for each cpu.
288
289 config KMEMTRACE
290 bool "Trace SLAB allocations"
291 select TRACING
292 help
293 kmemtrace provides tracing for slab allocator functions, such as
294 kmalloc, kfree, kmem_cache_alloc, kmem_cache_free etc.. Collected
295 data is then fed to the userspace application in order to analyse
296 allocation hotspots, internal fragmentation and so on, making it
297 possible to see how well an allocator performs, as well as debug
298 and profile kernel code.
299
300 This requires an userspace application to use. See
301 Documentation/vm/kmemtrace.txt for more information.
302
303 Saying Y will make the kernel somewhat larger and slower. However,
304 if you disable kmemtrace at run-time or boot-time, the performance
305 impact is minimal (depending on the arch the kernel is built for).
306
307 If unsure, say N.
308
309 config WORKQUEUE_TRACER
310 bool "Trace workqueues"
311 select TRACING
312 help
313 The workqueue tracer provides some statistical informations
314 about each cpu workqueue thread such as the number of the
315 works inserted and executed since their creation. It can help
316 to evaluate the amount of work each of them have to perform.
317 For example it can help a developer to decide whether he should
318 choose a per cpu workqueue instead of a singlethreaded one.
319
320 config BLK_DEV_IO_TRACE
321 bool "Support for tracing block io actions"
322 depends on SYSFS
323 depends on BLOCK
324 select RELAY
325 select DEBUG_FS
326 select TRACEPOINTS
327 select TRACING
328 select STACKTRACE
329 help
330 Say Y here if you want to be able to trace the block layer actions
331 on a given queue. Tracing allows you to see any traffic happening
332 on a block device queue. For more information (and the userspace
333 support tools needed), fetch the blktrace tools from:
334
335 git://git.kernel.dk/blktrace.git
336
337 Tracing also is possible using the ftrace interface, e.g.:
338
339 echo 1 > /sys/block/sda/sda1/trace/enable
340 echo blk > /sys/kernel/debug/tracing/current_tracer
341 cat /sys/kernel/debug/tracing/trace_pipe
342
343 If unsure, say N.
344
345 config DYNAMIC_FTRACE
346 bool "enable/disable ftrace tracepoints dynamically"
347 depends on FUNCTION_TRACER
348 depends on HAVE_DYNAMIC_FTRACE
349 default y
350 help
351 This option will modify all the calls to ftrace dynamically
352 (will patch them out of the binary image and replaces them
353 with a No-Op instruction) as they are called. A table is
354 created to dynamically enable them again.
355
356 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise
357 has native performance as long as no tracing is active.
358
359 The changes to the code are done by a kernel thread that
360 wakes up once a second and checks to see if any ftrace calls
361 were made. If so, it runs stop_machine (stops all CPUS)
362 and modifies the code to jump over the call to ftrace.
363
364 config FTRACE_MCOUNT_RECORD
365 def_bool y
366 depends on DYNAMIC_FTRACE
367 depends on HAVE_FTRACE_MCOUNT_RECORD
368
369 config FTRACE_SELFTEST
370 bool
371
372 config FTRACE_STARTUP_TEST
373 bool "Perform a startup test on ftrace"
374 depends on TRACING
375 select FTRACE_SELFTEST
376 help
377 This option performs a series of startup tests on ftrace. On bootup
378 a series of tests are made to verify that the tracer is
379 functioning properly. It will do tests on all the configured
380 tracers of ftrace.
381
382 config MMIOTRACE
383 bool "Memory mapped IO tracing"
384 depends on HAVE_MMIOTRACE_SUPPORT && PCI
385 select TRACING
386 help
387 Mmiotrace traces Memory Mapped I/O access and is meant for
388 debugging and reverse engineering. It is called from the ioremap
389 implementation and works via page faults. Tracing is disabled by
390 default and can be enabled at run-time.
391
392 See Documentation/tracers/mmiotrace.txt.
393 If you are not helping to develop drivers, say N.
394
395 config MMIOTRACE_TEST
396 tristate "Test module for mmiotrace"
397 depends on MMIOTRACE && m
398 help
399 This is a dumb module for testing mmiotrace. It is very dangerous
400 as it will write garbage to IO memory starting at a given address.
401 However, it should be safe to use on e.g. unused portion of VRAM.
402
403 Say N, unless you absolutely know what you are doing.
404
405 endmenu
406
407 endif # TRACING_SUPPORT
408