blob: 5e3de28c7677396aaa4360dcf2f51fb9b365b626 [file] [log] [blame]
Arnaldo Carvalho de Melo16444a82008-05-12 21:20:42 +02001#
Steven Rostedt606576c2008-10-06 19:06:12 -04002# Architectures that offer an FUNCTION_TRACER implementation should
3# select HAVE_FUNCTION_TRACER:
Arnaldo Carvalho de Melo16444a82008-05-12 21:20:42 +02004#
Frédéric Weisbecker2a3a4f62008-09-21 20:12:14 +02005
Török Edwin8d264872008-11-23 12:39:08 +02006config USER_STACKTRACE_SUPPORT
7 bool
8
Frédéric Weisbecker2a3a4f62008-09-21 20:12:14 +02009config NOP_TRACER
10 bool
11
Steven Rostedt78d904b2009-02-05 18:43:07 -050012config HAVE_FTRACE_NMI_ENTER
13 bool
Mike Frysinger555f3862009-09-14 20:10:15 -040014 help
Mauro Carvalho Chehab5fb94e92018-05-08 15:14:57 -030015 See Documentation/trace/ftrace-design.rst
Steven Rostedt78d904b2009-02-05 18:43:07 -050016
Steven Rostedt606576c2008-10-06 19:06:12 -040017config HAVE_FUNCTION_TRACER
Arnaldo Carvalho de Melo16444a82008-05-12 21:20:42 +020018 bool
Mike Frysinger555f3862009-09-14 20:10:15 -040019 help
Mauro Carvalho Chehab5fb94e92018-05-08 15:14:57 -030020 See Documentation/trace/ftrace-design.rst
Steven Rostedtbc0c38d2008-05-12 21:20:42 +020021
Frederic Weisbeckerfb526072008-11-25 21:07:04 +010022config HAVE_FUNCTION_GRAPH_TRACER
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +010023 bool
Mike Frysinger555f3862009-09-14 20:10:15 -040024 help
Mauro Carvalho Chehab5fb94e92018-05-08 15:14:57 -030025 See Documentation/trace/ftrace-design.rst
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +010026
Steven Rostedt677aa9f2008-05-17 00:01:36 -040027config HAVE_DYNAMIC_FTRACE
28 bool
Mike Frysinger555f3862009-09-14 20:10:15 -040029 help
Mauro Carvalho Chehab5fb94e92018-05-08 15:14:57 -030030 See Documentation/trace/ftrace-design.rst
Steven Rostedt677aa9f2008-05-17 00:01:36 -040031
Masami Hiramatsu06aeaae2012-09-28 17:15:17 +090032config HAVE_DYNAMIC_FTRACE_WITH_REGS
33 bool
34
Steven Rostedt8da38212008-08-14 15:45:07 -040035config HAVE_FTRACE_MCOUNT_RECORD
36 bool
Mike Frysinger555f3862009-09-14 20:10:15 -040037 help
Mauro Carvalho Chehab5fb94e92018-05-08 15:14:57 -030038 See Documentation/trace/ftrace-design.rst
Steven Rostedt8da38212008-08-14 15:45:07 -040039
Josh Stone66700002009-08-24 14:43:11 -070040config HAVE_SYSCALL_TRACEPOINTS
Frederic Weisbeckeree08c6e2009-03-07 05:52:59 +010041 bool
Mike Frysinger555f3862009-09-14 20:10:15 -040042 help
Mauro Carvalho Chehab5fb94e92018-05-08 15:14:57 -030043 See Documentation/trace/ftrace-design.rst
Frederic Weisbeckeree08c6e2009-03-07 05:52:59 +010044
Steven Rostedta2546fa2011-02-09 13:15:59 -050045config HAVE_FENTRY
46 bool
47 help
48 Arch supports the gcc options -pg with -mfentry
49
Vasily Gorbik2f4df002018-08-06 15:17:46 +020050config HAVE_NOP_MCOUNT
51 bool
52 help
53 Arch supports the gcc options -pg with -mrecord-mcount and -nop-mcount
54
Steven Rostedtcf4db252010-10-14 23:32:44 -040055config HAVE_C_RECORDMCOUNT
Steven Rostedt72441cb2010-10-13 17:12:30 -040056 bool
57 help
58 C version of recordmcount available?
59
Steven Rostedt352ad252008-05-12 21:20:42 +020060config TRACER_MAX_TRACE
61 bool
62
Josh Triplettea632e92012-09-02 19:45:14 -070063config TRACE_CLOCK
64 bool
65
Steven Rostedt7a8e76a2008-09-29 23:02:38 -040066config RING_BUFFER
67 bool
Josh Triplettea632e92012-09-02 19:45:14 -070068 select TRACE_CLOCK
Steven Rostedt (Red Hat)22287682013-05-03 11:16:18 -040069 select IRQ_WORK
Steven Rostedt7a8e76a2008-09-29 23:02:38 -040070
Steven Rostedt78d904b2009-02-05 18:43:07 -050071config FTRACE_NMI_ENTER
72 bool
73 depends on HAVE_FTRACE_NMI_ENTER
74 default y
75
Tom Zanussi5f77a882009-04-08 03:14:01 -050076config EVENT_TRACING
Zhaoleib11c53e2009-05-25 18:11:59 +080077 select CONTEXT_SWITCH_TRACER
Masami Hiramatsu60f1d5e2016-10-05 20:58:15 +090078 select GLOB
Zhaoleib11c53e2009-05-25 18:11:59 +080079 bool
80
81config CONTEXT_SWITCH_TRACER
Tom Zanussi5f77a882009-04-08 03:14:01 -050082 bool
83
Steven Rostedt85bac322009-09-04 14:24:40 -040084config RING_BUFFER_ALLOW_SWAP
85 bool
86 help
87 Allow the use of ring_buffer_swap_cpu.
88 Adds a very slight overhead to tracing when enabled.
89
Joel Fernandes (Google)c3bc8fd2018-07-30 15:24:23 -070090config PREEMPTIRQ_TRACEPOINTS
91 bool
92 depends on TRACE_PREEMPT_TOGGLE || TRACE_IRQFLAGS
93 select TRACING
94 default y
95 help
96 Create preempt/irq toggle tracepoints if needed, so that other parts
97 of the kernel can use them to generate or add hooks to them.
98
Steven Rostedt5e0a0932009-05-28 15:50:13 -040099# All tracer options should select GENERIC_TRACER. For those options that are
100# enabled by all tracers (context switch and event tracer) they select TRACING.
101# This allows those options to appear when no other tracer is selected. But the
102# options do not appear when something else selects it. We need the two options
103# GENERIC_TRACER and TRACING to avoid circular dependencies to accomplish the
Randy Dunlap40892362009-12-21 12:01:17 -0800104# hiding of the automatic options.
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400105
Steven Rostedtbc0c38d2008-05-12 21:20:42 +0200106config TRACING
107 bool
108 select DEBUG_FS
Steven Rostedt7a8e76a2008-09-29 23:02:38 -0400109 select RING_BUFFER
Al Viroc2c80522008-10-31 19:50:41 +0000110 select STACKTRACE if STACKTRACE_SUPPORT
Ingo Molnar5f87f112008-07-23 14:15:22 +0200111 select TRACEPOINTS
Steven Rostedtf3384b22008-10-29 11:15:57 -0400112 select NOP_TRACER
Frederic Weisbecker769b0442009-03-06 17:21:49 +0100113 select BINARY_PRINTF
Tom Zanussi5f77a882009-04-08 03:14:01 -0500114 select EVENT_TRACING
Josh Triplettea632e92012-09-02 19:45:14 -0700115 select TRACE_CLOCK
Steven Rostedtbc0c38d2008-05-12 21:20:42 +0200116
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400117config GENERIC_TRACER
118 bool
119 select TRACING
120
Ingo Molnar40ada302009-03-05 21:19:55 +0100121#
122# Minimum requirements an architecture has to meet for us to
123# be able to offer generic tracing facilities:
124#
125config TRACING_SUPPORT
126 bool
Michael Ellerman0ea5ee02018-05-02 21:29:48 +1000127 depends on TRACE_IRQFLAGS_SUPPORT
Ingo Molnar40ada302009-03-05 21:19:55 +0100128 depends on STACKTRACE_SUPPORT
KOSAKI Motohiro422d3c72009-03-06 10:40:53 +0900129 default y
Ingo Molnar40ada302009-03-05 21:19:55 +0100130
131if TRACING_SUPPORT
132
Steven Rostedt4ed9f072009-04-20 10:47:36 -0400133menuconfig FTRACE
134 bool "Tracers"
Steven Rostedt65b77242009-05-07 12:49:27 -0400135 default y if DEBUG_KERNEL
Steven Rostedt4ed9f072009-04-20 10:47:36 -0400136 help
Randy Dunlap40892362009-12-21 12:01:17 -0800137 Enable the kernel tracing infrastructure.
Steven Rostedt4ed9f072009-04-20 10:47:36 -0400138
139if FTRACE
Peter Zijlstra17d80fd2008-10-21 16:31:18 +0200140
Steven Rostedt606576c2008-10-06 19:06:12 -0400141config FUNCTION_TRACER
Steven Rostedt1b29b012008-05-12 21:20:42 +0200142 bool "Kernel Function Tracer"
Steven Rostedt606576c2008-10-06 19:06:12 -0400143 depends on HAVE_FUNCTION_TRACER
Steven Rostedt4d7a0772009-02-18 22:06:18 -0500144 select KALLSYMS
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400145 select GENERIC_TRACER
Steven Rostedt35e8e302008-05-12 21:20:42 +0200146 select CONTEXT_SWITCH_TRACER
Steven Rostedt (VMware)0598e4f2017-04-06 10:28:12 -0400147 select GLOB
148 select TASKS_RCU if PREEMPT
Steven Rostedt1b29b012008-05-12 21:20:42 +0200149 help
150 Enable the kernel to trace every kernel function. This is done
151 by using a compiler feature to insert a small, 5-byte No-Operation
Randy Dunlap40892362009-12-21 12:01:17 -0800152 instruction at the beginning of every kernel function, which NOP
Steven Rostedt1b29b012008-05-12 21:20:42 +0200153 sequence is then dynamically patched into a tracer call when
154 tracing is enabled by the administrator. If it's runtime disabled
155 (the bootup default), then the overhead of the instructions is very
156 small and not measurable even in micro-benchmarks.
Steven Rostedt35e8e302008-05-12 21:20:42 +0200157
Frederic Weisbeckerfb526072008-11-25 21:07:04 +0100158config FUNCTION_GRAPH_TRACER
159 bool "Kernel Function Graph Tracer"
160 depends on HAVE_FUNCTION_GRAPH_TRACER
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +0100161 depends on FUNCTION_TRACER
Steven Rostedteb4a0372009-06-18 12:53:21 -0400162 depends on !X86_32 || !CC_OPTIMIZE_FOR_SIZE
Ingo Molnar764f3b92008-12-03 10:33:58 +0100163 default y
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +0100164 help
Frederic Weisbeckerfb526072008-11-25 21:07:04 +0100165 Enable the kernel to trace a function at both its return
166 and its entry.
Matt LaPlante692105b2009-01-26 11:12:25 +0100167 Its first purpose is to trace the duration of functions and
168 draw a call graph for each thread with some information like
Randy Dunlap40892362009-12-21 12:01:17 -0800169 the return value. This is done by setting the current return
Matt LaPlante692105b2009-01-26 11:12:25 +0100170 address on the current task structure into a stack of calls.
Frederic Weisbecker15e6cb32008-11-11 07:14:25 +0100171
Joel Fernandes (Google)c3bc8fd2018-07-30 15:24:23 -0700172config TRACE_PREEMPT_TOGGLE
173 bool
174 help
175 Enables hooks which will be called when preemption is first disabled,
176 and last enabled.
Steven Rostedtbac429f2009-03-20 12:50:56 -0400177
Joel Fernandesd5915812017-10-10 15:51:37 -0700178config PREEMPTIRQ_EVENTS
179 bool "Enable trace events for preempt and irq disable/enable"
180 select TRACE_IRQFLAGS
Joel Fernandes (Google)c3bc8fd2018-07-30 15:24:23 -0700181 select TRACE_PREEMPT_TOGGLE if PREEMPT
182 select GENERIC_TRACER
Joel Fernandesd5915812017-10-10 15:51:37 -0700183 default n
184 help
185 Enable tracing of disable and enable events for preemption and irqs.
Joel Fernandesd5915812017-10-10 15:51:37 -0700186
Steven Rostedt81d68a92008-05-12 21:20:42 +0200187config IRQSOFF_TRACER
188 bool "Interrupts-off Latency Tracer"
189 default n
190 depends on TRACE_IRQFLAGS_SUPPORT
John Stultz592913e2010-07-13 17:56:20 -0700191 depends on !ARCH_USES_GETTIMEOFFSET
Steven Rostedt81d68a92008-05-12 21:20:42 +0200192 select TRACE_IRQFLAGS
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400193 select GENERIC_TRACER
Steven Rostedt81d68a92008-05-12 21:20:42 +0200194 select TRACER_MAX_TRACE
Steven Rostedt85bac322009-09-04 14:24:40 -0400195 select RING_BUFFER_ALLOW_SWAP
Steven Rostedt (Red Hat)22cffc22013-03-05 07:30:24 -0500196 select TRACER_SNAPSHOT
Steven Rostedt (Red Hat)0b85ffc2013-03-05 14:50:23 -0500197 select TRACER_SNAPSHOT_PER_CPU_SWAP
Steven Rostedt81d68a92008-05-12 21:20:42 +0200198 help
199 This option measures the time spent in irqs-off critical
200 sections, with microsecond accuracy.
201
202 The default measurement method is a maximum search, which is
203 disabled by default and can be runtime (re-)started
204 via:
205
GeunSik Lim156f5a72009-06-02 15:01:37 +0900206 echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
Steven Rostedt81d68a92008-05-12 21:20:42 +0200207
Randy Dunlap40892362009-12-21 12:01:17 -0800208 (Note that kernel size and overhead increase with this option
Steven Rostedt6cd8a4b2008-05-12 21:20:42 +0200209 enabled. This option and the preempt-off timing option can be
210 used together or separately.)
211
212config PREEMPT_TRACER
213 bool "Preemption-off Latency Tracer"
214 default n
John Stultz592913e2010-07-13 17:56:20 -0700215 depends on !ARCH_USES_GETTIMEOFFSET
Steven Rostedt6cd8a4b2008-05-12 21:20:42 +0200216 depends on PREEMPT
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400217 select GENERIC_TRACER
Steven Rostedt6cd8a4b2008-05-12 21:20:42 +0200218 select TRACER_MAX_TRACE
Steven Rostedt85bac322009-09-04 14:24:40 -0400219 select RING_BUFFER_ALLOW_SWAP
Steven Rostedt (Red Hat)22cffc22013-03-05 07:30:24 -0500220 select TRACER_SNAPSHOT
Steven Rostedt (Red Hat)0b85ffc2013-03-05 14:50:23 -0500221 select TRACER_SNAPSHOT_PER_CPU_SWAP
Joel Fernandes (Google)c3bc8fd2018-07-30 15:24:23 -0700222 select TRACE_PREEMPT_TOGGLE
Steven Rostedt6cd8a4b2008-05-12 21:20:42 +0200223 help
Randy Dunlap40892362009-12-21 12:01:17 -0800224 This option measures the time spent in preemption-off critical
Steven Rostedt6cd8a4b2008-05-12 21:20:42 +0200225 sections, with microsecond accuracy.
226
227 The default measurement method is a maximum search, which is
228 disabled by default and can be runtime (re-)started
229 via:
230
GeunSik Lim156f5a72009-06-02 15:01:37 +0900231 echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
Steven Rostedt6cd8a4b2008-05-12 21:20:42 +0200232
Randy Dunlap40892362009-12-21 12:01:17 -0800233 (Note that kernel size and overhead increase with this option
Steven Rostedt6cd8a4b2008-05-12 21:20:42 +0200234 enabled. This option and the irqs-off timing option can be
235 used together or separately.)
236
Steven Rostedt352ad252008-05-12 21:20:42 +0200237config SCHED_TRACER
238 bool "Scheduling Latency Tracer"
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400239 select GENERIC_TRACER
Steven Rostedt352ad252008-05-12 21:20:42 +0200240 select CONTEXT_SWITCH_TRACER
241 select TRACER_MAX_TRACE
Steven Rostedt (Red Hat)22cffc22013-03-05 07:30:24 -0500242 select TRACER_SNAPSHOT
Steven Rostedt352ad252008-05-12 21:20:42 +0200243 help
244 This tracer tracks the latency of the highest priority task
245 to be scheduled in, starting from the point it has woken up.
246
Steven Rostedt (Red Hat)e7c15cd2016-06-23 12:45:36 -0400247config HWLAT_TRACER
248 bool "Tracer to detect hardware latencies (like SMIs)"
249 select GENERIC_TRACER
250 help
251 This tracer, when enabled will create one or more kernel threads,
Jesper Dangaard Brouerc5c1ea72017-06-13 13:06:59 +0200252 depending on what the cpumask file is set to, which each thread
Steven Rostedt (Red Hat)e7c15cd2016-06-23 12:45:36 -0400253 spinning in a loop looking for interruptions caused by
254 something other than the kernel. For example, if a
255 System Management Interrupt (SMI) takes a noticeable amount of
256 time, this tracer will detect it. This is useful for testing
257 if a system is reliable for Real Time tasks.
258
259 Some files are created in the tracing directory when this
260 is enabled:
261
262 hwlat_detector/width - time in usecs for how long to spin for
263 hwlat_detector/window - time in usecs between the start of each
264 iteration
265
266 A kernel thread is created that will spin with interrupts disabled
Jesper Dangaard Brouerc5c1ea72017-06-13 13:06:59 +0200267 for "width" microseconds in every "window" cycle. It will not spin
Steven Rostedt (Red Hat)e7c15cd2016-06-23 12:45:36 -0400268 for "window - width" microseconds, where the system can
269 continue to operate.
270
271 The output will appear in the trace and trace_pipe files.
272
273 When the tracer is not running, it has no affect on the system,
274 but when it is running, it can cause the system to be
275 periodically non responsive. Do not run this tracer on a
276 production system.
277
278 To enable this tracer, echo in "hwlat" into the current_tracer
279 file. Every time a latency is greater than tracing_thresh, it will
280 be recorded into the ring buffer.
281
Steven Rostedt897f17a2009-05-28 16:31:21 -0400282config ENABLE_DEFAULT_TRACERS
283 bool "Trace process context switches and events"
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400284 depends on !GENERIC_TRACER
Steven Rostedtb77e38a2009-02-24 10:21:36 -0500285 select TRACING
286 help
Randy Dunlap40892362009-12-21 12:01:17 -0800287 This tracer hooks to various trace points in the kernel,
Steven Rostedtb77e38a2009-02-24 10:21:36 -0500288 allowing the user to pick and choose which trace point they
Steven Rostedt897f17a2009-05-28 16:31:21 -0400289 want to trace. It also includes the sched_switch tracer plugin.
Steven Rostedta7abe972009-04-20 10:59:34 -0400290
Frederic Weisbeckeree08c6e2009-03-07 05:52:59 +0100291config FTRACE_SYSCALLS
292 bool "Trace syscalls"
Josh Stone66700002009-08-24 14:43:11 -0700293 depends on HAVE_SYSCALL_TRACEPOINTS
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400294 select GENERIC_TRACER
Frederic Weisbecker0ea1c412009-03-15 22:10:38 +0100295 select KALLSYMS
Frederic Weisbeckeree08c6e2009-03-07 05:52:59 +0100296 help
297 Basic tracer to catch the syscall entry and exit events.
298
Hiraku Toyookadebdd572012-12-26 11:53:00 +0900299config TRACER_SNAPSHOT
300 bool "Create a snapshot trace buffer"
301 select TRACER_MAX_TRACE
302 help
303 Allow tracing users to take snapshot of the current buffer using the
304 ftrace interface, e.g.:
305
306 echo 1 > /sys/kernel/debug/tracing/snapshot
307 cat snapshot
308
Steven Rostedt (Red Hat)0b85ffc2013-03-05 14:50:23 -0500309config TRACER_SNAPSHOT_PER_CPU_SWAP
310 bool "Allow snapshot to swap per CPU"
311 depends on TRACER_SNAPSHOT
312 select RING_BUFFER_ALLOW_SWAP
313 help
314 Allow doing a snapshot of a single CPU buffer instead of a
315 full swap (all buffers). If this is set, then the following is
316 allowed:
317
318 echo 1 > /sys/kernel/debug/tracing/per_cpu/cpu2/snapshot
319
320 After which, only the tracing buffer for CPU 2 was swapped with
321 the main tracing buffer, and the other CPU buffers remain the same.
322
323 When this is enabled, this adds a little more overhead to the
324 trace recording, as it needs to add some checks to synchronize
325 recording with swaps. But this does not affect the performance
326 of the overall system. This is enabled by default when the preempt
327 or irq latency tracers are enabled, as those need to swap as well
328 and already adds the overhead (plus a lot more).
329
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500330config TRACE_BRANCH_PROFILING
Steven Rostedt9ae5b872009-04-20 10:27:58 -0400331 bool
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400332 select GENERIC_TRACER
Steven Rostedt9ae5b872009-04-20 10:27:58 -0400333
334choice
335 prompt "Branch Profiling"
336 default BRANCH_PROFILE_NONE
337 help
338 The branch profiling is a software profiler. It will add hooks
339 into the C conditionals to test which path a branch takes.
340
341 The likely/unlikely profiler only looks at the conditions that
342 are annotated with a likely or unlikely macro.
343
Randy Dunlap40892362009-12-21 12:01:17 -0800344 The "all branch" profiler will profile every if-statement in the
Steven Rostedt9ae5b872009-04-20 10:27:58 -0400345 kernel. This profiler will also enable the likely/unlikely
Randy Dunlap40892362009-12-21 12:01:17 -0800346 profiler.
Steven Rostedt9ae5b872009-04-20 10:27:58 -0400347
Randy Dunlap40892362009-12-21 12:01:17 -0800348 Either of the above profilers adds a bit of overhead to the system.
349 If unsure, choose "No branch profiling".
Steven Rostedt9ae5b872009-04-20 10:27:58 -0400350
351config BRANCH_PROFILE_NONE
352 bool "No branch profiling"
353 help
Randy Dunlap40892362009-12-21 12:01:17 -0800354 No branch profiling. Branch profiling adds a bit of overhead.
355 Only enable it if you want to analyse the branching behavior.
356 Otherwise keep it disabled.
Steven Rostedt9ae5b872009-04-20 10:27:58 -0400357
358config PROFILE_ANNOTATED_BRANCHES
359 bool "Trace likely/unlikely profiler"
360 select TRACE_BRANCH_PROFILING
Steven Rostedt1f0d69a2008-11-12 00:14:39 -0500361 help
Masanari Iida59bf8962012-04-18 00:01:21 +0900362 This tracer profiles all likely and unlikely macros
Steven Rostedt1f0d69a2008-11-12 00:14:39 -0500363 in the kernel. It will display the results in:
364
David Rientjes13e5bef2011-03-16 17:17:08 -0700365 /sys/kernel/debug/tracing/trace_stat/branch_annotated
Steven Rostedt1f0d69a2008-11-12 00:14:39 -0500366
Randy Dunlap40892362009-12-21 12:01:17 -0800367 Note: this will add a significant overhead; only turn this
Steven Rostedt1f0d69a2008-11-12 00:14:39 -0500368 on if you need to profile the system's use of these macros.
369
Steven Rostedt2bcd5212008-11-21 01:30:54 -0500370config PROFILE_ALL_BRANCHES
Randy Dunlap68e76e02018-01-15 11:07:27 -0800371 bool "Profile all if conditionals" if !FORTIFY_SOURCE
Steven Rostedt9ae5b872009-04-20 10:27:58 -0400372 select TRACE_BRANCH_PROFILING
Steven Rostedt2bcd5212008-11-21 01:30:54 -0500373 help
374 This tracer profiles all branch conditions. Every if ()
375 taken in the kernel is recorded whether it hit or miss.
376 The results will be displayed in:
377
David Rientjes13e5bef2011-03-16 17:17:08 -0700378 /sys/kernel/debug/tracing/trace_stat/branch_all
Steven Rostedt2bcd5212008-11-21 01:30:54 -0500379
Steven Rostedt9ae5b872009-04-20 10:27:58 -0400380 This option also enables the likely/unlikely profiler.
381
Steven Rostedt2bcd5212008-11-21 01:30:54 -0500382 This configuration, when enabled, will impose a great overhead
383 on the system. This should only be enabled when the system
Randy Dunlap40892362009-12-21 12:01:17 -0800384 is to be analyzed in much detail.
Steven Rostedt9ae5b872009-04-20 10:27:58 -0400385endchoice
Steven Rostedt2bcd5212008-11-21 01:30:54 -0500386
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500387config TRACING_BRANCHES
Steven Rostedt52f232c2008-11-12 00:14:40 -0500388 bool
389 help
390 Selected by tracers that will trace the likely and unlikely
391 conditions. This prevents the tracers themselves from being
392 profiled. Profiling the tracing infrastructure can only happen
393 when the likelys and unlikelys are not being traced.
394
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500395config BRANCH_TRACER
Steven Rostedt52f232c2008-11-12 00:14:40 -0500396 bool "Trace likely/unlikely instances"
Steven Rostedt2ed84ee2008-11-12 15:24:24 -0500397 depends on TRACE_BRANCH_PROFILING
398 select TRACING_BRANCHES
Steven Rostedt52f232c2008-11-12 00:14:40 -0500399 help
400 This traces the events of likely and unlikely condition
401 calls in the kernel. The difference between this and the
402 "Trace likely/unlikely profiler" is that this is not a
403 histogram of the callers, but actually places the calling
404 events into a running trace buffer to see when and where the
405 events happened, as well as their results.
406
407 Say N if unsure.
408
Steven Rostedte5a81b62008-08-27 23:31:01 -0400409config STACK_TRACER
410 bool "Trace max stack"
Steven Rostedt606576c2008-10-06 19:06:12 -0400411 depends on HAVE_FUNCTION_TRACER
Steven Rostedt606576c2008-10-06 19:06:12 -0400412 select FUNCTION_TRACER
Steven Rostedte5a81b62008-08-27 23:31:01 -0400413 select STACKTRACE
Steven Rostedt4d7a0772009-02-18 22:06:18 -0500414 select KALLSYMS
Steven Rostedte5a81b62008-08-27 23:31:01 -0400415 help
Ingo Molnar4519d9e2008-10-14 14:15:43 +0200416 This special tracer records the maximum stack footprint of the
GeunSik Lim156f5a72009-06-02 15:01:37 +0900417 kernel and displays it in /sys/kernel/debug/tracing/stack_trace.
Ingo Molnar4519d9e2008-10-14 14:15:43 +0200418
419 This tracer works by hooking into every function call that the
420 kernel executes, and keeping a maximum stack depth value and
Steven Rostedtf38f1d22008-12-16 23:06:40 -0500421 stack-trace saved. If this is configured with DYNAMIC_FTRACE
422 then it will not have any overhead while the stack tracer
423 is disabled.
424
425 To enable the stack tracer on bootup, pass in 'stacktrace'
426 on the kernel command line.
427
428 The stack tracer can also be enabled or disabled via the
429 sysctl kernel.stack_tracer_enabled
Ingo Molnar4519d9e2008-10-14 14:15:43 +0200430
431 Say N if unsure.
Steven Rostedte5a81b62008-08-27 23:31:01 -0400432
Frederic Weisbecker2db270a2009-02-07 20:46:45 +0100433config BLK_DEV_IO_TRACE
Randy Dunlap40892362009-12-21 12:01:17 -0800434 bool "Support for tracing block IO actions"
Frederic Weisbecker2db270a2009-02-07 20:46:45 +0100435 depends on SYSFS
Ingo Molnar1dfba052009-02-09 12:06:54 +0100436 depends on BLOCK
Frederic Weisbecker2db270a2009-02-07 20:46:45 +0100437 select RELAY
438 select DEBUG_FS
439 select TRACEPOINTS
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400440 select GENERIC_TRACER
Frederic Weisbecker2db270a2009-02-07 20:46:45 +0100441 select STACKTRACE
442 help
443 Say Y here if you want to be able to trace the block layer actions
444 on a given queue. Tracing allows you to see any traffic happening
445 on a block device queue. For more information (and the userspace
446 support tools needed), fetch the blktrace tools from:
447
448 git://git.kernel.dk/blktrace.git
449
450 Tracing also is possible using the ftrace interface, e.g.:
451
452 echo 1 > /sys/block/sda/sda1/trace/enable
453 echo blk > /sys/kernel/debug/tracing/current_tracer
454 cat /sys/kernel/debug/tracing/trace_pipe
455
456 If unsure, say N.
Frederic Weisbecker36994e52008-12-29 13:42:23 -0800457
Anton Blanchard6b0b7552017-02-16 17:00:50 +1100458config KPROBE_EVENTS
Masami Hiramatsu413d37d2009-08-13 16:35:11 -0400459 depends on KPROBES
Heiko Carstensf850c30c2010-02-10 17:25:17 +0100460 depends on HAVE_REGS_AND_STACK_ACCESS_API
Masami Hiramatsu77b44d12009-11-03 19:12:47 -0500461 bool "Enable kprobes-based dynamic events"
Masami Hiramatsu413d37d2009-08-13 16:35:11 -0400462 select TRACING
Srikar Dronamraju8ab83f52012-04-09 14:41:44 +0530463 select PROBE_EVENTS
Masami Hiramatsu77b44d12009-11-03 19:12:47 -0500464 default y
Masami Hiramatsu413d37d2009-08-13 16:35:11 -0400465 help
Randy Dunlap40892362009-12-21 12:01:17 -0800466 This allows the user to add tracing events (similar to tracepoints)
467 on the fly via the ftrace interface. See
Mauro Carvalho Chehab5fb94e92018-05-08 15:14:57 -0300468 Documentation/trace/kprobetrace.rst for more details.
Masami Hiramatsu77b44d12009-11-03 19:12:47 -0500469
470 Those events can be inserted wherever kprobes can probe, and record
471 various register and memory values.
472
Randy Dunlap40892362009-12-21 12:01:17 -0800473 This option is also required by perf-probe subcommand of perf tools.
474 If you want to use perf tools, this option is strongly recommended.
Masami Hiramatsu413d37d2009-08-13 16:35:11 -0400475
Masami Hiramatsu45408c42018-07-30 19:20:14 +0900476config KPROBE_EVENTS_ON_NOTRACE
477 bool "Do NOT protect notrace function from kprobe events"
478 depends on KPROBE_EVENTS
479 depends on KPROBES_ON_FTRACE
480 default n
481 help
482 This is only for the developers who want to debug ftrace itself
483 using kprobe events.
484
485 If kprobes can use ftrace instead of breakpoint, ftrace related
486 functions are protected from kprobe-events to prevent an infinit
487 recursion or any unexpected execution path which leads to a kernel
488 crash.
489
490 This option disables such protection and allows you to put kprobe
491 events on ftrace functions for debugging ftrace by itself.
492 Note that this might let you shoot yourself in the foot.
493
494 If unsure, say N.
495
Anton Blanchard6b0b7552017-02-16 17:00:50 +1100496config UPROBE_EVENTS
Srikar Dronamrajuf3f096c2012-04-11 16:00:43 +0530497 bool "Enable uprobes-based dynamic events"
498 depends on ARCH_SUPPORTS_UPROBES
499 depends on MMU
David A. Long09294e32014-03-07 10:32:22 -0500500 depends on PERF_EVENTS
Srikar Dronamrajuf3f096c2012-04-11 16:00:43 +0530501 select UPROBES
502 select PROBE_EVENTS
503 select TRACING
Arnaldo Carvalho de Melo61f35d72017-03-16 12:42:02 -0300504 default y
Srikar Dronamrajuf3f096c2012-04-11 16:00:43 +0530505 help
506 This allows the user to add tracing events on top of userspace
507 dynamic events (similar to tracepoints) on the fly via the trace
508 events interface. Those events can be inserted wherever uprobes
509 can probe, and record various registers.
510 This option is required if you plan to use perf-probe subcommand
511 of perf tools on user space applications.
512
Ingo Molnare1abf2c2015-04-02 15:51:39 +0200513config BPF_EVENTS
514 depends on BPF_SYSCALL
Anton Blanchard6b0b7552017-02-16 17:00:50 +1100515 depends on (KPROBE_EVENTS || UPROBE_EVENTS) && PERF_EVENTS
Ingo Molnare1abf2c2015-04-02 15:51:39 +0200516 bool
517 default y
518 help
519 This allows the user to attach BPF programs to kprobe events.
520
Srikar Dronamraju8ab83f52012-04-09 14:41:44 +0530521config PROBE_EVENTS
522 def_bool n
523
Steven Rostedt3d083392008-05-12 21:20:42 +0200524config DYNAMIC_FTRACE
Steven Rostedtdb050212013-02-27 21:48:09 -0500525 bool "enable/disable function tracing dynamically"
Steven Rostedt606576c2008-10-06 19:06:12 -0400526 depends on FUNCTION_TRACER
Steven Rostedt677aa9f2008-05-17 00:01:36 -0400527 depends on HAVE_DYNAMIC_FTRACE
Steven Rostedt3d083392008-05-12 21:20:42 +0200528 default y
529 help
Steven Rostedtdb050212013-02-27 21:48:09 -0500530 This option will modify all the calls to function tracing
531 dynamically (will patch them out of the binary image and
532 replace them with a No-Op instruction) on boot up. During
533 compile time, a table is made of all the locations that ftrace
534 can function trace, and this table is linked into the kernel
535 image. When this is enabled, functions can be individually
536 enabled, and the functions not enabled will not affect
537 performance of the system.
538
539 See the files in /sys/kernel/debug/tracing:
540 available_filter_functions
541 set_ftrace_filter
542 set_ftrace_notrace
Steven Rostedt3d083392008-05-12 21:20:42 +0200543
Randy Dunlap40892362009-12-21 12:01:17 -0800544 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but
545 otherwise has native performance as long as no tracing is active.
Steven Rostedt3d083392008-05-12 21:20:42 +0200546
Masami Hiramatsu06aeaae2012-09-28 17:15:17 +0900547config DYNAMIC_FTRACE_WITH_REGS
548 def_bool y
549 depends on DYNAMIC_FTRACE
550 depends on HAVE_DYNAMIC_FTRACE_WITH_REGS
551
Steven Rostedtbac429f2009-03-20 12:50:56 -0400552config FUNCTION_PROFILER
553 bool "Kernel function profiler"
Steven Rostedt493762f2009-03-23 17:12:36 -0400554 depends on FUNCTION_TRACER
Steven Rostedtbac429f2009-03-20 12:50:56 -0400555 default n
556 help
Randy Dunlap40892362009-12-21 12:01:17 -0800557 This option enables the kernel function profiler. A file is created
558 in debugfs called function_profile_enabled which defaults to zero.
559 When a 1 is echoed into this file profiling begins, and when a
560 zero is entered, profiling stops. A "functions" file is created in
Masami Hiramatsu1fee4f72018-07-26 21:43:36 +0900561 the trace_stat directory; this file shows the list of functions that
Randy Dunlap40892362009-12-21 12:01:17 -0800562 have been hit and their counters.
Steven Rostedtbac429f2009-03-20 12:50:56 -0400563
Randy Dunlap40892362009-12-21 12:01:17 -0800564 If in doubt, say N.
Steven Rostedtbac429f2009-03-20 12:50:56 -0400565
Josef Bacik9802d862017-12-11 11:36:48 -0500566config BPF_KPROBE_OVERRIDE
567 bool "Enable BPF programs to override a kprobed function"
568 depends on BPF_EVENTS
Masami Hiramatsu540adea2018-01-13 02:55:03 +0900569 depends on FUNCTION_ERROR_INJECTION
Josef Bacik9802d862017-12-11 11:36:48 -0500570 default n
571 help
572 Allows BPF to override the execution of a probed function and
573 set a different return value. This is used for error injection.
574
Steven Rostedt8da38212008-08-14 15:45:07 -0400575config FTRACE_MCOUNT_RECORD
576 def_bool y
577 depends on DYNAMIC_FTRACE
578 depends on HAVE_FTRACE_MCOUNT_RECORD
579
Steven Rostedt60a11772008-05-12 21:20:44 +0200580config FTRACE_SELFTEST
581 bool
582
583config FTRACE_STARTUP_TEST
584 bool "Perform a startup test on ftrace"
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400585 depends on GENERIC_TRACER
Steven Rostedt60a11772008-05-12 21:20:44 +0200586 select FTRACE_SELFTEST
587 help
588 This option performs a series of startup tests on ftrace. On bootup
589 a series of tests are made to verify that the tracer is
590 functioning properly. It will do tests on all the configured
591 tracers of ftrace.
Peter Zijlstra17d80fd2008-10-21 16:31:18 +0200592
Steven Rostedt1f5a6b42009-09-14 11:58:24 -0400593config EVENT_TRACE_TEST_SYSCALLS
594 bool "Run selftest on syscall events"
595 depends on FTRACE_STARTUP_TEST
596 help
597 This option will also enable testing every syscall event.
598 It only enables the event and disables it and runs various loads
599 with the event enabled. This adds a bit more time for kernel boot
600 up since it runs this on every system call defined.
601
602 TBD - enable a way to actually call the syscalls as we test their
603 events
604
Pekka Paalanenfe6f90e2009-01-03 21:23:51 +0200605config MMIOTRACE
606 bool "Memory mapped IO tracing"
Ingo Molnar40ada302009-03-05 21:19:55 +0100607 depends on HAVE_MMIOTRACE_SUPPORT && PCI
Steven Rostedt5e0a0932009-05-28 15:50:13 -0400608 select GENERIC_TRACER
Pekka Paalanenfe6f90e2009-01-03 21:23:51 +0200609 help
610 Mmiotrace traces Memory Mapped I/O access and is meant for
611 debugging and reverse engineering. It is called from the ioremap
612 implementation and works via page faults. Tracing is disabled by
613 default and can be enabled at run-time.
614
Mauro Carvalho Chehab5fb94e92018-05-08 15:14:57 -0300615 See Documentation/trace/mmiotrace.rst.
Pekka Paalanenfe6f90e2009-01-03 21:23:51 +0200616 If you are not helping to develop drivers, say N.
617
Tom Zanussi08d43a52015-12-10 12:50:50 -0600618config TRACING_MAP
619 bool
620 depends on ARCH_HAVE_NMI_SAFE_CMPXCHG
Tom Zanussi08d43a52015-12-10 12:50:50 -0600621 help
622 tracing_map is a special-purpose lock-free map for tracing,
623 separated out as a stand-alone facility in order to allow it
624 to be shared between multiple tracers. It isn't meant to be
625 generally used outside of that context, and is normally
626 selected by tracers that use it.
627
Tom Zanussi7ef224d2016-03-03 12:54:42 -0600628config HIST_TRIGGERS
629 bool "Histogram triggers"
630 depends on ARCH_HAVE_NMI_SAFE_CMPXCHG
631 select TRACING_MAP
Tom Zanussi7ad8fb62016-07-03 08:51:34 -0500632 select TRACING
Tom Zanussi7ef224d2016-03-03 12:54:42 -0600633 default n
634 help
635 Hist triggers allow one or more arbitrary trace event fields
636 to be aggregated into hash tables and dumped to stdout by
637 reading a debugfs/tracefs file. They're useful for
638 gathering quick and dirty (though precise) summaries of
639 event activity as an initial guide for further investigation
640 using more advanced tools.
641
Tom Zanussi89e270c2018-01-15 20:52:10 -0600642 Inter-event tracing of quantities such as latencies is also
643 supported using hist triggers under this option.
644
Mauro Carvalho Chehabea272252018-06-26 06:49:11 -0300645 See Documentation/trace/histogram.rst.
Tom Zanussi7ef224d2016-03-03 12:54:42 -0600646 If in doubt, say N.
647
Pekka Paalanenfe6f90e2009-01-03 21:23:51 +0200648config MMIOTRACE_TEST
649 tristate "Test module for mmiotrace"
650 depends on MMIOTRACE && m
651 help
652 This is a dumb module for testing mmiotrace. It is very dangerous
653 as it will write garbage to IO memory starting at a given address.
654 However, it should be safe to use on e.g. unused portion of VRAM.
655
656 Say N, unless you absolutely know what you are doing.
657
Steven Rostedt (Red Hat)81dc9f02014-05-29 22:49:07 -0400658config TRACEPOINT_BENCHMARK
659 bool "Add tracepoint that benchmarks tracepoints"
660 help
661 This option creates the tracepoint "benchmark:benchmark_event".
662 When the tracepoint is enabled, it kicks off a kernel thread that
663 goes into an infinite loop (calling cond_sched() to let other tasks
664 run), and calls the tracepoint. Each iteration will record the time
665 it took to write to the tracepoint and the next iteration that
666 data will be passed to the tracepoint itself. That is, the tracepoint
667 will report the time it took to do the previous tracepoint.
668 The string written to the tracepoint is a static string of 128 bytes
669 to keep the time the same. The initial string is simply a write of
670 "START". The second string records the cold cache time of the first
671 write which is not added to the rest of the calculations.
672
673 As it is a tight loop, it benchmarks as hot cache. That's fine because
674 we care most about hot paths that are probably in cache already.
675
676 An example of the output:
677
678 START
679 first=3672 [COLD CACHED]
680 last=632 first=3672 max=632 min=632 avg=316 std=446 std^2=199712
681 last=278 first=3672 max=632 min=278 avg=303 std=316 std^2=100337
682 last=277 first=3672 max=632 min=277 avg=296 std=258 std^2=67064
683 last=273 first=3672 max=632 min=273 avg=292 std=224 std^2=50411
684 last=273 first=3672 max=632 min=273 avg=288 std=200 std^2=40389
685 last=281 first=3672 max=632 min=273 avg=287 std=183 std^2=33666
686
687
Steven Rostedt5092dbc2009-05-05 22:47:18 -0400688config RING_BUFFER_BENCHMARK
689 tristate "Ring buffer benchmark stress tester"
690 depends on RING_BUFFER
691 help
Randy Dunlap40892362009-12-21 12:01:17 -0800692 This option creates a test to stress the ring buffer and benchmark it.
693 It creates its own ring buffer such that it will not interfere with
Steven Rostedt5092dbc2009-05-05 22:47:18 -0400694 any other users of the ring buffer (such as ftrace). It then creates
695 a producer and consumer that will run for 10 seconds and sleep for
696 10 seconds. Each interval it will print out the number of events
697 it recorded and give a rough estimate of how long each iteration took.
698
699 It does not disable interrupts or raise its priority, so it may be
700 affected by processes that are running.
701
Randy Dunlap40892362009-12-21 12:01:17 -0800702 If unsure, say N.
Steven Rostedt5092dbc2009-05-05 22:47:18 -0400703
Steven Rostedt (Red Hat)6c43e552013-03-15 11:32:53 -0400704config RING_BUFFER_STARTUP_TEST
705 bool "Ring buffer startup self test"
706 depends on RING_BUFFER
707 help
708 Run a simple self test on the ring buffer on boot up. Late in the
709 kernel boot sequence, the test will start that kicks off
710 a thread per cpu. Each thread will write various size events
711 into the ring buffer. Another thread is created to send IPIs
712 to each of the threads, where the IPI handler will also write
713 to the ring buffer, to test/stress the nesting ability.
714 If any anomalies are discovered, a warning will be displayed
715 and all ring buffers will be disabled.
716
717 The test runs for 10 seconds. This will slow your boot time
718 by at least 10 more seconds.
719
720 At the end of the test, statics and more checks are done.
721 It will output the stats of each per cpu buffer. What
722 was written, the sizes, what was read, what was lost, and
723 other similar details.
724
725 If unsure, say N
726
Joel Fernandes (Google)f96e8572018-07-12 14:36:11 -0700727config PREEMPTIRQ_DELAY_TEST
728 tristate "Preempt / IRQ disable delay thread to test latency tracers"
729 depends on m
730 help
731 Select this option to build a test module that can help test latency
732 tracers by executing a preempt or irq disable section with a user
733 configurable delay. The module busy waits for the duration of the
734 critical section.
735
736 For example, the following invocation forces a one-time irq-disabled
737 critical section for 500us:
738 modprobe preemptirq_delay_test test_mode=irq delay=500000
739
740 If unsure, say N
741
Jeremy Linton681bec02017-05-31 16:56:53 -0500742config TRACE_EVAL_MAP_FILE
743 bool "Show eval mappings for trace events"
Steven Rostedt (Red Hat)98284132015-03-31 17:23:45 -0400744 depends on TRACING
745 help
Jeremy Linton681bec02017-05-31 16:56:53 -0500746 The "print fmt" of the trace events will show the enum/sizeof names
747 instead of their values. This can cause problems for user space tools
748 that use this string to parse the raw data as user space does not know
Steven Rostedt (Red Hat)98284132015-03-31 17:23:45 -0400749 how to convert the string to its value.
750
751 To fix this, there's a special macro in the kernel that can be used
Jeremy Linton681bec02017-05-31 16:56:53 -0500752 to convert an enum/sizeof into its value. If this macro is used, then
753 the print fmt strings will be converted to their values.
Steven Rostedt (Red Hat)98284132015-03-31 17:23:45 -0400754
755 If something does not get converted properly, this option can be
Jeremy Linton681bec02017-05-31 16:56:53 -0500756 used to show what enums/sizeof the kernel tried to convert.
Steven Rostedt (Red Hat)98284132015-03-31 17:23:45 -0400757
Jeremy Linton681bec02017-05-31 16:56:53 -0500758 This option is for debugging the conversions. A file is created
759 in the tracing directory called "eval_map" that will show the
Steven Rostedt (Red Hat)98284132015-03-31 17:23:45 -0400760 names matched with their values and what trace event system they
761 belong too.
762
763 Normally, the mapping of the strings to values will be freed after
764 boot up or module load. With this option, they will not be freed, as
Jeremy Linton681bec02017-05-31 16:56:53 -0500765 they are needed for the "eval_map" file. Enabling this option will
Steven Rostedt (Red Hat)98284132015-03-31 17:23:45 -0400766 increase the memory footprint of the running kernel.
767
768 If unsure, say N
769
Tal Shorerddd70282015-08-01 15:27:58 +0300770config TRACING_EVENTS_GPIO
771 bool "Trace gpio events"
772 depends on GPIOLIB
773 default y
774 help
775 Enable tracing events for gpio subsystem
776
Masami Hiramatsu6b7dca42018-08-21 16:27:58 +0900777config GCOV_PROFILE_FTRACE
778 bool "Enable GCOV profiling on ftrace subsystem"
779 depends on GCOV_KERNEL
780 help
781 Enable GCOV profiling on ftrace subsystem for checking
782 which functions/lines are tested.
783
784 If unsure, say N.
785
786 Note that on a kernel compiled with this config, ftrace will
787 run significantly slower.
788
Steven Rostedt4ed9f072009-04-20 10:47:36 -0400789endif # FTRACE
Ingo Molnar40ada302009-03-05 21:19:55 +0100790
791endif # TRACING_SUPPORT
792