1# 2# Architectures that offer an FUNCTION_TRACER implementation should 3# select HAVE_FUNCTION_TRACER: 4# 5 6config USER_STACKTRACE_SUPPORT 7 bool 8 9config NOP_TRACER 10 bool 11 12config HAVE_FUNCTION_TRACER 13 bool 14 15config HAVE_FUNCTION_GRAPH_TRACER 16 bool 17 18config HAVE_FUNCTION_TRACE_MCOUNT_TEST 19 bool 20 help 21 This gets selected when the arch tests the function_trace_stop 22 variable at the mcount call site. Otherwise, this variable 23 is tested by the called function. 24 25config HAVE_DYNAMIC_FTRACE 26 bool 27 28config HAVE_FTRACE_MCOUNT_RECORD 29 bool 30 31config HAVE_HW_BRANCH_TRACER 32 bool 33 34config TRACER_MAX_TRACE 35 bool 36 37config RING_BUFFER 38 bool 39 40config TRACING 41 bool 42 select DEBUG_FS 43 select RING_BUFFER 44 select STACKTRACE if STACKTRACE_SUPPORT 45 select TRACEPOINTS 46 select NOP_TRACER 47 48menu "Tracers" 49 50config FUNCTION_TRACER 51 bool "Kernel Function Tracer" 52 depends on HAVE_FUNCTION_TRACER 53 depends on DEBUG_KERNEL 54 select FRAME_POINTER 55 select KALLSYMS 56 select TRACING 57 select CONTEXT_SWITCH_TRACER 58 help 59 Enable the kernel to trace every kernel function. This is done 60 by using a compiler feature to insert a small, 5-byte No-Operation 61 instruction to the beginning of every kernel function, which NOP 62 sequence is then dynamically patched into a tracer call when 63 tracing is enabled by the administrator. If it's runtime disabled 64 (the bootup default), then the overhead of the instructions is very 65 small and not measurable even in micro-benchmarks. 66 67config FUNCTION_GRAPH_TRACER 68 bool "Kernel Function Graph Tracer" 69 depends on HAVE_FUNCTION_GRAPH_TRACER 70 depends on FUNCTION_TRACER 71 default y 72 help 73 Enable the kernel to trace a function at both its return 74 and its entry. 75 It's first purpose is to trace the duration of functions and 76 draw a call graph for each thread with some informations like 77 the return value. 78 This is done by setting the current return address on the current 79 task structure into a stack of calls. 80 81config IRQSOFF_TRACER 82 bool "Interrupts-off Latency Tracer" 83 default n 84 depends on TRACE_IRQFLAGS_SUPPORT 85 depends on GENERIC_TIME 86 depends on DEBUG_KERNEL 87 select TRACE_IRQFLAGS 88 select TRACING 89 select TRACER_MAX_TRACE 90 help 91 This option measures the time spent in irqs-off critical 92 sections, with microsecond accuracy. 93 94 The default measurement method is a maximum search, which is 95 disabled by default and can be runtime (re-)started 96 via: 97 98 echo 0 > /debugfs/tracing/tracing_max_latency 99 100 (Note that kernel size and overhead increases with this option 101 enabled. This option and the preempt-off timing option can be 102 used together or separately.) 103 104config PREEMPT_TRACER 105 bool "Preemption-off Latency Tracer" 106 default n 107 depends on GENERIC_TIME 108 depends on PREEMPT 109 depends on DEBUG_KERNEL 110 select TRACING 111 select TRACER_MAX_TRACE 112 help 113 This option measures the time spent in preemption off critical 114 sections, with microsecond accuracy. 115 116 The default measurement method is a maximum search, which is 117 disabled by default and can be runtime (re-)started 118 via: 119 120 echo 0 > /debugfs/tracing/tracing_max_latency 121 122 (Note that kernel size and overhead increases with this option 123 enabled. This option and the irqs-off timing option can be 124 used together or separately.) 125 126config SYSPROF_TRACER 127 bool "Sysprof Tracer" 128 depends on X86 129 select TRACING 130 help 131 This tracer provides the trace needed by the 'Sysprof' userspace 132 tool. 133 134config SCHED_TRACER 135 bool "Scheduling Latency Tracer" 136 depends on DEBUG_KERNEL 137 select TRACING 138 select CONTEXT_SWITCH_TRACER 139 select TRACER_MAX_TRACE 140 help 141 This tracer tracks the latency of the highest priority task 142 to be scheduled in, starting from the point it has woken up. 143 144config CONTEXT_SWITCH_TRACER 145 bool "Trace process context switches" 146 depends on DEBUG_KERNEL 147 select TRACING 148 select MARKERS 149 help 150 This tracer gets called from the context switch and records 151 all switching of tasks. 152 153config BOOT_TRACER 154 bool "Trace boot initcalls" 155 depends on DEBUG_KERNEL 156 select TRACING 157 select CONTEXT_SWITCH_TRACER 158 help 159 This tracer helps developers to optimize boot times: it records 160 the timings of the initcalls and traces key events and the identity 161 of tasks that can cause boot delays, such as context-switches. 162 163 Its aim is to be parsed by the /scripts/bootgraph.pl tool to 164 produce pretty graphics about boot inefficiencies, giving a visual 165 representation of the delays during initcalls - but the raw 166 /debug/tracing/trace text output is readable too. 167 168 ( Note that tracing self tests can't be enabled if this tracer is 169 selected, because the self-tests are an initcall as well and that 170 would invalidate the boot trace. ) 171 172config TRACE_BRANCH_PROFILING 173 bool "Trace likely/unlikely profiler" 174 depends on DEBUG_KERNEL 175 select TRACING 176 help 177 This tracer profiles all the the likely and unlikely macros 178 in the kernel. It will display the results in: 179 180 /debugfs/tracing/profile_annotated_branch 181 182 Note: this will add a significant overhead, only turn this 183 on if you need to profile the system's use of these macros. 184 185 Say N if unsure. 186 187config PROFILE_ALL_BRANCHES 188 bool "Profile all if conditionals" 189 depends on TRACE_BRANCH_PROFILING 190 help 191 This tracer profiles all branch conditions. Every if () 192 taken in the kernel is recorded whether it hit or miss. 193 The results will be displayed in: 194 195 /debugfs/tracing/profile_branch 196 197 This configuration, when enabled, will impose a great overhead 198 on the system. This should only be enabled when the system 199 is to be analyzed 200 201 Say N if unsure. 202 203config TRACING_BRANCHES 204 bool 205 help 206 Selected by tracers that will trace the likely and unlikely 207 conditions. This prevents the tracers themselves from being 208 profiled. Profiling the tracing infrastructure can only happen 209 when the likelys and unlikelys are not being traced. 210 211config BRANCH_TRACER 212 bool "Trace likely/unlikely instances" 213 depends on TRACE_BRANCH_PROFILING 214 select TRACING_BRANCHES 215 help 216 This traces the events of likely and unlikely condition 217 calls in the kernel. The difference between this and the 218 "Trace likely/unlikely profiler" is that this is not a 219 histogram of the callers, but actually places the calling 220 events into a running trace buffer to see when and where the 221 events happened, as well as their results. 222 223 Say N if unsure. 224 225config POWER_TRACER 226 bool "Trace power consumption behavior" 227 depends on DEBUG_KERNEL 228 depends on X86 229 select TRACING 230 help 231 This tracer helps developers to analyze and optimize the kernels 232 power management decisions, specifically the C-state and P-state 233 behavior. 234 235 236config STACK_TRACER 237 bool "Trace max stack" 238 depends on HAVE_FUNCTION_TRACER 239 depends on DEBUG_KERNEL 240 select FUNCTION_TRACER 241 select STACKTRACE 242 select KALLSYMS 243 help 244 This special tracer records the maximum stack footprint of the 245 kernel and displays it in debugfs/tracing/stack_trace. 246 247 This tracer works by hooking into every function call that the 248 kernel executes, and keeping a maximum stack depth value and 249 stack-trace saved. If this is configured with DYNAMIC_FTRACE 250 then it will not have any overhead while the stack tracer 251 is disabled. 252 253 To enable the stack tracer on bootup, pass in 'stacktrace' 254 on the kernel command line. 255 256 The stack tracer can also be enabled or disabled via the 257 sysctl kernel.stack_tracer_enabled 258 259 Say N if unsure. 260 261config HW_BRANCH_TRACER 262 depends on HAVE_HW_BRANCH_TRACER 263 bool "Trace hw branches" 264 select TRACING 265 help 266 This tracer records all branches on the system in a circular 267 buffer giving access to the last N branches for each cpu. 268 269config DYNAMIC_FTRACE 270 bool "enable/disable ftrace tracepoints dynamically" 271 depends on FUNCTION_TRACER 272 depends on HAVE_DYNAMIC_FTRACE 273 depends on DEBUG_KERNEL 274 default y 275 help 276 This option will modify all the calls to ftrace dynamically 277 (will patch them out of the binary image and replaces them 278 with a No-Op instruction) as they are called. A table is 279 created to dynamically enable them again. 280 281 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise 282 has native performance as long as no tracing is active. 283 284 The changes to the code are done by a kernel thread that 285 wakes up once a second and checks to see if any ftrace calls 286 were made. If so, it runs stop_machine (stops all CPUS) 287 and modifies the code to jump over the call to ftrace. 288 289config FTRACE_MCOUNT_RECORD 290 def_bool y 291 depends on DYNAMIC_FTRACE 292 depends on HAVE_FTRACE_MCOUNT_RECORD 293 294config FTRACE_SELFTEST 295 bool 296 297config FTRACE_STARTUP_TEST 298 bool "Perform a startup test on ftrace" 299 depends on TRACING && DEBUG_KERNEL && !BOOT_TRACER 300 select FTRACE_SELFTEST 301 help 302 This option performs a series of startup tests on ftrace. On bootup 303 a series of tests are made to verify that the tracer is 304 functioning properly. It will do tests on all the configured 305 tracers of ftrace. 306 307config MMIOTRACE 308 bool "Memory mapped IO tracing" 309 depends on HAVE_MMIOTRACE_SUPPORT && DEBUG_KERNEL && PCI 310 select TRACING 311 help 312 Mmiotrace traces Memory Mapped I/O access and is meant for 313 debugging and reverse engineering. It is called from the ioremap 314 implementation and works via page faults. Tracing is disabled by 315 default and can be enabled at run-time. 316 317 See Documentation/tracers/mmiotrace.txt. 318 If you are not helping to develop drivers, say N. 319 320config MMIOTRACE_TEST 321 tristate "Test module for mmiotrace" 322 depends on MMIOTRACE && m 323 help 324 This is a dumb module for testing mmiotrace. It is very dangerous 325 as it will write garbage to IO memory starting at a given address. 326 However, it should be safe to use on e.g. unused portion of VRAM. 327 328 Say N, unless you absolutely know what you are doing. 329 330endmenu 331