]>
Commit | Line | Data |
---|---|---|
ec8f24b7 | 1 | # SPDX-License-Identifier: GPL-2.0-only |
16444a8a | 2 | # |
606576ce SR |
3 | # Architectures that offer an FUNCTION_TRACER implementation should |
4 | # select HAVE_FUNCTION_TRACER: | |
16444a8a | 5 | # |
2a3a4f66 | 6 | |
8d26487f TE |
7 | config USER_STACKTRACE_SUPPORT |
8 | bool | |
9 | ||
2a3a4f66 FW |
10 | config NOP_TRACER |
11 | bool | |
12 | ||
54ecbe6f MH |
13 | config HAVE_RETHOOK |
14 | bool | |
15 | ||
16 | config RETHOOK | |
17 | bool | |
18 | depends on HAVE_RETHOOK | |
19 | help | |
20 | Enable generic return hooking feature. This is an internal | |
21 | API, which will be used by other function-entry hooking | |
22 | features like fprobe and kprobes. | |
23 | ||
606576ce | 24 | config HAVE_FUNCTION_TRACER |
16444a8a | 25 | bool |
555f386c | 26 | help |
5fb94e9c | 27 | See Documentation/trace/ftrace-design.rst |
bc0c38d1 | 28 | |
fb52607a | 29 | config HAVE_FUNCTION_GRAPH_TRACER |
15e6cb36 | 30 | bool |
555f386c | 31 | help |
5fb94e9c | 32 | See Documentation/trace/ftrace-design.rst |
15e6cb36 | 33 | |
a1be9ccc DP |
34 | config HAVE_FUNCTION_GRAPH_RETVAL |
35 | bool | |
36 | ||
677aa9f7 SR |
37 | config HAVE_DYNAMIC_FTRACE |
38 | bool | |
555f386c | 39 | help |
5fb94e9c | 40 | See Documentation/trace/ftrace-design.rst |
677aa9f7 | 41 | |
06aeaaea MH |
42 | config HAVE_DYNAMIC_FTRACE_WITH_REGS |
43 | bool | |
44 | ||
763e34e7 SRV |
45 | config HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS |
46 | bool | |
47 | ||
cbad0fb2 MR |
48 | config HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS |
49 | bool | |
50 | ||
02a474ca SRV |
51 | config HAVE_DYNAMIC_FTRACE_WITH_ARGS |
52 | bool | |
53 | help | |
54 | If this is set, then arguments and stack can be found from | |
94d095ff | 55 | the ftrace_regs passed into the function callback regs parameter |
02a474ca | 56 | by default, even without setting the REGS flag in the ftrace_ops. |
94d095ff MR |
57 | This allows for use of ftrace_regs_get_argument() and |
58 | ftrace_regs_get_stack_pointer(). | |
02a474ca | 59 | |
9440155c PZI |
60 | config HAVE_DYNAMIC_FTRACE_NO_PATCHABLE |
61 | bool | |
62 | help | |
63 | If the architecture generates __patchable_function_entries sections | |
64 | but does not want them included in the ftrace locations. | |
65 | ||
8da3821b SR |
66 | config HAVE_FTRACE_MCOUNT_RECORD |
67 | bool | |
555f386c | 68 | help |
5fb94e9c | 69 | See Documentation/trace/ftrace-design.rst |
8da3821b | 70 | |
66700001 | 71 | config HAVE_SYSCALL_TRACEPOINTS |
ee08c6ec | 72 | bool |
555f386c | 73 | help |
5fb94e9c | 74 | See Documentation/trace/ftrace-design.rst |
ee08c6ec | 75 | |
a2546fae SR |
76 | config HAVE_FENTRY |
77 | bool | |
78 | help | |
79 | Arch supports the gcc options -pg with -mfentry | |
80 | ||
2f4df001 VG |
81 | config HAVE_NOP_MCOUNT |
82 | bool | |
83 | help | |
84 | Arch supports the gcc options -pg with -mrecord-mcount and -nop-mcount | |
85 | ||
22c8542d ST |
86 | config HAVE_OBJTOOL_MCOUNT |
87 | bool | |
88 | help | |
89 | Arch supports objtool --mcount | |
90 | ||
280981d6 SV |
91 | config HAVE_OBJTOOL_NOP_MCOUNT |
92 | bool | |
93 | help | |
94 | Arch supports the objtool options --mcount with --mnop. | |
95 | An architecture can select this if it wants to enable nop'ing | |
96 | of ftrace locations. | |
97 | ||
cf4db259 | 98 | config HAVE_C_RECORDMCOUNT |
72441cb1 SR |
99 | bool |
100 | help | |
101 | C version of recordmcount available? | |
102 | ||
4ed308c4 SRG |
103 | config HAVE_BUILDTIME_MCOUNT_SORT |
104 | bool | |
105 | help | |
106 | An architecture selects this if it sorts the mcount_loc section | |
107 | at build time. | |
108 | ||
6b9b6413 SRG |
109 | config BUILDTIME_MCOUNT_SORT |
110 | bool | |
111 | default y | |
4ed308c4 | 112 | depends on HAVE_BUILDTIME_MCOUNT_SORT && DYNAMIC_FTRACE |
6b9b6413 SRG |
113 | help |
114 | Sort the mcount_loc section at build time. | |
115 | ||
352ad25a SR |
116 | config TRACER_MAX_TRACE |
117 | bool | |
118 | ||
ea632e9f JT |
119 | config TRACE_CLOCK |
120 | bool | |
121 | ||
7a8e76a3 SR |
122 | config RING_BUFFER |
123 | bool | |
ea632e9f | 124 | select TRACE_CLOCK |
22287688 | 125 | select IRQ_WORK |
7a8e76a3 | 126 | |
5f77a88b | 127 | config EVENT_TRACING |
b11c53e1 | 128 | select CONTEXT_SWITCH_TRACER |
fc809bc5 | 129 | select GLOB |
b11c53e1 Z |
130 | bool |
131 | ||
132 | config CONTEXT_SWITCH_TRACER | |
5f77a88b TZ |
133 | bool |
134 | ||
85bac32c SR |
135 | config RING_BUFFER_ALLOW_SWAP |
136 | bool | |
137 | help | |
138 | Allow the use of ring_buffer_swap_cpu. | |
139 | Adds a very slight overhead to tracing when enabled. | |
140 | ||
c3bc8fd6 JFG |
141 | config PREEMPTIRQ_TRACEPOINTS |
142 | bool | |
143 | depends on TRACE_PREEMPT_TOGGLE || TRACE_IRQFLAGS | |
144 | select TRACING | |
145 | default y | |
146 | help | |
147 | Create preempt/irq toggle tracepoints if needed, so that other parts | |
148 | of the kernel can use them to generate or add hooks to them. | |
149 | ||
5e0a0939 SR |
150 | # All tracer options should select GENERIC_TRACER. For those options that are |
151 | # enabled by all tracers (context switch and event tracer) they select TRACING. | |
152 | # This allows those options to appear when no other tracer is selected. But the | |
153 | # options do not appear when something else selects it. We need the two options | |
154 | # GENERIC_TRACER and TRACING to avoid circular dependencies to accomplish the | |
40892367 | 155 | # hiding of the automatic options. |
5e0a0939 | 156 | |
bc0c38d1 SR |
157 | config TRACING |
158 | bool | |
7a8e76a3 | 159 | select RING_BUFFER |
c2c80529 | 160 | select STACKTRACE if STACKTRACE_SUPPORT |
5f87f112 | 161 | select TRACEPOINTS |
f3384b28 | 162 | select NOP_TRACER |
769b0441 | 163 | select BINARY_PRINTF |
5f77a88b | 164 | select EVENT_TRACING |
ea632e9f | 165 | select TRACE_CLOCK |
02b3c5fc | 166 | select NEED_TASKS_RCU |
bc0c38d1 | 167 | |
5e0a0939 SR |
168 | config GENERIC_TRACER |
169 | bool | |
170 | select TRACING | |
171 | ||
40ada30f IM |
172 | # |
173 | # Minimum requirements an architecture has to meet for us to | |
174 | # be able to offer generic tracing facilities: | |
175 | # | |
176 | config TRACING_SUPPORT | |
177 | bool | |
0ea5ee03 | 178 | depends on TRACE_IRQFLAGS_SUPPORT |
40ada30f | 179 | depends on STACKTRACE_SUPPORT |
422d3c7a | 180 | default y |
40ada30f | 181 | |
4ed9f071 SR |
182 | menuconfig FTRACE |
183 | bool "Tracers" | |
de32951b | 184 | depends on TRACING_SUPPORT |
65b77242 | 185 | default y if DEBUG_KERNEL |
4ed9f071 | 186 | help |
40892367 | 187 | Enable the kernel tracing infrastructure. |
4ed9f071 SR |
188 | |
189 | if FTRACE | |
17d80fd0 | 190 | |
1e837945 SRV |
191 | config BOOTTIME_TRACING |
192 | bool "Boot-time Tracing support" | |
d8a953dd MH |
193 | depends on TRACING |
194 | select BOOT_CONFIG | |
1e837945 SRV |
195 | help |
196 | Enable developer to setup ftrace subsystem via supplemental | |
197 | kernel cmdline at boot time for debugging (tracing) driver | |
198 | initialization and boot process. | |
199 | ||
606576ce | 200 | config FUNCTION_TRACER |
1b29b018 | 201 | bool "Kernel Function Tracer" |
606576ce | 202 | depends on HAVE_FUNCTION_TRACER |
4d7a077c | 203 | select KALLSYMS |
5e0a0939 | 204 | select GENERIC_TRACER |
35e8e302 | 205 | select CONTEXT_SWITCH_TRACER |
0598e4f0 | 206 | select GLOB |
02b3c5fc | 207 | select NEED_TASKS_RCU |
e5a971d7 | 208 | select TASKS_RUDE_RCU |
1b29b018 SR |
209 | help |
210 | Enable the kernel to trace every kernel function. This is done | |
211 | by using a compiler feature to insert a small, 5-byte No-Operation | |
40892367 | 212 | instruction at the beginning of every kernel function, which NOP |
1b29b018 SR |
213 | sequence is then dynamically patched into a tracer call when |
214 | tracing is enabled by the administrator. If it's runtime disabled | |
215 | (the bootup default), then the overhead of the instructions is very | |
0a6d7d45 SRG |
216 | small and not measurable even in micro-benchmarks (at least on |
217 | x86, but may have impact on other architectures). | |
35e8e302 | 218 | |
fb52607a FW |
219 | config FUNCTION_GRAPH_TRACER |
220 | bool "Kernel Function Graph Tracer" | |
221 | depends on HAVE_FUNCTION_GRAPH_TRACER | |
15e6cb36 | 222 | depends on FUNCTION_TRACER |
eb4a0378 | 223 | depends on !X86_32 || !CC_OPTIMIZE_FOR_SIZE |
764f3b95 | 224 | default y |
15e6cb36 | 225 | help |
fb52607a FW |
226 | Enable the kernel to trace a function at both its return |
227 | and its entry. | |
692105b8 ML |
228 | Its first purpose is to trace the duration of functions and |
229 | draw a call graph for each thread with some information like | |
40892367 | 230 | the return value. This is done by setting the current return |
692105b8 | 231 | address on the current task structure into a stack of calls. |
15e6cb36 | 232 | |
a1be9ccc DP |
233 | config FUNCTION_GRAPH_RETVAL |
234 | bool "Kernel Function Graph Return Value" | |
235 | depends on HAVE_FUNCTION_GRAPH_RETVAL | |
236 | depends on FUNCTION_GRAPH_TRACER | |
237 | default n | |
238 | help | |
239 | Support recording and printing the function return value when | |
240 | using function graph tracer. It can be helpful to locate functions | |
241 | that return errors. This feature is off by default, and you can | |
242 | enable it via the trace option funcgraph-retval. | |
243 | See Documentation/trace/ftrace.rst | |
244 | ||
61778cd7 SRV |
245 | config DYNAMIC_FTRACE |
246 | bool "enable/disable function tracing dynamically" | |
247 | depends on FUNCTION_TRACER | |
248 | depends on HAVE_DYNAMIC_FTRACE | |
249 | default y | |
250 | help | |
251 | This option will modify all the calls to function tracing | |
252 | dynamically (will patch them out of the binary image and | |
253 | replace them with a No-Op instruction) on boot up. During | |
254 | compile time, a table is made of all the locations that ftrace | |
255 | can function trace, and this table is linked into the kernel | |
256 | image. When this is enabled, functions can be individually | |
257 | enabled, and the functions not enabled will not affect | |
258 | performance of the system. | |
259 | ||
2455f0e1 | 260 | See the files in /sys/kernel/tracing: |
61778cd7 SRV |
261 | available_filter_functions |
262 | set_ftrace_filter | |
263 | set_ftrace_notrace | |
264 | ||
265 | This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but | |
266 | otherwise has native performance as long as no tracing is active. | |
267 | ||
268 | config DYNAMIC_FTRACE_WITH_REGS | |
269 | def_bool y | |
270 | depends on DYNAMIC_FTRACE | |
271 | depends on HAVE_DYNAMIC_FTRACE_WITH_REGS | |
272 | ||
273 | config DYNAMIC_FTRACE_WITH_DIRECT_CALLS | |
274 | def_bool y | |
60c89718 | 275 | depends on DYNAMIC_FTRACE_WITH_REGS || DYNAMIC_FTRACE_WITH_ARGS |
61778cd7 SRV |
276 | depends on HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS |
277 | ||
cbad0fb2 MR |
278 | config DYNAMIC_FTRACE_WITH_CALL_OPS |
279 | def_bool y | |
280 | depends on HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS | |
281 | ||
12f9951d LB |
282 | config DYNAMIC_FTRACE_WITH_ARGS |
283 | def_bool y | |
284 | depends on DYNAMIC_FTRACE | |
285 | depends on HAVE_DYNAMIC_FTRACE_WITH_ARGS | |
286 | ||
cad9931f MH |
287 | config FPROBE |
288 | bool "Kernel Function Probe (fprobe)" | |
289 | depends on FUNCTION_TRACER | |
290 | depends on DYNAMIC_FTRACE_WITH_REGS | |
5b0ab789 MH |
291 | depends on HAVE_RETHOOK |
292 | select RETHOOK | |
cad9931f MH |
293 | default n |
294 | help | |
5b0ab789 MH |
295 | This option enables kernel function probe (fprobe) based on ftrace. |
296 | The fprobe is similar to kprobes, but probes only for kernel function | |
297 | entries and exits. This also can probe multiple functions by one | |
298 | fprobe. | |
cad9931f MH |
299 | |
300 | If unsure, say N. | |
301 | ||
61778cd7 SRV |
302 | config FUNCTION_PROFILER |
303 | bool "Kernel function profiler" | |
304 | depends on FUNCTION_TRACER | |
305 | default n | |
306 | help | |
307 | This option enables the kernel function profiler. A file is created | |
308 | in debugfs called function_profile_enabled which defaults to zero. | |
309 | When a 1 is echoed into this file profiling begins, and when a | |
310 | zero is entered, profiling stops. A "functions" file is created in | |
311 | the trace_stat directory; this file shows the list of functions that | |
312 | have been hit and their counters. | |
313 | ||
314 | If in doubt, say N. | |
315 | ||
316 | config STACK_TRACER | |
317 | bool "Trace max stack" | |
318 | depends on HAVE_FUNCTION_TRACER | |
319 | select FUNCTION_TRACER | |
320 | select STACKTRACE | |
321 | select KALLSYMS | |
322 | help | |
323 | This special tracer records the maximum stack footprint of the | |
2455f0e1 | 324 | kernel and displays it in /sys/kernel/tracing/stack_trace. |
61778cd7 SRV |
325 | |
326 | This tracer works by hooking into every function call that the | |
327 | kernel executes, and keeping a maximum stack depth value and | |
328 | stack-trace saved. If this is configured with DYNAMIC_FTRACE | |
329 | then it will not have any overhead while the stack tracer | |
330 | is disabled. | |
331 | ||
332 | To enable the stack tracer on bootup, pass in 'stacktrace' | |
333 | on the kernel command line. | |
334 | ||
335 | The stack tracer can also be enabled or disabled via the | |
336 | sysctl kernel.stack_tracer_enabled | |
337 | ||
338 | Say N if unsure. | |
339 | ||
c3bc8fd6 JFG |
340 | config TRACE_PREEMPT_TOGGLE |
341 | bool | |
342 | help | |
343 | Enables hooks which will be called when preemption is first disabled, | |
344 | and last enabled. | |
bac429f0 | 345 | |
81d68a96 SR |
346 | config IRQSOFF_TRACER |
347 | bool "Interrupts-off Latency Tracer" | |
348 | default n | |
349 | depends on TRACE_IRQFLAGS_SUPPORT | |
81d68a96 | 350 | select TRACE_IRQFLAGS |
5e0a0939 | 351 | select GENERIC_TRACER |
81d68a96 | 352 | select TRACER_MAX_TRACE |
85bac32c | 353 | select RING_BUFFER_ALLOW_SWAP |
22cffc2b | 354 | select TRACER_SNAPSHOT |
0b85ffc2 | 355 | select TRACER_SNAPSHOT_PER_CPU_SWAP |
81d68a96 SR |
356 | help |
357 | This option measures the time spent in irqs-off critical | |
358 | sections, with microsecond accuracy. | |
359 | ||
360 | The default measurement method is a maximum search, which is | |
361 | disabled by default and can be runtime (re-)started | |
362 | via: | |
363 | ||
2455f0e1 | 364 | echo 0 > /sys/kernel/tracing/tracing_max_latency |
81d68a96 | 365 | |
40892367 | 366 | (Note that kernel size and overhead increase with this option |
6cd8a4bb SR |
367 | enabled. This option and the preempt-off timing option can be |
368 | used together or separately.) | |
369 | ||
370 | config PREEMPT_TRACER | |
371 | bool "Preemption-off Latency Tracer" | |
372 | default n | |
30c93704 | 373 | depends on PREEMPTION |
5e0a0939 | 374 | select GENERIC_TRACER |
6cd8a4bb | 375 | select TRACER_MAX_TRACE |
85bac32c | 376 | select RING_BUFFER_ALLOW_SWAP |
22cffc2b | 377 | select TRACER_SNAPSHOT |
0b85ffc2 | 378 | select TRACER_SNAPSHOT_PER_CPU_SWAP |
c3bc8fd6 | 379 | select TRACE_PREEMPT_TOGGLE |
6cd8a4bb | 380 | help |
40892367 | 381 | This option measures the time spent in preemption-off critical |
6cd8a4bb SR |
382 | sections, with microsecond accuracy. |
383 | ||
384 | The default measurement method is a maximum search, which is | |
385 | disabled by default and can be runtime (re-)started | |
386 | via: | |
387 | ||
2455f0e1 | 388 | echo 0 > /sys/kernel/tracing/tracing_max_latency |
6cd8a4bb | 389 | |
40892367 | 390 | (Note that kernel size and overhead increase with this option |
6cd8a4bb SR |
391 | enabled. This option and the irqs-off timing option can be |
392 | used together or separately.) | |
393 | ||
352ad25a SR |
394 | config SCHED_TRACER |
395 | bool "Scheduling Latency Tracer" | |
5e0a0939 | 396 | select GENERIC_TRACER |
352ad25a SR |
397 | select CONTEXT_SWITCH_TRACER |
398 | select TRACER_MAX_TRACE | |
22cffc2b | 399 | select TRACER_SNAPSHOT |
352ad25a SR |
400 | help |
401 | This tracer tracks the latency of the highest priority task | |
402 | to be scheduled in, starting from the point it has woken up. | |
403 | ||
e7c15cd8 SRRH |
404 | config HWLAT_TRACER |
405 | bool "Tracer to detect hardware latencies (like SMIs)" | |
406 | select GENERIC_TRACER | |
e25e43a4 | 407 | select TRACER_MAX_TRACE |
e7c15cd8 SRRH |
408 | help |
409 | This tracer, when enabled will create one or more kernel threads, | |
c5c1ea75 | 410 | depending on what the cpumask file is set to, which each thread |
e7c15cd8 SRRH |
411 | spinning in a loop looking for interruptions caused by |
412 | something other than the kernel. For example, if a | |
413 | System Management Interrupt (SMI) takes a noticeable amount of | |
414 | time, this tracer will detect it. This is useful for testing | |
415 | if a system is reliable for Real Time tasks. | |
416 | ||
417 | Some files are created in the tracing directory when this | |
418 | is enabled: | |
419 | ||
420 | hwlat_detector/width - time in usecs for how long to spin for | |
421 | hwlat_detector/window - time in usecs between the start of each | |
422 | iteration | |
423 | ||
424 | A kernel thread is created that will spin with interrupts disabled | |
c5c1ea75 | 425 | for "width" microseconds in every "window" cycle. It will not spin |
e7c15cd8 SRRH |
426 | for "window - width" microseconds, where the system can |
427 | continue to operate. | |
428 | ||
429 | The output will appear in the trace and trace_pipe files. | |
430 | ||
431 | When the tracer is not running, it has no affect on the system, | |
432 | but when it is running, it can cause the system to be | |
433 | periodically non responsive. Do not run this tracer on a | |
434 | production system. | |
435 | ||
436 | To enable this tracer, echo in "hwlat" into the current_tracer | |
437 | file. Every time a latency is greater than tracing_thresh, it will | |
438 | be recorded into the ring buffer. | |
439 | ||
bce29ac9 DBO |
440 | config OSNOISE_TRACER |
441 | bool "OS Noise tracer" | |
442 | select GENERIC_TRACER | |
e25e43a4 | 443 | select TRACER_MAX_TRACE |
bce29ac9 DBO |
444 | help |
445 | In the context of high-performance computing (HPC), the Operating | |
446 | System Noise (osnoise) refers to the interference experienced by an | |
447 | application due to activities inside the operating system. In the | |
448 | context of Linux, NMIs, IRQs, SoftIRQs, and any other system thread | |
449 | can cause noise to the system. Moreover, hardware-related jobs can | |
450 | also cause noise, for example, via SMIs. | |
451 | ||
452 | The osnoise tracer leverages the hwlat_detector by running a similar | |
453 | loop with preemption, SoftIRQs and IRQs enabled, thus allowing all | |
454 | the sources of osnoise during its execution. The osnoise tracer takes | |
455 | note of the entry and exit point of any source of interferences, | |
456 | increasing a per-cpu interference counter. It saves an interference | |
457 | counter for each source of interference. The interference counter for | |
458 | NMI, IRQs, SoftIRQs, and threads is increased anytime the tool | |
459 | observes these interferences' entry events. When a noise happens | |
460 | without any interference from the operating system level, the | |
461 | hardware noise counter increases, pointing to a hardware-related | |
462 | noise. In this way, osnoise can account for any source of | |
463 | interference. At the end of the period, the osnoise tracer prints | |
464 | the sum of all noise, the max single noise, the percentage of CPU | |
465 | available for the thread, and the counters for the noise sources. | |
466 | ||
467 | In addition to the tracer, a set of tracepoints were added to | |
468 | facilitate the identification of the osnoise source. | |
469 | ||
470 | The output will appear in the trace and trace_pipe files. | |
471 | ||
472 | To enable this tracer, echo in "osnoise" into the current_tracer | |
473 | file. | |
474 | ||
a955d7ea DBO |
475 | config TIMERLAT_TRACER |
476 | bool "Timerlat tracer" | |
477 | select OSNOISE_TRACER | |
478 | select GENERIC_TRACER | |
479 | help | |
480 | The timerlat tracer aims to help the preemptive kernel developers | |
481 | to find sources of wakeup latencies of real-time threads. | |
482 | ||
483 | The tracer creates a per-cpu kernel thread with real-time priority. | |
484 | The tracer thread sets a periodic timer to wakeup itself, and goes | |
485 | to sleep waiting for the timer to fire. At the wakeup, the thread | |
486 | then computes a wakeup latency value as the difference between | |
487 | the current time and the absolute time that the timer was set | |
488 | to expire. | |
489 | ||
490 | The tracer prints two lines at every activation. The first is the | |
491 | timer latency observed at the hardirq context before the | |
492 | activation of the thread. The second is the timer latency observed | |
493 | by the thread, which is the same level that cyclictest reports. The | |
494 | ACTIVATION ID field serves to relate the irq execution to its | |
495 | respective thread execution. | |
496 | ||
497 | The tracer is build on top of osnoise tracer, and the osnoise: | |
498 | events can be used to trace the source of interference from NMI, | |
499 | IRQs and other threads. It also enables the capture of the | |
500 | stacktrace at the IRQ context, which helps to identify the code | |
501 | path that can cause thread delay. | |
502 | ||
21b3ce30 SRV |
503 | config MMIOTRACE |
504 | bool "Memory mapped IO tracing" | |
505 | depends on HAVE_MMIOTRACE_SUPPORT && PCI | |
506 | select GENERIC_TRACER | |
507 | help | |
508 | Mmiotrace traces Memory Mapped I/O access and is meant for | |
509 | debugging and reverse engineering. It is called from the ioremap | |
510 | implementation and works via page faults. Tracing is disabled by | |
511 | default and can be enabled at run-time. | |
512 | ||
513 | See Documentation/trace/mmiotrace.rst. | |
514 | If you are not helping to develop drivers, say N. | |
515 | ||
897f17a6 SR |
516 | config ENABLE_DEFAULT_TRACERS |
517 | bool "Trace process context switches and events" | |
5e0a0939 | 518 | depends on !GENERIC_TRACER |
b77e38aa SR |
519 | select TRACING |
520 | help | |
40892367 | 521 | This tracer hooks to various trace points in the kernel, |
b77e38aa | 522 | allowing the user to pick and choose which trace point they |
897f17a6 | 523 | want to trace. It also includes the sched_switch tracer plugin. |
a7abe97f | 524 | |
ee08c6ec FW |
525 | config FTRACE_SYSCALLS |
526 | bool "Trace syscalls" | |
66700001 | 527 | depends on HAVE_SYSCALL_TRACEPOINTS |
5e0a0939 | 528 | select GENERIC_TRACER |
0ea1c415 | 529 | select KALLSYMS |
ee08c6ec FW |
530 | help |
531 | Basic tracer to catch the syscall entry and exit events. | |
532 | ||
debdd57f HT |
533 | config TRACER_SNAPSHOT |
534 | bool "Create a snapshot trace buffer" | |
535 | select TRACER_MAX_TRACE | |
536 | help | |
537 | Allow tracing users to take snapshot of the current buffer using the | |
538 | ftrace interface, e.g.: | |
539 | ||
2455f0e1 | 540 | echo 1 > /sys/kernel/tracing/snapshot |
debdd57f HT |
541 | cat snapshot |
542 | ||
0b85ffc2 | 543 | config TRACER_SNAPSHOT_PER_CPU_SWAP |
fc809bc5 | 544 | bool "Allow snapshot to swap per CPU" |
0b85ffc2 SRRH |
545 | depends on TRACER_SNAPSHOT |
546 | select RING_BUFFER_ALLOW_SWAP | |
547 | help | |
548 | Allow doing a snapshot of a single CPU buffer instead of a | |
549 | full swap (all buffers). If this is set, then the following is | |
550 | allowed: | |
551 | ||
2455f0e1 | 552 | echo 1 > /sys/kernel/tracing/per_cpu/cpu2/snapshot |
0b85ffc2 SRRH |
553 | |
554 | After which, only the tracing buffer for CPU 2 was swapped with | |
555 | the main tracing buffer, and the other CPU buffers remain the same. | |
556 | ||
557 | When this is enabled, this adds a little more overhead to the | |
558 | trace recording, as it needs to add some checks to synchronize | |
559 | recording with swaps. But this does not affect the performance | |
560 | of the overall system. This is enabled by default when the preempt | |
561 | or irq latency tracers are enabled, as those need to swap as well | |
562 | and already adds the overhead (plus a lot more). | |
563 | ||
2ed84eeb | 564 | config TRACE_BRANCH_PROFILING |
9ae5b879 | 565 | bool |
5e0a0939 | 566 | select GENERIC_TRACER |
9ae5b879 SR |
567 | |
568 | choice | |
569 | prompt "Branch Profiling" | |
570 | default BRANCH_PROFILE_NONE | |
571 | help | |
572 | The branch profiling is a software profiler. It will add hooks | |
573 | into the C conditionals to test which path a branch takes. | |
574 | ||
575 | The likely/unlikely profiler only looks at the conditions that | |
576 | are annotated with a likely or unlikely macro. | |
577 | ||
40892367 | 578 | The "all branch" profiler will profile every if-statement in the |
9ae5b879 | 579 | kernel. This profiler will also enable the likely/unlikely |
40892367 | 580 | profiler. |
9ae5b879 | 581 | |
40892367 RD |
582 | Either of the above profilers adds a bit of overhead to the system. |
583 | If unsure, choose "No branch profiling". | |
9ae5b879 SR |
584 | |
585 | config BRANCH_PROFILE_NONE | |
586 | bool "No branch profiling" | |
587 | help | |
40892367 RD |
588 | No branch profiling. Branch profiling adds a bit of overhead. |
589 | Only enable it if you want to analyse the branching behavior. | |
590 | Otherwise keep it disabled. | |
9ae5b879 SR |
591 | |
592 | config PROFILE_ANNOTATED_BRANCHES | |
593 | bool "Trace likely/unlikely profiler" | |
594 | select TRACE_BRANCH_PROFILING | |
1f0d69a9 | 595 | help |
59bf8964 | 596 | This tracer profiles all likely and unlikely macros |
1f0d69a9 SR |
597 | in the kernel. It will display the results in: |
598 | ||
2455f0e1 | 599 | /sys/kernel/tracing/trace_stat/branch_annotated |
1f0d69a9 | 600 | |
40892367 | 601 | Note: this will add a significant overhead; only turn this |
1f0d69a9 SR |
602 | on if you need to profile the system's use of these macros. |
603 | ||
2bcd521a | 604 | config PROFILE_ALL_BRANCHES |
68e76e03 | 605 | bool "Profile all if conditionals" if !FORTIFY_SOURCE |
9ae5b879 | 606 | select TRACE_BRANCH_PROFILING |
2bcd521a SR |
607 | help |
608 | This tracer profiles all branch conditions. Every if () | |
609 | taken in the kernel is recorded whether it hit or miss. | |
610 | The results will be displayed in: | |
611 | ||
2455f0e1 | 612 | /sys/kernel/tracing/trace_stat/branch_all |
2bcd521a | 613 | |
9ae5b879 SR |
614 | This option also enables the likely/unlikely profiler. |
615 | ||
2bcd521a SR |
616 | This configuration, when enabled, will impose a great overhead |
617 | on the system. This should only be enabled when the system | |
40892367 | 618 | is to be analyzed in much detail. |
9ae5b879 | 619 | endchoice |
2bcd521a | 620 | |
2ed84eeb | 621 | config TRACING_BRANCHES |
52f232cb SR |
622 | bool |
623 | help | |
624 | Selected by tracers that will trace the likely and unlikely | |
625 | conditions. This prevents the tracers themselves from being | |
626 | profiled. Profiling the tracing infrastructure can only happen | |
627 | when the likelys and unlikelys are not being traced. | |
628 | ||
2ed84eeb | 629 | config BRANCH_TRACER |
52f232cb | 630 | bool "Trace likely/unlikely instances" |
2ed84eeb SR |
631 | depends on TRACE_BRANCH_PROFILING |
632 | select TRACING_BRANCHES | |
52f232cb SR |
633 | help |
634 | This traces the events of likely and unlikely condition | |
635 | calls in the kernel. The difference between this and the | |
636 | "Trace likely/unlikely profiler" is that this is not a | |
637 | histogram of the callers, but actually places the calling | |
638 | events into a running trace buffer to see when and where the | |
639 | events happened, as well as their results. | |
640 | ||
641 | Say N if unsure. | |
642 | ||
2db270a8 | 643 | config BLK_DEV_IO_TRACE |
40892367 | 644 | bool "Support for tracing block IO actions" |
2db270a8 | 645 | depends on SYSFS |
1dfba05d | 646 | depends on BLOCK |
2db270a8 FW |
647 | select RELAY |
648 | select DEBUG_FS | |
649 | select TRACEPOINTS | |
5e0a0939 | 650 | select GENERIC_TRACER |
2db270a8 FW |
651 | select STACKTRACE |
652 | help | |
653 | Say Y here if you want to be able to trace the block layer actions | |
654 | on a given queue. Tracing allows you to see any traffic happening | |
655 | on a block device queue. For more information (and the userspace | |
656 | support tools needed), fetch the blktrace tools from: | |
657 | ||
658 | git://git.kernel.dk/blktrace.git | |
659 | ||
660 | Tracing also is possible using the ftrace interface, e.g.: | |
661 | ||
662 | echo 1 > /sys/block/sda/sda1/trace/enable | |
2455f0e1 RZ |
663 | echo blk > /sys/kernel/tracing/current_tracer |
664 | cat /sys/kernel/tracing/trace_pipe | |
2db270a8 FW |
665 | |
666 | If unsure, say N. | |
36994e58 | 667 | |
334e5519 MHG |
668 | config FPROBE_EVENTS |
669 | depends on FPROBE | |
670 | depends on HAVE_REGS_AND_STACK_ACCESS_API | |
671 | bool "Enable fprobe-based dynamic events" | |
672 | select TRACING | |
673 | select PROBE_EVENTS | |
674 | select DYNAMIC_EVENTS | |
675 | default y | |
676 | help | |
677 | This allows user to add tracing events on the function entry and | |
678 | exit via ftrace interface. The syntax is same as the kprobe events | |
679 | and the kprobe events on function entry and exit will be | |
680 | transparently converted to this fprobe events. | |
681 | ||
b576e097 MHG |
682 | config PROBE_EVENTS_BTF_ARGS |
683 | depends on HAVE_FUNCTION_ARG_ACCESS_API | |
684 | depends on FPROBE_EVENTS || KPROBE_EVENTS | |
685 | depends on DEBUG_INFO_BTF && BPF_SYSCALL | |
686 | bool "Support BTF function arguments for probe events" | |
687 | default y | |
688 | help | |
689 | The user can specify the arguments of the probe event using the names | |
690 | of the arguments of the probed function, when the probe location is a | |
691 | kernel function entry or a tracepoint. | |
692 | This is available only if BTF (BPF Type Format) support is enabled. | |
693 | ||
6b0b7551 | 694 | config KPROBE_EVENTS |
413d37d1 | 695 | depends on KPROBES |
f850c30c | 696 | depends on HAVE_REGS_AND_STACK_ACCESS_API |
77b44d1b | 697 | bool "Enable kprobes-based dynamic events" |
413d37d1 | 698 | select TRACING |
8ab83f56 | 699 | select PROBE_EVENTS |
6212dd29 | 700 | select DYNAMIC_EVENTS |
77b44d1b | 701 | default y |
413d37d1 | 702 | help |
40892367 RD |
703 | This allows the user to add tracing events (similar to tracepoints) |
704 | on the fly via the ftrace interface. See | |
5fb94e9c | 705 | Documentation/trace/kprobetrace.rst for more details. |
77b44d1b MH |
706 | |
707 | Those events can be inserted wherever kprobes can probe, and record | |
708 | various register and memory values. | |
709 | ||
40892367 RD |
710 | This option is also required by perf-probe subcommand of perf tools. |
711 | If you want to use perf tools, this option is strongly recommended. | |
413d37d1 | 712 | |
45408c4f MH |
713 | config KPROBE_EVENTS_ON_NOTRACE |
714 | bool "Do NOT protect notrace function from kprobe events" | |
715 | depends on KPROBE_EVENTS | |
7bb83f6f | 716 | depends on DYNAMIC_FTRACE |
45408c4f MH |
717 | default n |
718 | help | |
719 | This is only for the developers who want to debug ftrace itself | |
720 | using kprobe events. | |
721 | ||
722 | If kprobes can use ftrace instead of breakpoint, ftrace related | |
28cc65a1 | 723 | functions are protected from kprobe-events to prevent an infinite |
45408c4f MH |
724 | recursion or any unexpected execution path which leads to a kernel |
725 | crash. | |
726 | ||
727 | This option disables such protection and allows you to put kprobe | |
728 | events on ftrace functions for debugging ftrace by itself. | |
729 | Note that this might let you shoot yourself in the foot. | |
730 | ||
731 | If unsure, say N. | |
732 | ||
6b0b7551 | 733 | config UPROBE_EVENTS |
f3f096cf SD |
734 | bool "Enable uprobes-based dynamic events" |
735 | depends on ARCH_SUPPORTS_UPROBES | |
736 | depends on MMU | |
09294e31 | 737 | depends on PERF_EVENTS |
f3f096cf SD |
738 | select UPROBES |
739 | select PROBE_EVENTS | |
0597c49c | 740 | select DYNAMIC_EVENTS |
f3f096cf | 741 | select TRACING |
61f35d75 | 742 | default y |
f3f096cf SD |
743 | help |
744 | This allows the user to add tracing events on top of userspace | |
745 | dynamic events (similar to tracepoints) on the fly via the trace | |
746 | events interface. Those events can be inserted wherever uprobes | |
747 | can probe, and record various registers. | |
748 | This option is required if you plan to use perf-probe subcommand | |
749 | of perf tools on user space applications. | |
750 | ||
e1abf2cc IM |
751 | config BPF_EVENTS |
752 | depends on BPF_SYSCALL | |
6b0b7551 | 753 | depends on (KPROBE_EVENTS || UPROBE_EVENTS) && PERF_EVENTS |
e1abf2cc IM |
754 | bool |
755 | default y | |
756 | help | |
5cbd22c1 PW |
757 | This allows the user to attach BPF programs to kprobe, uprobe, and |
758 | tracepoint events. | |
e1abf2cc | 759 | |
5448d44c MH |
760 | config DYNAMIC_EVENTS |
761 | def_bool n | |
762 | ||
8ab83f56 SD |
763 | config PROBE_EVENTS |
764 | def_bool n | |
765 | ||
9802d865 JB |
766 | config BPF_KPROBE_OVERRIDE |
767 | bool "Enable BPF programs to override a kprobed function" | |
768 | depends on BPF_EVENTS | |
540adea3 | 769 | depends on FUNCTION_ERROR_INJECTION |
9802d865 JB |
770 | default n |
771 | help | |
772 | Allows BPF to override the execution of a probed function and | |
773 | set a different return value. This is used for error injection. | |
774 | ||
8da3821b SR |
775 | config FTRACE_MCOUNT_RECORD |
776 | def_bool y | |
777 | depends on DYNAMIC_FTRACE | |
778 | depends on HAVE_FTRACE_MCOUNT_RECORD | |
779 | ||
3b15cdc1 ST |
780 | config FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY |
781 | bool | |
782 | depends on FTRACE_MCOUNT_RECORD | |
783 | ||
784 | config FTRACE_MCOUNT_USE_CC | |
785 | def_bool y | |
786 | depends on $(cc-option,-mrecord-mcount) | |
787 | depends on !FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY | |
788 | depends on FTRACE_MCOUNT_RECORD | |
789 | ||
22c8542d ST |
790 | config FTRACE_MCOUNT_USE_OBJTOOL |
791 | def_bool y | |
792 | depends on HAVE_OBJTOOL_MCOUNT | |
793 | depends on !FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY | |
794 | depends on !FTRACE_MCOUNT_USE_CC | |
795 | depends on FTRACE_MCOUNT_RECORD | |
03f16cd0 | 796 | select OBJTOOL |
22c8542d | 797 | |
3b15cdc1 ST |
798 | config FTRACE_MCOUNT_USE_RECORDMCOUNT |
799 | def_bool y | |
800 | depends on !FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY | |
801 | depends on !FTRACE_MCOUNT_USE_CC | |
22c8542d | 802 | depends on !FTRACE_MCOUNT_USE_OBJTOOL |
3b15cdc1 ST |
803 | depends on FTRACE_MCOUNT_RECORD |
804 | ||
08d43a5f TZ |
805 | config TRACING_MAP |
806 | bool | |
807 | depends on ARCH_HAVE_NMI_SAFE_CMPXCHG | |
08d43a5f TZ |
808 | help |
809 | tracing_map is a special-purpose lock-free map for tracing, | |
810 | separated out as a stand-alone facility in order to allow it | |
811 | to be shared between multiple tracers. It isn't meant to be | |
812 | generally used outside of that context, and is normally | |
813 | selected by tracers that use it. | |
814 | ||
726721a5 TZ |
815 | config SYNTH_EVENTS |
816 | bool "Synthetic trace events" | |
817 | select TRACING | |
818 | select DYNAMIC_EVENTS | |
819 | default n | |
820 | help | |
821 | Synthetic events are user-defined trace events that can be | |
822 | used to combine data from other trace events or in fact any | |
823 | data source. Synthetic events can be generated indirectly | |
824 | via the trace() action of histogram triggers or directly | |
825 | by way of an in-kernel API. | |
826 | ||
827 | See Documentation/trace/events.rst or | |
828 | Documentation/trace/histogram.rst for details and examples. | |
829 | ||
830 | If in doubt, say N. | |
831 | ||
7f5a08c7 BB |
832 | config USER_EVENTS |
833 | bool "User trace events" | |
834 | select TRACING | |
835 | select DYNAMIC_EVENTS | |
836 | help | |
837 | User trace events are user-defined trace events that | |
838 | can be used like an existing kernel trace event. User trace | |
839 | events are generated by writing to a tracefs file. User | |
840 | processes can determine if their tracing events should be | |
72357590 BB |
841 | generated by registering a value and bit with the kernel |
842 | that reflects when it is enabled or not. | |
7f5a08c7 | 843 | |
72357590 | 844 | See Documentation/trace/user_events.rst. |
7f5a08c7 BB |
845 | If in doubt, say N. |
846 | ||
7ef224d1 TZ |
847 | config HIST_TRIGGERS |
848 | bool "Histogram triggers" | |
849 | depends on ARCH_HAVE_NMI_SAFE_CMPXCHG | |
850 | select TRACING_MAP | |
7ad8fb61 | 851 | select TRACING |
7bbab38d | 852 | select DYNAMIC_EVENTS |
726721a5 | 853 | select SYNTH_EVENTS |
7ef224d1 TZ |
854 | default n |
855 | help | |
856 | Hist triggers allow one or more arbitrary trace event fields | |
857 | to be aggregated into hash tables and dumped to stdout by | |
858 | reading a debugfs/tracefs file. They're useful for | |
859 | gathering quick and dirty (though precise) summaries of | |
860 | event activity as an initial guide for further investigation | |
861 | using more advanced tools. | |
862 | ||
89e270c1 TZ |
863 | Inter-event tracing of quantities such as latencies is also |
864 | supported using hist triggers under this option. | |
865 | ||
ea272257 | 866 | See Documentation/trace/histogram.rst. |
7ef224d1 TZ |
867 | If in doubt, say N. |
868 | ||
6c3edaf9 CW |
869 | config TRACE_EVENT_INJECT |
870 | bool "Trace event injection" | |
871 | depends on TRACING | |
872 | help | |
873 | Allow user-space to inject a specific trace event into the ring | |
874 | buffer. This is mainly used for testing purpose. | |
875 | ||
876 | If unsure, say N. | |
877 | ||
81dc9f0e | 878 | config TRACEPOINT_BENCHMARK |
fc809bc5 | 879 | bool "Add tracepoint that benchmarks tracepoints" |
81dc9f0e SRRH |
880 | help |
881 | This option creates the tracepoint "benchmark:benchmark_event". | |
882 | When the tracepoint is enabled, it kicks off a kernel thread that | |
69268094 | 883 | goes into an infinite loop (calling cond_resched() to let other tasks |
81dc9f0e SRRH |
884 | run), and calls the tracepoint. Each iteration will record the time |
885 | it took to write to the tracepoint and the next iteration that | |
886 | data will be passed to the tracepoint itself. That is, the tracepoint | |
887 | will report the time it took to do the previous tracepoint. | |
888 | The string written to the tracepoint is a static string of 128 bytes | |
889 | to keep the time the same. The initial string is simply a write of | |
890 | "START". The second string records the cold cache time of the first | |
891 | write which is not added to the rest of the calculations. | |
892 | ||
893 | As it is a tight loop, it benchmarks as hot cache. That's fine because | |
894 | we care most about hot paths that are probably in cache already. | |
895 | ||
896 | An example of the output: | |
897 | ||
898 | START | |
899 | first=3672 [COLD CACHED] | |
900 | last=632 first=3672 max=632 min=632 avg=316 std=446 std^2=199712 | |
901 | last=278 first=3672 max=632 min=278 avg=303 std=316 std^2=100337 | |
902 | last=277 first=3672 max=632 min=277 avg=296 std=258 std^2=67064 | |
903 | last=273 first=3672 max=632 min=273 avg=292 std=224 std^2=50411 | |
904 | last=273 first=3672 max=632 min=273 avg=288 std=200 std^2=40389 | |
905 | last=281 first=3672 max=632 min=273 avg=287 std=183 std^2=33666 | |
906 | ||
907 | ||
5092dbc9 SR |
908 | config RING_BUFFER_BENCHMARK |
909 | tristate "Ring buffer benchmark stress tester" | |
910 | depends on RING_BUFFER | |
911 | help | |
40892367 RD |
912 | This option creates a test to stress the ring buffer and benchmark it. |
913 | It creates its own ring buffer such that it will not interfere with | |
5092dbc9 SR |
914 | any other users of the ring buffer (such as ftrace). It then creates |
915 | a producer and consumer that will run for 10 seconds and sleep for | |
916 | 10 seconds. Each interval it will print out the number of events | |
917 | it recorded and give a rough estimate of how long each iteration took. | |
918 | ||
919 | It does not disable interrupts or raise its priority, so it may be | |
920 | affected by processes that are running. | |
921 | ||
40892367 | 922 | If unsure, say N. |
5092dbc9 | 923 | |
1e837945 SRV |
924 | config TRACE_EVAL_MAP_FILE |
925 | bool "Show eval mappings for trace events" | |
926 | depends on TRACING | |
927 | help | |
928 | The "print fmt" of the trace events will show the enum/sizeof names | |
929 | instead of their values. This can cause problems for user space tools | |
930 | that use this string to parse the raw data as user space does not know | |
931 | how to convert the string to its value. | |
932 | ||
933 | To fix this, there's a special macro in the kernel that can be used | |
934 | to convert an enum/sizeof into its value. If this macro is used, then | |
935 | the print fmt strings will be converted to their values. | |
936 | ||
937 | If something does not get converted properly, this option can be | |
938 | used to show what enums/sizeof the kernel tried to convert. | |
939 | ||
940 | This option is for debugging the conversions. A file is created | |
941 | in the tracing directory called "eval_map" that will show the | |
942 | names matched with their values and what trace event system they | |
943 | belong too. | |
944 | ||
945 | Normally, the mapping of the strings to values will be freed after | |
946 | boot up or module load. With this option, they will not be freed, as | |
947 | they are needed for the "eval_map" file. Enabling this option will | |
948 | increase the memory footprint of the running kernel. | |
949 | ||
950 | If unsure, say N. | |
951 | ||
773c1670 SRV |
952 | config FTRACE_RECORD_RECURSION |
953 | bool "Record functions that recurse in function tracing" | |
954 | depends on FUNCTION_TRACER | |
955 | help | |
956 | All callbacks that attach to the function tracing have some sort | |
957 | of protection against recursion. Even though the protection exists, | |
958 | it adds overhead. This option will create a file in the tracefs | |
959 | file system called "recursed_functions" that will list the functions | |
960 | that triggered a recursion. | |
961 | ||
962 | This will add more overhead to cases that have recursion. | |
963 | ||
964 | If unsure, say N | |
965 | ||
966 | config FTRACE_RECORD_RECURSION_SIZE | |
967 | int "Max number of recursed functions to record" | |
d96c3600 | 968 | default 128 |
773c1670 SRV |
969 | depends on FTRACE_RECORD_RECURSION |
970 | help | |
971 | This defines the limit of number of functions that can be | |
972 | listed in the "recursed_functions" file, that lists all | |
973 | the functions that caused a recursion to happen. | |
974 | This file can be reset, but the limit can not change in | |
975 | size at runtime. | |
976 | ||
b0e28a4b AN |
977 | config FTRACE_VALIDATE_RCU_IS_WATCHING |
978 | bool "Validate RCU is on during ftrace execution" | |
979 | depends on FUNCTION_TRACER | |
980 | depends on ARCH_WANTS_NO_INSTR | |
981 | help | |
982 | All callbacks that attach to the function tracing have some sort of | |
983 | protection against recursion. This option is only to verify that | |
984 | ftrace (and other users of ftrace_test_recursion_trylock()) are not | |
985 | called outside of RCU, as if they are, it can cause a race. But it | |
986 | also has a noticeable overhead when enabled. | |
987 | ||
988 | If unsure, say N | |
989 | ||
28575c61 SRV |
990 | config RING_BUFFER_RECORD_RECURSION |
991 | bool "Record functions that recurse in the ring buffer" | |
992 | depends on FTRACE_RECORD_RECURSION | |
993 | # default y, because it is coupled with FTRACE_RECORD_RECURSION | |
994 | default y | |
995 | help | |
996 | The ring buffer has its own internal recursion. Although when | |
ac28d0a0 RD |
997 | recursion happens it won't cause harm because of the protection, |
998 | but it does cause unwanted overhead. Enabling this option will | |
28575c61 SRV |
999 | place where recursion was detected into the ftrace "recursed_functions" |
1000 | file. | |
1001 | ||
1002 | This will add more overhead to cases that have recursion. | |
1003 | ||
1e837945 SRV |
1004 | config GCOV_PROFILE_FTRACE |
1005 | bool "Enable GCOV profiling on ftrace subsystem" | |
1006 | depends on GCOV_KERNEL | |
1007 | help | |
1008 | Enable GCOV profiling on ftrace subsystem for checking | |
1009 | which functions/lines are tested. | |
1010 | ||
1011 | If unsure, say N. | |
1012 | ||
1013 | Note that on a kernel compiled with this config, ftrace will | |
1014 | run significantly slower. | |
1015 | ||
1016 | config FTRACE_SELFTEST | |
1017 | bool | |
1018 | ||
1019 | config FTRACE_STARTUP_TEST | |
1020 | bool "Perform a startup test on ftrace" | |
1021 | depends on GENERIC_TRACER | |
1022 | select FTRACE_SELFTEST | |
1023 | help | |
1024 | This option performs a series of startup tests on ftrace. On bootup | |
1025 | a series of tests are made to verify that the tracer is | |
1026 | functioning properly. It will do tests on all the configured | |
1027 | tracers of ftrace. | |
1028 | ||
1029 | config EVENT_TRACE_STARTUP_TEST | |
1030 | bool "Run selftest on trace events" | |
1031 | depends on FTRACE_STARTUP_TEST | |
1032 | default y | |
1033 | help | |
1034 | This option performs a test on all trace events in the system. | |
1035 | It basically just enables each event and runs some code that | |
1036 | will trigger events (not necessarily the event it enables) | |
1037 | This may take some time run as there are a lot of events. | |
1038 | ||
1039 | config EVENT_TRACE_TEST_SYSCALLS | |
1040 | bool "Run selftest on syscall events" | |
1041 | depends on EVENT_TRACE_STARTUP_TEST | |
1042 | help | |
1043 | This option will also enable testing every syscall event. | |
1044 | It only enables the event and disables it and runs various loads | |
1045 | with the event enabled. This adds a bit more time for kernel boot | |
1046 | up since it runs this on every system call defined. | |
1047 | ||
1048 | TBD - enable a way to actually call the syscalls as we test their | |
1049 | events | |
1050 | ||
8147dc78 SRV |
1051 | config FTRACE_SORT_STARTUP_TEST |
1052 | bool "Verify compile time sorting of ftrace functions" | |
1053 | depends on DYNAMIC_FTRACE | |
6b9b6413 | 1054 | depends on BUILDTIME_MCOUNT_SORT |
8147dc78 SRV |
1055 | help |
1056 | Sorting of the mcount_loc sections that is used to find the | |
1057 | where the ftrace knows where to patch functions for tracing | |
1058 | and other callbacks is done at compile time. But if the sort | |
1059 | is not done correctly, it will cause non-deterministic failures. | |
1060 | When this is set, the sorted sections will be verified that they | |
1061 | are in deed sorted and will warn if they are not. | |
1062 | ||
1063 | If unsure, say N | |
1064 | ||
6c43e554 SRRH |
1065 | config RING_BUFFER_STARTUP_TEST |
1066 | bool "Ring buffer startup self test" | |
1067 | depends on RING_BUFFER | |
1068 | help | |
fc809bc5 | 1069 | Run a simple self test on the ring buffer on boot up. Late in the |
6c43e554 SRRH |
1070 | kernel boot sequence, the test will start that kicks off |
1071 | a thread per cpu. Each thread will write various size events | |
1072 | into the ring buffer. Another thread is created to send IPIs | |
1073 | to each of the threads, where the IPI handler will also write | |
1074 | to the ring buffer, to test/stress the nesting ability. | |
1075 | If any anomalies are discovered, a warning will be displayed | |
1076 | and all ring buffers will be disabled. | |
1077 | ||
1078 | The test runs for 10 seconds. This will slow your boot time | |
1079 | by at least 10 more seconds. | |
1080 | ||
ac28d0a0 RD |
1081 | At the end of the test, statistics and more checks are done. |
1082 | It will output the stats of each per cpu buffer: What | |
6c43e554 SRRH |
1083 | was written, the sizes, what was read, what was lost, and |
1084 | other similar details. | |
1085 | ||
1086 | If unsure, say N | |
1087 | ||
5b7be9c7 SRV |
1088 | config RING_BUFFER_VALIDATE_TIME_DELTAS |
1089 | bool "Verify ring buffer time stamp deltas" | |
1090 | depends on RING_BUFFER | |
1091 | help | |
1092 | This will audit the time stamps on the ring buffer sub | |
1093 | buffer to make sure that all the time deltas for the | |
1094 | events on a sub buffer matches the current time stamp. | |
1095 | This audit is performed for every event that is not | |
1096 | interrupted, or interrupting another event. A check | |
1097 | is also made when traversing sub buffers to make sure | |
1098 | that all the deltas on the previous sub buffer do not | |
1099 | add up to be greater than the current time stamp. | |
1100 | ||
1101 | NOTE: This adds significant overhead to recording of events, | |
1102 | and should only be used to test the logic of the ring buffer. | |
1103 | Do not use it on production systems. | |
1104 | ||
1105 | Only say Y if you understand what this does, and you | |
1106 | still want it enabled. Otherwise say N | |
1107 | ||
a48fc4f5 SRV |
1108 | config MMIOTRACE_TEST |
1109 | tristate "Test module for mmiotrace" | |
1110 | depends on MMIOTRACE && m | |
1111 | help | |
1112 | This is a dumb module for testing mmiotrace. It is very dangerous | |
1113 | as it will write garbage to IO memory starting at a given address. | |
1114 | However, it should be safe to use on e.g. unused portion of VRAM. | |
1115 | ||
1116 | Say N, unless you absolutely know what you are doing. | |
1117 | ||
f96e8577 | 1118 | config PREEMPTIRQ_DELAY_TEST |
a48fc4f5 | 1119 | tristate "Test module to create a preempt / IRQ disable delay thread to test latency tracers" |
f96e8577 JFG |
1120 | depends on m |
1121 | help | |
1122 | Select this option to build a test module that can help test latency | |
1123 | tracers by executing a preempt or irq disable section with a user | |
1124 | configurable delay. The module busy waits for the duration of the | |
1125 | critical section. | |
1126 | ||
79393723 VRB |
1127 | For example, the following invocation generates a burst of three |
1128 | irq-disabled critical sections for 500us: | |
1129 | modprobe preemptirq_delay_test test_mode=irq delay=500 burst_size=3 | |
f96e8577 | 1130 | |
4b9091e1 SC |
1131 | What's more, if you want to attach the test on the cpu which the latency |
1132 | tracer is running on, specify cpu_affinity=cpu_num at the end of the | |
1133 | command. | |
1134 | ||
f96e8577 JFG |
1135 | If unsure, say N |
1136 | ||
9fe41efa TZ |
1137 | config SYNTH_EVENT_GEN_TEST |
1138 | tristate "Test module for in-kernel synthetic event generation" | |
726721a5 | 1139 | depends on SYNTH_EVENTS |
9fe41efa TZ |
1140 | help |
1141 | This option creates a test module to check the base | |
1142 | functionality of in-kernel synthetic event definition and | |
1143 | generation. | |
1144 | ||
1145 | To test, insert the module, and then check the trace buffer | |
1146 | for the generated sample events. | |
1147 | ||
1148 | If unsure, say N. | |
1149 | ||
64836248 TZ |
1150 | config KPROBE_EVENT_GEN_TEST |
1151 | tristate "Test module for in-kernel kprobe event generation" | |
1152 | depends on KPROBE_EVENTS | |
1153 | help | |
1154 | This option creates a test module to check the base | |
1155 | functionality of in-kernel kprobe event definition. | |
1156 | ||
1157 | To test, insert the module, and then check the trace buffer | |
1158 | for the generated kprobe events. | |
1159 | ||
1160 | If unsure, say N. | |
1161 | ||
2d19bd79 TZ |
1162 | config HIST_TRIGGERS_DEBUG |
1163 | bool "Hist trigger debug support" | |
1164 | depends on HIST_TRIGGERS | |
1165 | help | |
1166 | Add "hist_debug" file for each event, which when read will | |
1167 | dump out a bunch of internal details about the hist triggers | |
1168 | defined on that event. | |
1169 | ||
1170 | The hist_debug file serves a couple of purposes: | |
1171 | ||
1172 | - Helps developers verify that nothing is broken. | |
1173 | ||
1174 | - Provides educational information to support the details | |
1175 | of the hist trigger internals as described by | |
1176 | Documentation/trace/histogram-design.rst. | |
1177 | ||
1178 | The hist_debug output only covers the data structures | |
1179 | related to the histogram definitions themselves and doesn't | |
1180 | display the internals of map buckets or variable values of | |
1181 | running histograms. | |
1182 | ||
1183 | If unsure, say N. | |
1184 | ||
102227b9 DBO |
1185 | source "kernel/trace/rv/Kconfig" |
1186 | ||
4ed9f071 | 1187 | endif # FTRACE |