xref: /linux/kernel/trace/Kconfig (revision 3d0833953e1b98b79ddf491dd49229eef9baeac1)
116444a8aSArnaldo Carvalho de Melo#
216444a8aSArnaldo Carvalho de Melo# Architectures that offer an FTRACE implementation should select HAVE_FTRACE:
316444a8aSArnaldo Carvalho de Melo#
416444a8aSArnaldo Carvalho de Meloconfig HAVE_FTRACE
516444a8aSArnaldo Carvalho de Melo	bool
6bc0c38d1SSteven Rostedt
7352ad25aSSteven Rostedtconfig TRACER_MAX_TRACE
8352ad25aSSteven Rostedt	bool
9352ad25aSSteven Rostedt
10bc0c38d1SSteven Rostedtconfig TRACING
11bc0c38d1SSteven Rostedt	bool
12bc0c38d1SSteven Rostedt	select DEBUG_FS
13bc0c38d1SSteven Rostedt
141b29b018SSteven Rostedtconfig FTRACE
151b29b018SSteven Rostedt	bool "Kernel Function Tracer"
161b29b018SSteven Rostedt	depends on DEBUG_KERNEL && HAVE_FTRACE
171b29b018SSteven Rostedt	select FRAME_POINTER
181b29b018SSteven Rostedt	select TRACING
1935e8e302SSteven Rostedt	select CONTEXT_SWITCH_TRACER
201b29b018SSteven Rostedt	help
211b29b018SSteven Rostedt	  Enable the kernel to trace every kernel function. This is done
221b29b018SSteven Rostedt	  by using a compiler feature to insert a small, 5-byte No-Operation
231b29b018SSteven Rostedt	  instruction to the beginning of every kernel function, which NOP
241b29b018SSteven Rostedt	  sequence is then dynamically patched into a tracer call when
251b29b018SSteven Rostedt	  tracing is enabled by the administrator. If it's runtime disabled
261b29b018SSteven Rostedt	  (the bootup default), then the overhead of the instructions is very
271b29b018SSteven Rostedt	  small and not measurable even in micro-benchmarks.
2835e8e302SSteven Rostedt
2981d68a96SSteven Rostedtconfig IRQSOFF_TRACER
3081d68a96SSteven Rostedt	bool "Interrupts-off Latency Tracer"
3181d68a96SSteven Rostedt	default n
3281d68a96SSteven Rostedt	depends on TRACE_IRQFLAGS_SUPPORT
3381d68a96SSteven Rostedt	depends on GENERIC_TIME
3481d68a96SSteven Rostedt	select TRACE_IRQFLAGS
3581d68a96SSteven Rostedt	select TRACING
3681d68a96SSteven Rostedt	select TRACER_MAX_TRACE
3781d68a96SSteven Rostedt	help
3881d68a96SSteven Rostedt	  This option measures the time spent in irqs-off critical
3981d68a96SSteven Rostedt	  sections, with microsecond accuracy.
4081d68a96SSteven Rostedt
4181d68a96SSteven Rostedt	  The default measurement method is a maximum search, which is
4281d68a96SSteven Rostedt	  disabled by default and can be runtime (re-)started
4381d68a96SSteven Rostedt	  via:
4481d68a96SSteven Rostedt
4581d68a96SSteven Rostedt	      echo 0 > /debugfs/tracing/tracing_max_latency
4681d68a96SSteven Rostedt
476cd8a4bbSSteven Rostedt	  (Note that kernel size and overhead increases with this option
486cd8a4bbSSteven Rostedt	  enabled. This option and the preempt-off timing option can be
496cd8a4bbSSteven Rostedt	  used together or separately.)
506cd8a4bbSSteven Rostedt
516cd8a4bbSSteven Rostedtconfig PREEMPT_TRACER
526cd8a4bbSSteven Rostedt	bool "Preemption-off Latency Tracer"
536cd8a4bbSSteven Rostedt	default n
546cd8a4bbSSteven Rostedt	depends on GENERIC_TIME
556cd8a4bbSSteven Rostedt	depends on PREEMPT
566cd8a4bbSSteven Rostedt	select TRACING
576cd8a4bbSSteven Rostedt	select TRACER_MAX_TRACE
586cd8a4bbSSteven Rostedt	help
596cd8a4bbSSteven Rostedt	  This option measures the time spent in preemption off critical
606cd8a4bbSSteven Rostedt	  sections, with microsecond accuracy.
616cd8a4bbSSteven Rostedt
626cd8a4bbSSteven Rostedt	  The default measurement method is a maximum search, which is
636cd8a4bbSSteven Rostedt	  disabled by default and can be runtime (re-)started
646cd8a4bbSSteven Rostedt	  via:
656cd8a4bbSSteven Rostedt
666cd8a4bbSSteven Rostedt	      echo 0 > /debugfs/tracing/tracing_max_latency
676cd8a4bbSSteven Rostedt
686cd8a4bbSSteven Rostedt	  (Note that kernel size and overhead increases with this option
696cd8a4bbSSteven Rostedt	  enabled. This option and the irqs-off timing option can be
706cd8a4bbSSteven Rostedt	  used together or separately.)
716cd8a4bbSSteven Rostedt
72352ad25aSSteven Rostedtconfig SCHED_TRACER
73352ad25aSSteven Rostedt	bool "Scheduling Latency Tracer"
74352ad25aSSteven Rostedt	depends on DEBUG_KERNEL
75352ad25aSSteven Rostedt	select TRACING
76352ad25aSSteven Rostedt	select CONTEXT_SWITCH_TRACER
77352ad25aSSteven Rostedt	select TRACER_MAX_TRACE
78352ad25aSSteven Rostedt	help
79352ad25aSSteven Rostedt	  This tracer tracks the latency of the highest priority task
80352ad25aSSteven Rostedt	  to be scheduled in, starting from the point it has woken up.
81352ad25aSSteven Rostedt
8235e8e302SSteven Rostedtconfig CONTEXT_SWITCH_TRACER
8335e8e302SSteven Rostedt	bool "Trace process context switches"
8435e8e302SSteven Rostedt	depends on DEBUG_KERNEL
8535e8e302SSteven Rostedt	select TRACING
8635e8e302SSteven Rostedt	select MARKERS
8735e8e302SSteven Rostedt	help
8835e8e302SSteven Rostedt	  This tracer gets called from the context switch and records
8935e8e302SSteven Rostedt	  all switching of tasks.
9035e8e302SSteven Rostedt
91*3d083395SSteven Rostedtconfig DYNAMIC_FTRACE
92*3d083395SSteven Rostedt	bool "enable/disable ftrace tracepoints dynamically"
93*3d083395SSteven Rostedt	depends on FTRACE
94*3d083395SSteven Rostedt	default y
95*3d083395SSteven Rostedt	help
96*3d083395SSteven Rostedt         This option will modify all the calls to ftrace dynamically
97*3d083395SSteven Rostedt	 (will patch them out of the binary image and replaces them
98*3d083395SSteven Rostedt	 with a No-Op instruction) as they are called. A table is
99*3d083395SSteven Rostedt	 created to dynamically enable them again.
100*3d083395SSteven Rostedt
101*3d083395SSteven Rostedt	 This way a CONFIG_FTRACE kernel is slightly larger, but otherwise
102*3d083395SSteven Rostedt	 has native performance as long as no tracing is active.
103*3d083395SSteven Rostedt
104*3d083395SSteven Rostedt	 The changes to the code are done by a kernel thread that
105*3d083395SSteven Rostedt	 wakes up once a second and checks to see if any ftrace calls
106*3d083395SSteven Rostedt	 were made. If so, it runs stop_machine (stops all CPUS)
107*3d083395SSteven Rostedt	 and modifies the code to jump over the call to ftrace.
108