xref: /linux/kernel/trace/Kconfig (revision 08d43a5fa063e03c860f2f391a30c388bcbc948e)
116444a8aSArnaldo Carvalho de Melo#
2606576ceSSteven Rostedt# Architectures that offer an FUNCTION_TRACER implementation should
3606576ceSSteven Rostedt#  select HAVE_FUNCTION_TRACER:
416444a8aSArnaldo Carvalho de Melo#
52a3a4f66SFrédéric Weisbecker
68d26487fSTörök Edwinconfig USER_STACKTRACE_SUPPORT
78d26487fSTörök Edwin	bool
88d26487fSTörök Edwin
92a3a4f66SFrédéric Weisbeckerconfig NOP_TRACER
102a3a4f66SFrédéric Weisbecker	bool
112a3a4f66SFrédéric Weisbecker
1278d904b4SSteven Rostedtconfig HAVE_FTRACE_NMI_ENTER
1378d904b4SSteven Rostedt	bool
14555f386cSMike Frysinger	help
1540892367SRandy Dunlap	  See Documentation/trace/ftrace-design.txt
1678d904b4SSteven Rostedt
17606576ceSSteven Rostedtconfig HAVE_FUNCTION_TRACER
1816444a8aSArnaldo Carvalho de Melo	bool
19555f386cSMike Frysinger	help
2040892367SRandy Dunlap	  See Documentation/trace/ftrace-design.txt
21bc0c38d1SSteven Rostedt
22fb52607aSFrederic Weisbeckerconfig HAVE_FUNCTION_GRAPH_TRACER
2315e6cb36SFrederic Weisbecker	bool
24555f386cSMike Frysinger	help
2540892367SRandy Dunlap	  See Documentation/trace/ftrace-design.txt
2615e6cb36SFrederic Weisbecker
2771e308a2SSteven Rostedtconfig HAVE_FUNCTION_GRAPH_FP_TEST
2871e308a2SSteven Rostedt	bool
2971e308a2SSteven Rostedt	help
3003688970SMike Frysinger	  See Documentation/trace/ftrace-design.txt
3171e308a2SSteven Rostedt
32677aa9f7SSteven Rostedtconfig HAVE_DYNAMIC_FTRACE
33677aa9f7SSteven Rostedt	bool
34555f386cSMike Frysinger	help
3540892367SRandy Dunlap	  See Documentation/trace/ftrace-design.txt
36677aa9f7SSteven Rostedt
3706aeaaeaSMasami Hiramatsuconfig HAVE_DYNAMIC_FTRACE_WITH_REGS
3806aeaaeaSMasami Hiramatsu	bool
3906aeaaeaSMasami Hiramatsu
408da3821bSSteven Rostedtconfig HAVE_FTRACE_MCOUNT_RECORD
418da3821bSSteven Rostedt	bool
42555f386cSMike Frysinger	help
4340892367SRandy Dunlap	  See Documentation/trace/ftrace-design.txt
448da3821bSSteven Rostedt
4566700001SJosh Stoneconfig HAVE_SYSCALL_TRACEPOINTS
46ee08c6ecSFrederic Weisbecker	bool
47555f386cSMike Frysinger	help
4840892367SRandy Dunlap	  See Documentation/trace/ftrace-design.txt
49ee08c6ecSFrederic Weisbecker
50a2546faeSSteven Rostedtconfig HAVE_FENTRY
51a2546faeSSteven Rostedt	bool
52a2546faeSSteven Rostedt	help
53a2546faeSSteven Rostedt	  Arch supports the gcc options -pg with -mfentry
54a2546faeSSteven Rostedt
55cf4db259SSteven Rostedtconfig HAVE_C_RECORDMCOUNT
5672441cb1SSteven Rostedt	bool
5772441cb1SSteven Rostedt	help
5872441cb1SSteven Rostedt	  C version of recordmcount available?
5972441cb1SSteven Rostedt
60352ad25aSSteven Rostedtconfig TRACER_MAX_TRACE
61352ad25aSSteven Rostedt	bool
62352ad25aSSteven Rostedt
63ea632e9fSJosh Triplettconfig TRACE_CLOCK
64ea632e9fSJosh Triplett	bool
65ea632e9fSJosh Triplett
667a8e76a3SSteven Rostedtconfig RING_BUFFER
677a8e76a3SSteven Rostedt	bool
68ea632e9fSJosh Triplett	select TRACE_CLOCK
6922287688SSteven Rostedt (Red Hat)	select IRQ_WORK
707a8e76a3SSteven Rostedt
7178d904b4SSteven Rostedtconfig FTRACE_NMI_ENTER
7278d904b4SSteven Rostedt       bool
7378d904b4SSteven Rostedt       depends on HAVE_FTRACE_NMI_ENTER
7478d904b4SSteven Rostedt       default y
7578d904b4SSteven Rostedt
765f77a88bSTom Zanussiconfig EVENT_TRACING
77b11c53e1SZhaolei	select CONTEXT_SWITCH_TRACER
78b11c53e1SZhaolei	bool
79b11c53e1SZhaolei
80b11c53e1SZhaoleiconfig CONTEXT_SWITCH_TRACER
815f77a88bSTom Zanussi	bool
825f77a88bSTom Zanussi
8385bac32cSSteven Rostedtconfig RING_BUFFER_ALLOW_SWAP
8485bac32cSSteven Rostedt	bool
8585bac32cSSteven Rostedt	help
8685bac32cSSteven Rostedt	 Allow the use of ring_buffer_swap_cpu.
8785bac32cSSteven Rostedt	 Adds a very slight overhead to tracing when enabled.
8885bac32cSSteven Rostedt
895e0a0939SSteven Rostedt# All tracer options should select GENERIC_TRACER. For those options that are
905e0a0939SSteven Rostedt# enabled by all tracers (context switch and event tracer) they select TRACING.
915e0a0939SSteven Rostedt# This allows those options to appear when no other tracer is selected. But the
925e0a0939SSteven Rostedt# options do not appear when something else selects it. We need the two options
935e0a0939SSteven Rostedt# GENERIC_TRACER and TRACING to avoid circular dependencies to accomplish the
9440892367SRandy Dunlap# hiding of the automatic options.
955e0a0939SSteven Rostedt
96bc0c38d1SSteven Rostedtconfig TRACING
97bc0c38d1SSteven Rostedt	bool
98bc0c38d1SSteven Rostedt	select DEBUG_FS
997a8e76a3SSteven Rostedt	select RING_BUFFER
100c2c80529SAl Viro	select STACKTRACE if STACKTRACE_SUPPORT
1015f87f112SIngo Molnar	select TRACEPOINTS
102f3384b28SSteven Rostedt	select NOP_TRACER
103769b0441SFrederic Weisbecker	select BINARY_PRINTF
1045f77a88bSTom Zanussi	select EVENT_TRACING
105ea632e9fSJosh Triplett	select TRACE_CLOCK
106bc0c38d1SSteven Rostedt
1075e0a0939SSteven Rostedtconfig GENERIC_TRACER
1085e0a0939SSteven Rostedt	bool
1095e0a0939SSteven Rostedt	select TRACING
1105e0a0939SSteven Rostedt
11140ada30fSIngo Molnar#
11240ada30fSIngo Molnar# Minimum requirements an architecture has to meet for us to
11340ada30fSIngo Molnar# be able to offer generic tracing facilities:
11440ada30fSIngo Molnar#
11540ada30fSIngo Molnarconfig TRACING_SUPPORT
11640ada30fSIngo Molnar	bool
11745b95608SAnton Vorontsov	# PPC32 has no irqflags tracing support, but it can use most of the
11845b95608SAnton Vorontsov	# tracers anyway, they were tested to build and work. Note that new
11945b95608SAnton Vorontsov	# exceptions to this list aren't welcomed, better implement the
12045b95608SAnton Vorontsov	# irqflags tracing for your architecture.
12145b95608SAnton Vorontsov	depends on TRACE_IRQFLAGS_SUPPORT || PPC32
12240ada30fSIngo Molnar	depends on STACKTRACE_SUPPORT
123422d3c7aSKOSAKI Motohiro	default y
12440ada30fSIngo Molnar
12540ada30fSIngo Molnarif TRACING_SUPPORT
12640ada30fSIngo Molnar
1274ed9f071SSteven Rostedtmenuconfig FTRACE
1284ed9f071SSteven Rostedt	bool "Tracers"
12965b77242SSteven Rostedt	default y if DEBUG_KERNEL
1304ed9f071SSteven Rostedt	help
1314ed9f071SSteven Rostedt	  Enable the kernel tracing infrastructure.
1324ed9f071SSteven Rostedt
1334ed9f071SSteven Rostedtif FTRACE
13417d80fd0SPeter Zijlstra
135606576ceSSteven Rostedtconfig FUNCTION_TRACER
1361b29b018SSteven Rostedt	bool "Kernel Function Tracer"
137606576ceSSteven Rostedt	depends on HAVE_FUNCTION_TRACER
1384d7a077cSSteven Rostedt	select KALLSYMS
1395e0a0939SSteven Rostedt	select GENERIC_TRACER
14035e8e302SSteven Rostedt	select CONTEXT_SWITCH_TRACER
1411b29b018SSteven Rostedt	help
1421b29b018SSteven Rostedt	  Enable the kernel to trace every kernel function. This is done
1431b29b018SSteven Rostedt	  by using a compiler feature to insert a small, 5-byte No-Operation
14440892367SRandy Dunlap	  instruction at the beginning of every kernel function, which NOP
1451b29b018SSteven Rostedt	  sequence is then dynamically patched into a tracer call when
1461b29b018SSteven Rostedt	  tracing is enabled by the administrator. If it's runtime disabled
1471b29b018SSteven Rostedt	  (the bootup default), then the overhead of the instructions is very
1481b29b018SSteven Rostedt	  small and not measurable even in micro-benchmarks.
14935e8e302SSteven Rostedt
150fb52607aSFrederic Weisbeckerconfig FUNCTION_GRAPH_TRACER
151fb52607aSFrederic Weisbecker	bool "Kernel Function Graph Tracer"
152fb52607aSFrederic Weisbecker	depends on HAVE_FUNCTION_GRAPH_TRACER
15315e6cb36SFrederic Weisbecker	depends on FUNCTION_TRACER
154eb4a0378SSteven Rostedt	depends on !X86_32 || !CC_OPTIMIZE_FOR_SIZE
155764f3b95SIngo Molnar	default y
15615e6cb36SFrederic Weisbecker	help
157fb52607aSFrederic Weisbecker	  Enable the kernel to trace a function at both its return
158fb52607aSFrederic Weisbecker	  and its entry.
159692105b8SMatt LaPlante	  Its first purpose is to trace the duration of functions and
160692105b8SMatt LaPlante	  draw a call graph for each thread with some information like
161692105b8SMatt LaPlante	  the return value. This is done by setting the current return
162692105b8SMatt LaPlante	  address on the current task structure into a stack of calls.
16315e6cb36SFrederic Weisbecker
164bac429f0SSteven Rostedt
16581d68a96SSteven Rostedtconfig IRQSOFF_TRACER
16681d68a96SSteven Rostedt	bool "Interrupts-off Latency Tracer"
16781d68a96SSteven Rostedt	default n
16881d68a96SSteven Rostedt	depends on TRACE_IRQFLAGS_SUPPORT
169592913ecSJohn Stultz	depends on !ARCH_USES_GETTIMEOFFSET
17081d68a96SSteven Rostedt	select TRACE_IRQFLAGS
1715e0a0939SSteven Rostedt	select GENERIC_TRACER
17281d68a96SSteven Rostedt	select TRACER_MAX_TRACE
17385bac32cSSteven Rostedt	select RING_BUFFER_ALLOW_SWAP
17422cffc2bSSteven Rostedt (Red Hat)	select TRACER_SNAPSHOT
1750b85ffc2SSteven Rostedt (Red Hat)	select TRACER_SNAPSHOT_PER_CPU_SWAP
17681d68a96SSteven Rostedt	help
17781d68a96SSteven Rostedt	  This option measures the time spent in irqs-off critical
17881d68a96SSteven Rostedt	  sections, with microsecond accuracy.
17981d68a96SSteven Rostedt
18081d68a96SSteven Rostedt	  The default measurement method is a maximum search, which is
18181d68a96SSteven Rostedt	  disabled by default and can be runtime (re-)started
18281d68a96SSteven Rostedt	  via:
18381d68a96SSteven Rostedt
184156f5a78SGeunSik Lim	      echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
18581d68a96SSteven Rostedt
18640892367SRandy Dunlap	  (Note that kernel size and overhead increase with this option
1876cd8a4bbSSteven Rostedt	  enabled. This option and the preempt-off timing option can be
1886cd8a4bbSSteven Rostedt	  used together or separately.)
1896cd8a4bbSSteven Rostedt
1906cd8a4bbSSteven Rostedtconfig PREEMPT_TRACER
1916cd8a4bbSSteven Rostedt	bool "Preemption-off Latency Tracer"
1926cd8a4bbSSteven Rostedt	default n
193592913ecSJohn Stultz	depends on !ARCH_USES_GETTIMEOFFSET
1946cd8a4bbSSteven Rostedt	depends on PREEMPT
1955e0a0939SSteven Rostedt	select GENERIC_TRACER
1966cd8a4bbSSteven Rostedt	select TRACER_MAX_TRACE
19785bac32cSSteven Rostedt	select RING_BUFFER_ALLOW_SWAP
19822cffc2bSSteven Rostedt (Red Hat)	select TRACER_SNAPSHOT
1990b85ffc2SSteven Rostedt (Red Hat)	select TRACER_SNAPSHOT_PER_CPU_SWAP
2006cd8a4bbSSteven Rostedt	help
20140892367SRandy Dunlap	  This option measures the time spent in preemption-off critical
2026cd8a4bbSSteven Rostedt	  sections, with microsecond accuracy.
2036cd8a4bbSSteven Rostedt
2046cd8a4bbSSteven Rostedt	  The default measurement method is a maximum search, which is
2056cd8a4bbSSteven Rostedt	  disabled by default and can be runtime (re-)started
2066cd8a4bbSSteven Rostedt	  via:
2076cd8a4bbSSteven Rostedt
208156f5a78SGeunSik Lim	      echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
2096cd8a4bbSSteven Rostedt
21040892367SRandy Dunlap	  (Note that kernel size and overhead increase with this option
2116cd8a4bbSSteven Rostedt	  enabled. This option and the irqs-off timing option can be
2126cd8a4bbSSteven Rostedt	  used together or separately.)
2136cd8a4bbSSteven Rostedt
214352ad25aSSteven Rostedtconfig SCHED_TRACER
215352ad25aSSteven Rostedt	bool "Scheduling Latency Tracer"
2165e0a0939SSteven Rostedt	select GENERIC_TRACER
217352ad25aSSteven Rostedt	select CONTEXT_SWITCH_TRACER
218352ad25aSSteven Rostedt	select TRACER_MAX_TRACE
21922cffc2bSSteven Rostedt (Red Hat)	select TRACER_SNAPSHOT
220352ad25aSSteven Rostedt	help
221352ad25aSSteven Rostedt	  This tracer tracks the latency of the highest priority task
222352ad25aSSteven Rostedt	  to be scheduled in, starting from the point it has woken up.
223352ad25aSSteven Rostedt
224897f17a6SSteven Rostedtconfig ENABLE_DEFAULT_TRACERS
225897f17a6SSteven Rostedt	bool "Trace process context switches and events"
2265e0a0939SSteven Rostedt	depends on !GENERIC_TRACER
227b77e38aaSSteven Rostedt	select TRACING
228b77e38aaSSteven Rostedt	help
22940892367SRandy Dunlap	  This tracer hooks to various trace points in the kernel,
230b77e38aaSSteven Rostedt	  allowing the user to pick and choose which trace point they
231897f17a6SSteven Rostedt	  want to trace. It also includes the sched_switch tracer plugin.
232a7abe97fSSteven Rostedt
233ee08c6ecSFrederic Weisbeckerconfig FTRACE_SYSCALLS
234ee08c6ecSFrederic Weisbecker	bool "Trace syscalls"
23566700001SJosh Stone	depends on HAVE_SYSCALL_TRACEPOINTS
2365e0a0939SSteven Rostedt	select GENERIC_TRACER
2370ea1c415SFrederic Weisbecker	select KALLSYMS
238ee08c6ecSFrederic Weisbecker	help
239ee08c6ecSFrederic Weisbecker	  Basic tracer to catch the syscall entry and exit events.
240ee08c6ecSFrederic Weisbecker
241debdd57fSHiraku Toyookaconfig TRACER_SNAPSHOT
242debdd57fSHiraku Toyooka	bool "Create a snapshot trace buffer"
243debdd57fSHiraku Toyooka	select TRACER_MAX_TRACE
244debdd57fSHiraku Toyooka	help
245debdd57fSHiraku Toyooka	  Allow tracing users to take snapshot of the current buffer using the
246debdd57fSHiraku Toyooka	  ftrace interface, e.g.:
247debdd57fSHiraku Toyooka
248debdd57fSHiraku Toyooka	      echo 1 > /sys/kernel/debug/tracing/snapshot
249debdd57fSHiraku Toyooka	      cat snapshot
250debdd57fSHiraku Toyooka
2510b85ffc2SSteven Rostedt (Red Hat)config TRACER_SNAPSHOT_PER_CPU_SWAP
2520b85ffc2SSteven Rostedt (Red Hat)        bool "Allow snapshot to swap per CPU"
2530b85ffc2SSteven Rostedt (Red Hat)	depends on TRACER_SNAPSHOT
2540b85ffc2SSteven Rostedt (Red Hat)	select RING_BUFFER_ALLOW_SWAP
2550b85ffc2SSteven Rostedt (Red Hat)	help
2560b85ffc2SSteven Rostedt (Red Hat)	  Allow doing a snapshot of a single CPU buffer instead of a
2570b85ffc2SSteven Rostedt (Red Hat)	  full swap (all buffers). If this is set, then the following is
2580b85ffc2SSteven Rostedt (Red Hat)	  allowed:
2590b85ffc2SSteven Rostedt (Red Hat)
2600b85ffc2SSteven Rostedt (Red Hat)	      echo 1 > /sys/kernel/debug/tracing/per_cpu/cpu2/snapshot
2610b85ffc2SSteven Rostedt (Red Hat)
2620b85ffc2SSteven Rostedt (Red Hat)	  After which, only the tracing buffer for CPU 2 was swapped with
2630b85ffc2SSteven Rostedt (Red Hat)	  the main tracing buffer, and the other CPU buffers remain the same.
2640b85ffc2SSteven Rostedt (Red Hat)
2650b85ffc2SSteven Rostedt (Red Hat)	  When this is enabled, this adds a little more overhead to the
2660b85ffc2SSteven Rostedt (Red Hat)	  trace recording, as it needs to add some checks to synchronize
2670b85ffc2SSteven Rostedt (Red Hat)	  recording with swaps. But this does not affect the performance
2680b85ffc2SSteven Rostedt (Red Hat)	  of the overall system. This is enabled by default when the preempt
2690b85ffc2SSteven Rostedt (Red Hat)	  or irq latency tracers are enabled, as those need to swap as well
2700b85ffc2SSteven Rostedt (Red Hat)	  and already adds the overhead (plus a lot more).
2710b85ffc2SSteven Rostedt (Red Hat)
2722ed84eebSSteven Rostedtconfig TRACE_BRANCH_PROFILING
2739ae5b879SSteven Rostedt	bool
2745e0a0939SSteven Rostedt	select GENERIC_TRACER
2759ae5b879SSteven Rostedt
2769ae5b879SSteven Rostedtchoice
2779ae5b879SSteven Rostedt	prompt "Branch Profiling"
2789ae5b879SSteven Rostedt	default BRANCH_PROFILE_NONE
2799ae5b879SSteven Rostedt	help
2809ae5b879SSteven Rostedt	 The branch profiling is a software profiler. It will add hooks
2819ae5b879SSteven Rostedt	 into the C conditionals to test which path a branch takes.
2829ae5b879SSteven Rostedt
2839ae5b879SSteven Rostedt	 The likely/unlikely profiler only looks at the conditions that
2849ae5b879SSteven Rostedt	 are annotated with a likely or unlikely macro.
2859ae5b879SSteven Rostedt
28640892367SRandy Dunlap	 The "all branch" profiler will profile every if-statement in the
2879ae5b879SSteven Rostedt	 kernel. This profiler will also enable the likely/unlikely
28840892367SRandy Dunlap	 profiler.
2899ae5b879SSteven Rostedt
29040892367SRandy Dunlap	 Either of the above profilers adds a bit of overhead to the system.
29140892367SRandy Dunlap	 If unsure, choose "No branch profiling".
2929ae5b879SSteven Rostedt
2939ae5b879SSteven Rostedtconfig BRANCH_PROFILE_NONE
2949ae5b879SSteven Rostedt	bool "No branch profiling"
2959ae5b879SSteven Rostedt	help
2969ae5b879SSteven Rostedt	  No branch profiling. Branch profiling adds a bit of overhead.
2979ae5b879SSteven Rostedt	  Only enable it if you want to analyse the branching behavior.
2989ae5b879SSteven Rostedt	  Otherwise keep it disabled.
2999ae5b879SSteven Rostedt
3009ae5b879SSteven Rostedtconfig PROFILE_ANNOTATED_BRANCHES
3019ae5b879SSteven Rostedt	bool "Trace likely/unlikely profiler"
3029ae5b879SSteven Rostedt	select TRACE_BRANCH_PROFILING
3031f0d69a9SSteven Rostedt	help
30459bf8964SMasanari Iida	  This tracer profiles all likely and unlikely macros
3051f0d69a9SSteven Rostedt	  in the kernel. It will display the results in:
3061f0d69a9SSteven Rostedt
30713e5befaSDavid Rientjes	  /sys/kernel/debug/tracing/trace_stat/branch_annotated
3081f0d69a9SSteven Rostedt
30940892367SRandy Dunlap	  Note: this will add a significant overhead; only turn this
3101f0d69a9SSteven Rostedt	  on if you need to profile the system's use of these macros.
3111f0d69a9SSteven Rostedt
3122bcd521aSSteven Rostedtconfig PROFILE_ALL_BRANCHES
3132bcd521aSSteven Rostedt	bool "Profile all if conditionals"
3149ae5b879SSteven Rostedt	select TRACE_BRANCH_PROFILING
3152bcd521aSSteven Rostedt	help
3162bcd521aSSteven Rostedt	  This tracer profiles all branch conditions. Every if ()
3172bcd521aSSteven Rostedt	  taken in the kernel is recorded whether it hit or miss.
3182bcd521aSSteven Rostedt	  The results will be displayed in:
3192bcd521aSSteven Rostedt
32013e5befaSDavid Rientjes	  /sys/kernel/debug/tracing/trace_stat/branch_all
3212bcd521aSSteven Rostedt
3229ae5b879SSteven Rostedt	  This option also enables the likely/unlikely profiler.
3239ae5b879SSteven Rostedt
3242bcd521aSSteven Rostedt	  This configuration, when enabled, will impose a great overhead
3252bcd521aSSteven Rostedt	  on the system. This should only be enabled when the system
32640892367SRandy Dunlap	  is to be analyzed in much detail.
3279ae5b879SSteven Rostedtendchoice
3282bcd521aSSteven Rostedt
3292ed84eebSSteven Rostedtconfig TRACING_BRANCHES
33052f232cbSSteven Rostedt	bool
33152f232cbSSteven Rostedt	help
33252f232cbSSteven Rostedt	  Selected by tracers that will trace the likely and unlikely
33352f232cbSSteven Rostedt	  conditions. This prevents the tracers themselves from being
33452f232cbSSteven Rostedt	  profiled. Profiling the tracing infrastructure can only happen
33552f232cbSSteven Rostedt	  when the likelys and unlikelys are not being traced.
33652f232cbSSteven Rostedt
3372ed84eebSSteven Rostedtconfig BRANCH_TRACER
33852f232cbSSteven Rostedt	bool "Trace likely/unlikely instances"
3392ed84eebSSteven Rostedt	depends on TRACE_BRANCH_PROFILING
3402ed84eebSSteven Rostedt	select TRACING_BRANCHES
34152f232cbSSteven Rostedt	help
34252f232cbSSteven Rostedt	  This traces the events of likely and unlikely condition
34352f232cbSSteven Rostedt	  calls in the kernel.  The difference between this and the
34452f232cbSSteven Rostedt	  "Trace likely/unlikely profiler" is that this is not a
34552f232cbSSteven Rostedt	  histogram of the callers, but actually places the calling
34652f232cbSSteven Rostedt	  events into a running trace buffer to see when and where the
34752f232cbSSteven Rostedt	  events happened, as well as their results.
34852f232cbSSteven Rostedt
34952f232cbSSteven Rostedt	  Say N if unsure.
35052f232cbSSteven Rostedt
351e5a81b62SSteven Rostedtconfig STACK_TRACER
352e5a81b62SSteven Rostedt	bool "Trace max stack"
353606576ceSSteven Rostedt	depends on HAVE_FUNCTION_TRACER
354606576ceSSteven Rostedt	select FUNCTION_TRACER
355e5a81b62SSteven Rostedt	select STACKTRACE
3564d7a077cSSteven Rostedt	select KALLSYMS
357e5a81b62SSteven Rostedt	help
3584519d9e5SIngo Molnar	  This special tracer records the maximum stack footprint of the
359156f5a78SGeunSik Lim	  kernel and displays it in /sys/kernel/debug/tracing/stack_trace.
3604519d9e5SIngo Molnar
3614519d9e5SIngo Molnar	  This tracer works by hooking into every function call that the
3624519d9e5SIngo Molnar	  kernel executes, and keeping a maximum stack depth value and
363f38f1d2aSSteven Rostedt	  stack-trace saved.  If this is configured with DYNAMIC_FTRACE
364f38f1d2aSSteven Rostedt	  then it will not have any overhead while the stack tracer
365f38f1d2aSSteven Rostedt	  is disabled.
366f38f1d2aSSteven Rostedt
367f38f1d2aSSteven Rostedt	  To enable the stack tracer on bootup, pass in 'stacktrace'
368f38f1d2aSSteven Rostedt	  on the kernel command line.
369f38f1d2aSSteven Rostedt
370f38f1d2aSSteven Rostedt	  The stack tracer can also be enabled or disabled via the
371f38f1d2aSSteven Rostedt	  sysctl kernel.stack_tracer_enabled
3724519d9e5SIngo Molnar
3734519d9e5SIngo Molnar	  Say N if unsure.
374e5a81b62SSteven Rostedt
3752db270a8SFrederic Weisbeckerconfig BLK_DEV_IO_TRACE
37640892367SRandy Dunlap	bool "Support for tracing block IO actions"
3772db270a8SFrederic Weisbecker	depends on SYSFS
3781dfba05dSIngo Molnar	depends on BLOCK
3792db270a8SFrederic Weisbecker	select RELAY
3802db270a8SFrederic Weisbecker	select DEBUG_FS
3812db270a8SFrederic Weisbecker	select TRACEPOINTS
3825e0a0939SSteven Rostedt	select GENERIC_TRACER
3832db270a8SFrederic Weisbecker	select STACKTRACE
3842db270a8SFrederic Weisbecker	help
3852db270a8SFrederic Weisbecker	  Say Y here if you want to be able to trace the block layer actions
3862db270a8SFrederic Weisbecker	  on a given queue. Tracing allows you to see any traffic happening
3872db270a8SFrederic Weisbecker	  on a block device queue. For more information (and the userspace
3882db270a8SFrederic Weisbecker	  support tools needed), fetch the blktrace tools from:
3892db270a8SFrederic Weisbecker
3902db270a8SFrederic Weisbecker	  git://git.kernel.dk/blktrace.git
3912db270a8SFrederic Weisbecker
3922db270a8SFrederic Weisbecker	  Tracing also is possible using the ftrace interface, e.g.:
3932db270a8SFrederic Weisbecker
3942db270a8SFrederic Weisbecker	    echo 1 > /sys/block/sda/sda1/trace/enable
3952db270a8SFrederic Weisbecker	    echo blk > /sys/kernel/debug/tracing/current_tracer
3962db270a8SFrederic Weisbecker	    cat /sys/kernel/debug/tracing/trace_pipe
3972db270a8SFrederic Weisbecker
3982db270a8SFrederic Weisbecker	  If unsure, say N.
39936994e58SFrederic Weisbecker
40077b44d1bSMasami Hiramatsuconfig KPROBE_EVENT
401413d37d1SMasami Hiramatsu	depends on KPROBES
402f850c30cSHeiko Carstens	depends on HAVE_REGS_AND_STACK_ACCESS_API
40377b44d1bSMasami Hiramatsu	bool "Enable kprobes-based dynamic events"
404413d37d1SMasami Hiramatsu	select TRACING
4058ab83f56SSrikar Dronamraju	select PROBE_EVENTS
40677b44d1bSMasami Hiramatsu	default y
407413d37d1SMasami Hiramatsu	help
40840892367SRandy Dunlap	  This allows the user to add tracing events (similar to tracepoints)
40940892367SRandy Dunlap	  on the fly via the ftrace interface. See
41040892367SRandy Dunlap	  Documentation/trace/kprobetrace.txt for more details.
41177b44d1bSMasami Hiramatsu
41277b44d1bSMasami Hiramatsu	  Those events can be inserted wherever kprobes can probe, and record
41377b44d1bSMasami Hiramatsu	  various register and memory values.
41477b44d1bSMasami Hiramatsu
41540892367SRandy Dunlap	  This option is also required by perf-probe subcommand of perf tools.
41640892367SRandy Dunlap	  If you want to use perf tools, this option is strongly recommended.
417413d37d1SMasami Hiramatsu
418f3f096cfSSrikar Dronamrajuconfig UPROBE_EVENT
419f3f096cfSSrikar Dronamraju	bool "Enable uprobes-based dynamic events"
420f3f096cfSSrikar Dronamraju	depends on ARCH_SUPPORTS_UPROBES
421f3f096cfSSrikar Dronamraju	depends on MMU
42209294e31SDavid A. Long	depends on PERF_EVENTS
423f3f096cfSSrikar Dronamraju	select UPROBES
424f3f096cfSSrikar Dronamraju	select PROBE_EVENTS
425f3f096cfSSrikar Dronamraju	select TRACING
426f3f096cfSSrikar Dronamraju	default n
427f3f096cfSSrikar Dronamraju	help
428f3f096cfSSrikar Dronamraju	  This allows the user to add tracing events on top of userspace
429f3f096cfSSrikar Dronamraju	  dynamic events (similar to tracepoints) on the fly via the trace
430f3f096cfSSrikar Dronamraju	  events interface. Those events can be inserted wherever uprobes
431f3f096cfSSrikar Dronamraju	  can probe, and record various registers.
432f3f096cfSSrikar Dronamraju	  This option is required if you plan to use perf-probe subcommand
433f3f096cfSSrikar Dronamraju	  of perf tools on user space applications.
434f3f096cfSSrikar Dronamraju
435e1abf2ccSIngo Molnarconfig BPF_EVENTS
436e1abf2ccSIngo Molnar	depends on BPF_SYSCALL
437a31d82d8SSteven Rostedt	depends on (KPROBE_EVENT || UPROBE_EVENT) && PERF_EVENTS
438e1abf2ccSIngo Molnar	bool
439e1abf2ccSIngo Molnar	default y
440e1abf2ccSIngo Molnar	help
441e1abf2ccSIngo Molnar	  This allows the user to attach BPF programs to kprobe events.
442e1abf2ccSIngo Molnar
4438ab83f56SSrikar Dronamrajuconfig PROBE_EVENTS
4448ab83f56SSrikar Dronamraju	def_bool n
4458ab83f56SSrikar Dronamraju
4463d083395SSteven Rostedtconfig DYNAMIC_FTRACE
447db05021dSSteven Rostedt	bool "enable/disable function tracing dynamically"
448606576ceSSteven Rostedt	depends on FUNCTION_TRACER
449677aa9f7SSteven Rostedt	depends on HAVE_DYNAMIC_FTRACE
4503d083395SSteven Rostedt	default y
4513d083395SSteven Rostedt	help
452db05021dSSteven Rostedt	  This option will modify all the calls to function tracing
453db05021dSSteven Rostedt	  dynamically (will patch them out of the binary image and
454db05021dSSteven Rostedt	  replace them with a No-Op instruction) on boot up. During
455db05021dSSteven Rostedt	  compile time, a table is made of all the locations that ftrace
456db05021dSSteven Rostedt	  can function trace, and this table is linked into the kernel
457db05021dSSteven Rostedt	  image. When this is enabled, functions can be individually
458db05021dSSteven Rostedt	  enabled, and the functions not enabled will not affect
459db05021dSSteven Rostedt	  performance of the system.
460db05021dSSteven Rostedt
461db05021dSSteven Rostedt	  See the files in /sys/kernel/debug/tracing:
462db05021dSSteven Rostedt	    available_filter_functions
463db05021dSSteven Rostedt	    set_ftrace_filter
464db05021dSSteven Rostedt	    set_ftrace_notrace
4653d083395SSteven Rostedt
46640892367SRandy Dunlap	  This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but
46740892367SRandy Dunlap	  otherwise has native performance as long as no tracing is active.
4683d083395SSteven Rostedt
46906aeaaeaSMasami Hiramatsuconfig DYNAMIC_FTRACE_WITH_REGS
47006aeaaeaSMasami Hiramatsu	def_bool y
47106aeaaeaSMasami Hiramatsu	depends on DYNAMIC_FTRACE
47206aeaaeaSMasami Hiramatsu	depends on HAVE_DYNAMIC_FTRACE_WITH_REGS
47306aeaaeaSMasami Hiramatsu
474bac429f0SSteven Rostedtconfig FUNCTION_PROFILER
475bac429f0SSteven Rostedt	bool "Kernel function profiler"
476493762fcSSteven Rostedt	depends on FUNCTION_TRACER
477bac429f0SSteven Rostedt	default n
478bac429f0SSteven Rostedt	help
479493762fcSSteven Rostedt	  This option enables the kernel function profiler. A file is created
480493762fcSSteven Rostedt	  in debugfs called function_profile_enabled which defaults to zero.
481bac429f0SSteven Rostedt	  When a 1 is echoed into this file profiling begins, and when a
48240892367SRandy Dunlap	  zero is entered, profiling stops. A "functions" file is created in
48340892367SRandy Dunlap	  the trace_stats directory; this file shows the list of functions that
484bac429f0SSteven Rostedt	  have been hit and their counters.
485bac429f0SSteven Rostedt
48640892367SRandy Dunlap	  If in doubt, say N.
487bac429f0SSteven Rostedt
4888da3821bSSteven Rostedtconfig FTRACE_MCOUNT_RECORD
4898da3821bSSteven Rostedt	def_bool y
4908da3821bSSteven Rostedt	depends on DYNAMIC_FTRACE
4918da3821bSSteven Rostedt	depends on HAVE_FTRACE_MCOUNT_RECORD
4928da3821bSSteven Rostedt
49360a11774SSteven Rostedtconfig FTRACE_SELFTEST
49460a11774SSteven Rostedt	bool
49560a11774SSteven Rostedt
49660a11774SSteven Rostedtconfig FTRACE_STARTUP_TEST
49760a11774SSteven Rostedt	bool "Perform a startup test on ftrace"
4985e0a0939SSteven Rostedt	depends on GENERIC_TRACER
49960a11774SSteven Rostedt	select FTRACE_SELFTEST
50060a11774SSteven Rostedt	help
50160a11774SSteven Rostedt	  This option performs a series of startup tests on ftrace. On bootup
50260a11774SSteven Rostedt	  a series of tests are made to verify that the tracer is
50360a11774SSteven Rostedt	  functioning properly. It will do tests on all the configured
50460a11774SSteven Rostedt	  tracers of ftrace.
50517d80fd0SPeter Zijlstra
5061f5a6b45SSteven Rostedtconfig EVENT_TRACE_TEST_SYSCALLS
5071f5a6b45SSteven Rostedt	bool "Run selftest on syscall events"
5081f5a6b45SSteven Rostedt	depends on FTRACE_STARTUP_TEST
5091f5a6b45SSteven Rostedt	help
5101f5a6b45SSteven Rostedt	 This option will also enable testing every syscall event.
5111f5a6b45SSteven Rostedt	 It only enables the event and disables it and runs various loads
5121f5a6b45SSteven Rostedt	 with the event enabled. This adds a bit more time for kernel boot
5131f5a6b45SSteven Rostedt	 up since it runs this on every system call defined.
5141f5a6b45SSteven Rostedt
5151f5a6b45SSteven Rostedt	 TBD - enable a way to actually call the syscalls as we test their
5161f5a6b45SSteven Rostedt	       events
5171f5a6b45SSteven Rostedt
518fe6f90e5SPekka Paalanenconfig MMIOTRACE
519fe6f90e5SPekka Paalanen	bool "Memory mapped IO tracing"
52040ada30fSIngo Molnar	depends on HAVE_MMIOTRACE_SUPPORT && PCI
5215e0a0939SSteven Rostedt	select GENERIC_TRACER
522fe6f90e5SPekka Paalanen	help
523fe6f90e5SPekka Paalanen	  Mmiotrace traces Memory Mapped I/O access and is meant for
524fe6f90e5SPekka Paalanen	  debugging and reverse engineering. It is called from the ioremap
525fe6f90e5SPekka Paalanen	  implementation and works via page faults. Tracing is disabled by
526fe6f90e5SPekka Paalanen	  default and can be enabled at run-time.
527fe6f90e5SPekka Paalanen
5284d1f4372SLi Zefan	  See Documentation/trace/mmiotrace.txt.
529fe6f90e5SPekka Paalanen	  If you are not helping to develop drivers, say N.
530fe6f90e5SPekka Paalanen
531*08d43a5fSTom Zanussiconfig TRACING_MAP
532*08d43a5fSTom Zanussi	bool
533*08d43a5fSTom Zanussi	depends on ARCH_HAVE_NMI_SAFE_CMPXCHG
534*08d43a5fSTom Zanussi	default n
535*08d43a5fSTom Zanussi	help
536*08d43a5fSTom Zanussi	  tracing_map is a special-purpose lock-free map for tracing,
537*08d43a5fSTom Zanussi	  separated out as a stand-alone facility in order to allow it
538*08d43a5fSTom Zanussi	  to be shared between multiple tracers.  It isn't meant to be
539*08d43a5fSTom Zanussi	  generally used outside of that context, and is normally
540*08d43a5fSTom Zanussi	  selected by tracers that use it.
541*08d43a5fSTom Zanussi
542*08d43a5fSTom Zanussi	  If in doubt, say N.
543*08d43a5fSTom Zanussi
544fe6f90e5SPekka Paalanenconfig MMIOTRACE_TEST
545fe6f90e5SPekka Paalanen	tristate "Test module for mmiotrace"
546fe6f90e5SPekka Paalanen	depends on MMIOTRACE && m
547fe6f90e5SPekka Paalanen	help
548fe6f90e5SPekka Paalanen	  This is a dumb module for testing mmiotrace. It is very dangerous
549fe6f90e5SPekka Paalanen	  as it will write garbage to IO memory starting at a given address.
550fe6f90e5SPekka Paalanen	  However, it should be safe to use on e.g. unused portion of VRAM.
551fe6f90e5SPekka Paalanen
552fe6f90e5SPekka Paalanen	  Say N, unless you absolutely know what you are doing.
553fe6f90e5SPekka Paalanen
55481dc9f0eSSteven Rostedt (Red Hat)config TRACEPOINT_BENCHMARK
55581dc9f0eSSteven Rostedt (Red Hat)        bool "Add tracepoint that benchmarks tracepoints"
55681dc9f0eSSteven Rostedt (Red Hat)	help
55781dc9f0eSSteven Rostedt (Red Hat)	 This option creates the tracepoint "benchmark:benchmark_event".
55881dc9f0eSSteven Rostedt (Red Hat)	 When the tracepoint is enabled, it kicks off a kernel thread that
55981dc9f0eSSteven Rostedt (Red Hat)	 goes into an infinite loop (calling cond_sched() to let other tasks
56081dc9f0eSSteven Rostedt (Red Hat)	 run), and calls the tracepoint. Each iteration will record the time
56181dc9f0eSSteven Rostedt (Red Hat)	 it took to write to the tracepoint and the next iteration that
56281dc9f0eSSteven Rostedt (Red Hat)	 data will be passed to the tracepoint itself. That is, the tracepoint
56381dc9f0eSSteven Rostedt (Red Hat)	 will report the time it took to do the previous tracepoint.
56481dc9f0eSSteven Rostedt (Red Hat)	 The string written to the tracepoint is a static string of 128 bytes
56581dc9f0eSSteven Rostedt (Red Hat)	 to keep the time the same. The initial string is simply a write of
56681dc9f0eSSteven Rostedt (Red Hat)	 "START". The second string records the cold cache time of the first
56781dc9f0eSSteven Rostedt (Red Hat)	 write which is not added to the rest of the calculations.
56881dc9f0eSSteven Rostedt (Red Hat)
56981dc9f0eSSteven Rostedt (Red Hat)	 As it is a tight loop, it benchmarks as hot cache. That's fine because
57081dc9f0eSSteven Rostedt (Red Hat)	 we care most about hot paths that are probably in cache already.
57181dc9f0eSSteven Rostedt (Red Hat)
57281dc9f0eSSteven Rostedt (Red Hat)	 An example of the output:
57381dc9f0eSSteven Rostedt (Red Hat)
57481dc9f0eSSteven Rostedt (Red Hat)	      START
57581dc9f0eSSteven Rostedt (Red Hat)	      first=3672 [COLD CACHED]
57681dc9f0eSSteven Rostedt (Red Hat)	      last=632 first=3672 max=632 min=632 avg=316 std=446 std^2=199712
57781dc9f0eSSteven Rostedt (Red Hat)	      last=278 first=3672 max=632 min=278 avg=303 std=316 std^2=100337
57881dc9f0eSSteven Rostedt (Red Hat)	      last=277 first=3672 max=632 min=277 avg=296 std=258 std^2=67064
57981dc9f0eSSteven Rostedt (Red Hat)	      last=273 first=3672 max=632 min=273 avg=292 std=224 std^2=50411
58081dc9f0eSSteven Rostedt (Red Hat)	      last=273 first=3672 max=632 min=273 avg=288 std=200 std^2=40389
58181dc9f0eSSteven Rostedt (Red Hat)	      last=281 first=3672 max=632 min=273 avg=287 std=183 std^2=33666
58281dc9f0eSSteven Rostedt (Red Hat)
58381dc9f0eSSteven Rostedt (Red Hat)
5845092dbc9SSteven Rostedtconfig RING_BUFFER_BENCHMARK
5855092dbc9SSteven Rostedt	tristate "Ring buffer benchmark stress tester"
5865092dbc9SSteven Rostedt	depends on RING_BUFFER
5875092dbc9SSteven Rostedt	help
5885092dbc9SSteven Rostedt	  This option creates a test to stress the ring buffer and benchmark it.
58940892367SRandy Dunlap	  It creates its own ring buffer such that it will not interfere with
5905092dbc9SSteven Rostedt	  any other users of the ring buffer (such as ftrace). It then creates
5915092dbc9SSteven Rostedt	  a producer and consumer that will run for 10 seconds and sleep for
5925092dbc9SSteven Rostedt	  10 seconds. Each interval it will print out the number of events
5935092dbc9SSteven Rostedt	  it recorded and give a rough estimate of how long each iteration took.
5945092dbc9SSteven Rostedt
5955092dbc9SSteven Rostedt	  It does not disable interrupts or raise its priority, so it may be
5965092dbc9SSteven Rostedt	  affected by processes that are running.
5975092dbc9SSteven Rostedt
59840892367SRandy Dunlap	  If unsure, say N.
5995092dbc9SSteven Rostedt
6006c43e554SSteven Rostedt (Red Hat)config RING_BUFFER_STARTUP_TEST
6016c43e554SSteven Rostedt (Red Hat)       bool "Ring buffer startup self test"
6026c43e554SSteven Rostedt (Red Hat)       depends on RING_BUFFER
6036c43e554SSteven Rostedt (Red Hat)       help
6046c43e554SSteven Rostedt (Red Hat)         Run a simple self test on the ring buffer on boot up. Late in the
6056c43e554SSteven Rostedt (Red Hat)	 kernel boot sequence, the test will start that kicks off
6066c43e554SSteven Rostedt (Red Hat)	 a thread per cpu. Each thread will write various size events
6076c43e554SSteven Rostedt (Red Hat)	 into the ring buffer. Another thread is created to send IPIs
6086c43e554SSteven Rostedt (Red Hat)	 to each of the threads, where the IPI handler will also write
6096c43e554SSteven Rostedt (Red Hat)	 to the ring buffer, to test/stress the nesting ability.
6106c43e554SSteven Rostedt (Red Hat)	 If any anomalies are discovered, a warning will be displayed
6116c43e554SSteven Rostedt (Red Hat)	 and all ring buffers will be disabled.
6126c43e554SSteven Rostedt (Red Hat)
6136c43e554SSteven Rostedt (Red Hat)	 The test runs for 10 seconds. This will slow your boot time
6146c43e554SSteven Rostedt (Red Hat)	 by at least 10 more seconds.
6156c43e554SSteven Rostedt (Red Hat)
6166c43e554SSteven Rostedt (Red Hat)	 At the end of the test, statics and more checks are done.
6176c43e554SSteven Rostedt (Red Hat)	 It will output the stats of each per cpu buffer. What
6186c43e554SSteven Rostedt (Red Hat)	 was written, the sizes, what was read, what was lost, and
6196c43e554SSteven Rostedt (Red Hat)	 other similar details.
6206c43e554SSteven Rostedt (Red Hat)
6216c43e554SSteven Rostedt (Red Hat)	 If unsure, say N
6226c43e554SSteven Rostedt (Red Hat)
6239828413dSSteven Rostedt (Red Hat)config TRACE_ENUM_MAP_FILE
6249828413dSSteven Rostedt (Red Hat)       bool "Show enum mappings for trace events"
6259828413dSSteven Rostedt (Red Hat)       depends on TRACING
6269828413dSSteven Rostedt (Red Hat)       help
6279828413dSSteven Rostedt (Red Hat)        The "print fmt" of the trace events will show the enum names instead
6289828413dSSteven Rostedt (Red Hat)	of their values. This can cause problems for user space tools that
6299828413dSSteven Rostedt (Red Hat)	use this string to parse the raw data as user space does not know
6309828413dSSteven Rostedt (Red Hat)	how to convert the string to its value.
6319828413dSSteven Rostedt (Red Hat)
6329828413dSSteven Rostedt (Red Hat)	To fix this, there's a special macro in the kernel that can be used
6339828413dSSteven Rostedt (Red Hat)	to convert the enum into its value. If this macro is used, then the
6349828413dSSteven Rostedt (Red Hat)	print fmt strings will have the enums converted to their values.
6359828413dSSteven Rostedt (Red Hat)
6369828413dSSteven Rostedt (Red Hat)	If something does not get converted properly, this option can be
6379828413dSSteven Rostedt (Red Hat)	used to show what enums the kernel tried to convert.
6389828413dSSteven Rostedt (Red Hat)
6399828413dSSteven Rostedt (Red Hat)	This option is for debugging the enum conversions. A file is created
6409828413dSSteven Rostedt (Red Hat)	in the tracing directory called "enum_map" that will show the enum
6419828413dSSteven Rostedt (Red Hat)	names matched with their values and what trace event system they
6429828413dSSteven Rostedt (Red Hat)	belong too.
6439828413dSSteven Rostedt (Red Hat)
6449828413dSSteven Rostedt (Red Hat)	Normally, the mapping of the strings to values will be freed after
6459828413dSSteven Rostedt (Red Hat)	boot up or module load. With this option, they will not be freed, as
6469828413dSSteven Rostedt (Red Hat)	they are needed for the "enum_map" file. Enabling this option will
6479828413dSSteven Rostedt (Red Hat)	increase the memory footprint of the running kernel.
6489828413dSSteven Rostedt (Red Hat)
6499828413dSSteven Rostedt (Red Hat)	If unsure, say N
6509828413dSSteven Rostedt (Red Hat)
651ddd70280STal Shorerconfig TRACING_EVENTS_GPIO
652ddd70280STal Shorer	bool "Trace gpio events"
653ddd70280STal Shorer	depends on GPIOLIB
654ddd70280STal Shorer	default y
655ddd70280STal Shorer	help
656ddd70280STal Shorer	  Enable tracing events for gpio subsystem
657ddd70280STal Shorer
6584ed9f071SSteven Rostedtendif # FTRACE
65940ada30fSIngo Molnar
66040ada30fSIngo Molnarendif # TRACING_SUPPORT
66140ada30fSIngo Molnar
662