1# 2# Architectures that offer an FUNCTION_TRACER implementation should 3# select HAVE_FUNCTION_TRACER: 4# 5 6config NOP_TRACER 7 bool 8 9config HAVE_FUNCTION_TRACER 10 bool 11 12config HAVE_DYNAMIC_FTRACE 13 bool 14 15config HAVE_FTRACE_MCOUNT_RECORD 16 bool 17 18config TRACER_MAX_TRACE 19 bool 20 21config RING_BUFFER 22 bool 23 24config TRACING 25 bool 26 select DEBUG_FS 27 select RING_BUFFER 28 select STACKTRACE if STACKTRACE_SUPPORT 29 select TRACEPOINTS 30 select NOP_TRACER 31 32menu "Tracers" 33 34config FUNCTION_TRACER 35 bool "Kernel Function Tracer" 36 depends on HAVE_FUNCTION_TRACER 37 depends on DEBUG_KERNEL 38 select FRAME_POINTER 39 select TRACING 40 select CONTEXT_SWITCH_TRACER 41 help 42 Enable the kernel to trace every kernel function. This is done 43 by using a compiler feature to insert a small, 5-byte No-Operation 44 instruction to the beginning of every kernel function, which NOP 45 sequence is then dynamically patched into a tracer call when 46 tracing is enabled by the administrator. If it's runtime disabled 47 (the bootup default), then the overhead of the instructions is very 48 small and not measurable even in micro-benchmarks. 49 50config IRQSOFF_TRACER 51 bool "Interrupts-off Latency Tracer" 52 default n 53 depends on TRACE_IRQFLAGS_SUPPORT 54 depends on GENERIC_TIME 55 depends on DEBUG_KERNEL 56 select TRACE_IRQFLAGS 57 select TRACING 58 select TRACER_MAX_TRACE 59 help 60 This option measures the time spent in irqs-off critical 61 sections, with microsecond accuracy. 62 63 The default measurement method is a maximum search, which is 64 disabled by default and can be runtime (re-)started 65 via: 66 67 echo 0 > /debugfs/tracing/tracing_max_latency 68 69 (Note that kernel size and overhead increases with this option 70 enabled. This option and the preempt-off timing option can be 71 used together or separately.) 72 73config PREEMPT_TRACER 74 bool "Preemption-off Latency Tracer" 75 default n 76 depends on GENERIC_TIME 77 depends on PREEMPT 78 depends on DEBUG_KERNEL 79 select TRACING 80 select TRACER_MAX_TRACE 81 help 82 This option measures the time spent in preemption off critical 83 sections, with microsecond accuracy. 84 85 The default measurement method is a maximum search, which is 86 disabled by default and can be runtime (re-)started 87 via: 88 89 echo 0 > /debugfs/tracing/tracing_max_latency 90 91 (Note that kernel size and overhead increases with this option 92 enabled. This option and the irqs-off timing option can be 93 used together or separately.) 94 95config SYSPROF_TRACER 96 bool "Sysprof Tracer" 97 depends on X86 98 select TRACING 99 help 100 This tracer provides the trace needed by the 'Sysprof' userspace 101 tool. 102 103config SCHED_TRACER 104 bool "Scheduling Latency Tracer" 105 depends on DEBUG_KERNEL 106 select TRACING 107 select CONTEXT_SWITCH_TRACER 108 select TRACER_MAX_TRACE 109 help 110 This tracer tracks the latency of the highest priority task 111 to be scheduled in, starting from the point it has woken up. 112 113config CONTEXT_SWITCH_TRACER 114 bool "Trace process context switches" 115 depends on DEBUG_KERNEL 116 select TRACING 117 select MARKERS 118 help 119 This tracer gets called from the context switch and records 120 all switching of tasks. 121 122config BOOT_TRACER 123 bool "Trace boot initcalls" 124 depends on DEBUG_KERNEL 125 select TRACING 126 select CONTEXT_SWITCH_TRACER 127 help 128 This tracer helps developers to optimize boot times: it records 129 the timings of the initcalls and traces key events and the identity 130 of tasks that can cause boot delays, such as context-switches. 131 132 Its aim is to be parsed by the /scripts/bootgraph.pl tool to 133 produce pretty graphics about boot inefficiencies, giving a visual 134 representation of the delays during initcalls - but the raw 135 /debug/tracing/trace text output is readable too. 136 137 ( Note that tracing self tests can't be enabled if this tracer is 138 selected, because the self-tests are an initcall as well and that 139 would invalidate the boot trace. ) 140 141config STACK_TRACER 142 bool "Trace max stack" 143 depends on HAVE_FUNCTION_TRACER 144 depends on DEBUG_KERNEL 145 select FUNCTION_TRACER 146 select STACKTRACE 147 help 148 This special tracer records the maximum stack footprint of the 149 kernel and displays it in debugfs/tracing/stack_trace. 150 151 This tracer works by hooking into every function call that the 152 kernel executes, and keeping a maximum stack depth value and 153 stack-trace saved. Because this logic has to execute in every 154 kernel function, all the time, this option can slow down the 155 kernel measurably and is generally intended for kernel 156 developers only. 157 158 Say N if unsure. 159 160config DYNAMIC_FTRACE 161 bool "enable/disable ftrace tracepoints dynamically" 162 depends on FUNCTION_TRACER 163 depends on HAVE_DYNAMIC_FTRACE 164 depends on DEBUG_KERNEL 165 default y 166 help 167 This option will modify all the calls to ftrace dynamically 168 (will patch them out of the binary image and replaces them 169 with a No-Op instruction) as they are called. A table is 170 created to dynamically enable them again. 171 172 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise 173 has native performance as long as no tracing is active. 174 175 The changes to the code are done by a kernel thread that 176 wakes up once a second and checks to see if any ftrace calls 177 were made. If so, it runs stop_machine (stops all CPUS) 178 and modifies the code to jump over the call to ftrace. 179 180config FTRACE_MCOUNT_RECORD 181 def_bool y 182 depends on DYNAMIC_FTRACE 183 depends on HAVE_FTRACE_MCOUNT_RECORD 184 185config FTRACE_SELFTEST 186 bool 187 188config FTRACE_STARTUP_TEST 189 bool "Perform a startup test on ftrace" 190 depends on TRACING && DEBUG_KERNEL && !BOOT_TRACER 191 select FTRACE_SELFTEST 192 help 193 This option performs a series of startup tests on ftrace. On bootup 194 a series of tests are made to verify that the tracer is 195 functioning properly. It will do tests on all the configured 196 tracers of ftrace. 197 198endmenu 199