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_FTRACE_NMI_ENTER 13 bool 14 15config HAVE_FUNCTION_TRACER 16 bool 17 18config HAVE_FUNCTION_GRAPH_TRACER 19 bool 20 21config HAVE_FUNCTION_TRACE_MCOUNT_TEST 22 bool 23 help 24 This gets selected when the arch tests the function_trace_stop 25 variable at the mcount call site. Otherwise, this variable 26 is tested by the called function. 27 28config HAVE_DYNAMIC_FTRACE 29 bool 30 31config HAVE_FTRACE_MCOUNT_RECORD 32 bool 33 34config HAVE_HW_BRANCH_TRACER 35 bool 36 37config HAVE_FTRACE_SYSCALLS 38 bool 39 40config TRACER_MAX_TRACE 41 bool 42 43config RING_BUFFER 44 bool 45 46config FTRACE_NMI_ENTER 47 bool 48 depends on HAVE_FTRACE_NMI_ENTER 49 default y 50 51config EVENT_TRACING 52 bool 53 54config TRACING 55 bool 56 select DEBUG_FS 57 select RING_BUFFER 58 select STACKTRACE if STACKTRACE_SUPPORT 59 select TRACEPOINTS 60 select NOP_TRACER 61 select BINARY_PRINTF 62 select EVENT_TRACING 63 64# 65# Minimum requirements an architecture has to meet for us to 66# be able to offer generic tracing facilities: 67# 68config TRACING_SUPPORT 69 bool 70 # PPC32 has no irqflags tracing support, but it can use most of the 71 # tracers anyway, they were tested to build and work. Note that new 72 # exceptions to this list aren't welcomed, better implement the 73 # irqflags tracing for your architecture. 74 depends on TRACE_IRQFLAGS_SUPPORT || PPC32 75 depends on STACKTRACE_SUPPORT 76 default y 77 78if TRACING_SUPPORT 79 80menu "Tracers" 81 82config FUNCTION_TRACER 83 bool "Kernel Function Tracer" 84 depends on HAVE_FUNCTION_TRACER 85 select FRAME_POINTER 86 select KALLSYMS 87 select TRACING 88 select CONTEXT_SWITCH_TRACER 89 help 90 Enable the kernel to trace every kernel function. This is done 91 by using a compiler feature to insert a small, 5-byte No-Operation 92 instruction to the beginning of every kernel function, which NOP 93 sequence is then dynamically patched into a tracer call when 94 tracing is enabled by the administrator. If it's runtime disabled 95 (the bootup default), then the overhead of the instructions is very 96 small and not measurable even in micro-benchmarks. 97 98config FUNCTION_GRAPH_TRACER 99 bool "Kernel Function Graph Tracer" 100 depends on HAVE_FUNCTION_GRAPH_TRACER 101 depends on FUNCTION_TRACER 102 default y 103 help 104 Enable the kernel to trace a function at both its return 105 and its entry. 106 Its first purpose is to trace the duration of functions and 107 draw a call graph for each thread with some information like 108 the return value. This is done by setting the current return 109 address on the current task structure into a stack of calls. 110 111 112config IRQSOFF_TRACER 113 bool "Interrupts-off Latency Tracer" 114 default n 115 depends on TRACE_IRQFLAGS_SUPPORT 116 depends on GENERIC_TIME 117 select TRACE_IRQFLAGS 118 select TRACING 119 select TRACER_MAX_TRACE 120 help 121 This option measures the time spent in irqs-off critical 122 sections, with microsecond accuracy. 123 124 The default measurement method is a maximum search, which is 125 disabled by default and can be runtime (re-)started 126 via: 127 128 echo 0 > /debugfs/tracing/tracing_max_latency 129 130 (Note that kernel size and overhead increases with this option 131 enabled. This option and the preempt-off timing option can be 132 used together or separately.) 133 134config PREEMPT_TRACER 135 bool "Preemption-off Latency Tracer" 136 default n 137 depends on GENERIC_TIME 138 depends on PREEMPT 139 select TRACING 140 select TRACER_MAX_TRACE 141 help 142 This option measures the time spent in preemption off critical 143 sections, with microsecond accuracy. 144 145 The default measurement method is a maximum search, which is 146 disabled by default and can be runtime (re-)started 147 via: 148 149 echo 0 > /debugfs/tracing/tracing_max_latency 150 151 (Note that kernel size and overhead increases with this option 152 enabled. This option and the irqs-off timing option can be 153 used together or separately.) 154 155config SYSPROF_TRACER 156 bool "Sysprof Tracer" 157 depends on X86 158 select TRACING 159 select CONTEXT_SWITCH_TRACER 160 help 161 This tracer provides the trace needed by the 'Sysprof' userspace 162 tool. 163 164config SCHED_TRACER 165 bool "Scheduling Latency Tracer" 166 select TRACING 167 select CONTEXT_SWITCH_TRACER 168 select TRACER_MAX_TRACE 169 help 170 This tracer tracks the latency of the highest priority task 171 to be scheduled in, starting from the point it has woken up. 172 173config CONTEXT_SWITCH_TRACER 174 bool "Trace process context switches" 175 select TRACING 176 select MARKERS 177 help 178 This tracer gets called from the context switch and records 179 all switching of tasks. 180 181config EVENT_TRACER 182 bool "Trace various events in the kernel" 183 select TRACING 184 help 185 This tracer hooks to various trace points in the kernel 186 allowing the user to pick and choose which trace point they 187 want to trace. 188 189config FTRACE_SYSCALLS 190 bool "Trace syscalls" 191 depends on HAVE_FTRACE_SYSCALLS 192 select TRACING 193 select KALLSYMS 194 help 195 Basic tracer to catch the syscall entry and exit events. 196 197config BOOT_TRACER 198 bool "Trace boot initcalls" 199 select TRACING 200 select CONTEXT_SWITCH_TRACER 201 help 202 This tracer helps developers to optimize boot times: it records 203 the timings of the initcalls and traces key events and the identity 204 of tasks that can cause boot delays, such as context-switches. 205 206 Its aim is to be parsed by the /scripts/bootgraph.pl tool to 207 produce pretty graphics about boot inefficiencies, giving a visual 208 representation of the delays during initcalls - but the raw 209 /debug/tracing/trace text output is readable too. 210 211 You must pass in ftrace=initcall to the kernel command line 212 to enable this on bootup. 213 214config TRACE_BRANCH_PROFILING 215 bool "Trace likely/unlikely profiler" 216 select TRACING 217 help 218 This tracer profiles all the the likely and unlikely macros 219 in the kernel. It will display the results in: 220 221 /debugfs/tracing/profile_annotated_branch 222 223 Note: this will add a significant overhead, only turn this 224 on if you need to profile the system's use of these macros. 225 226 Say N if unsure. 227 228config PROFILE_ALL_BRANCHES 229 bool "Profile all if conditionals" 230 depends on TRACE_BRANCH_PROFILING 231 help 232 This tracer profiles all branch conditions. Every if () 233 taken in the kernel is recorded whether it hit or miss. 234 The results will be displayed in: 235 236 /debugfs/tracing/profile_branch 237 238 This configuration, when enabled, will impose a great overhead 239 on the system. This should only be enabled when the system 240 is to be analyzed 241 242 Say N if unsure. 243 244config TRACING_BRANCHES 245 bool 246 help 247 Selected by tracers that will trace the likely and unlikely 248 conditions. This prevents the tracers themselves from being 249 profiled. Profiling the tracing infrastructure can only happen 250 when the likelys and unlikelys are not being traced. 251 252config BRANCH_TRACER 253 bool "Trace likely/unlikely instances" 254 depends on TRACE_BRANCH_PROFILING 255 select TRACING_BRANCHES 256 help 257 This traces the events of likely and unlikely condition 258 calls in the kernel. The difference between this and the 259 "Trace likely/unlikely profiler" is that this is not a 260 histogram of the callers, but actually places the calling 261 events into a running trace buffer to see when and where the 262 events happened, as well as their results. 263 264 Say N if unsure. 265 266config POWER_TRACER 267 bool "Trace power consumption behavior" 268 depends on X86 269 select TRACING 270 help 271 This tracer helps developers to analyze and optimize the kernels 272 power management decisions, specifically the C-state and P-state 273 behavior. 274 275 276config STACK_TRACER 277 bool "Trace max stack" 278 depends on HAVE_FUNCTION_TRACER 279 select FUNCTION_TRACER 280 select STACKTRACE 281 select KALLSYMS 282 help 283 This special tracer records the maximum stack footprint of the 284 kernel and displays it in debugfs/tracing/stack_trace. 285 286 This tracer works by hooking into every function call that the 287 kernel executes, and keeping a maximum stack depth value and 288 stack-trace saved. If this is configured with DYNAMIC_FTRACE 289 then it will not have any overhead while the stack tracer 290 is disabled. 291 292 To enable the stack tracer on bootup, pass in 'stacktrace' 293 on the kernel command line. 294 295 The stack tracer can also be enabled or disabled via the 296 sysctl kernel.stack_tracer_enabled 297 298 Say N if unsure. 299 300config HW_BRANCH_TRACER 301 depends on HAVE_HW_BRANCH_TRACER 302 bool "Trace hw branches" 303 select TRACING 304 help 305 This tracer records all branches on the system in a circular 306 buffer giving access to the last N branches for each cpu. 307 308config KMEMTRACE 309 bool "Trace SLAB allocations" 310 select TRACING 311 help 312 kmemtrace provides tracing for slab allocator functions, such as 313 kmalloc, kfree, kmem_cache_alloc, kmem_cache_free etc.. Collected 314 data is then fed to the userspace application in order to analyse 315 allocation hotspots, internal fragmentation and so on, making it 316 possible to see how well an allocator performs, as well as debug 317 and profile kernel code. 318 319 This requires an userspace application to use. See 320 Documentation/vm/kmemtrace.txt for more information. 321 322 Saying Y will make the kernel somewhat larger and slower. However, 323 if you disable kmemtrace at run-time or boot-time, the performance 324 impact is minimal (depending on the arch the kernel is built for). 325 326 If unsure, say N. 327 328config WORKQUEUE_TRACER 329 bool "Trace workqueues" 330 select TRACING 331 help 332 The workqueue tracer provides some statistical informations 333 about each cpu workqueue thread such as the number of the 334 works inserted and executed since their creation. It can help 335 to evaluate the amount of work each of them have to perform. 336 For example it can help a developer to decide whether he should 337 choose a per cpu workqueue instead of a singlethreaded one. 338 339config BLK_DEV_IO_TRACE 340 bool "Support for tracing block io actions" 341 depends on SYSFS 342 depends on BLOCK 343 select RELAY 344 select DEBUG_FS 345 select TRACEPOINTS 346 select TRACING 347 select STACKTRACE 348 help 349 Say Y here if you want to be able to trace the block layer actions 350 on a given queue. Tracing allows you to see any traffic happening 351 on a block device queue. For more information (and the userspace 352 support tools needed), fetch the blktrace tools from: 353 354 git://git.kernel.dk/blktrace.git 355 356 Tracing also is possible using the ftrace interface, e.g.: 357 358 echo 1 > /sys/block/sda/sda1/trace/enable 359 echo blk > /sys/kernel/debug/tracing/current_tracer 360 cat /sys/kernel/debug/tracing/trace_pipe 361 362 If unsure, say N. 363 364config DYNAMIC_FTRACE 365 bool "enable/disable ftrace tracepoints dynamically" 366 depends on FUNCTION_TRACER 367 depends on HAVE_DYNAMIC_FTRACE 368 default y 369 help 370 This option will modify all the calls to ftrace dynamically 371 (will patch them out of the binary image and replaces them 372 with a No-Op instruction) as they are called. A table is 373 created to dynamically enable them again. 374 375 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise 376 has native performance as long as no tracing is active. 377 378 The changes to the code are done by a kernel thread that 379 wakes up once a second and checks to see if any ftrace calls 380 were made. If so, it runs stop_machine (stops all CPUS) 381 and modifies the code to jump over the call to ftrace. 382 383config FUNCTION_PROFILER 384 bool "Kernel function profiler" 385 depends on FUNCTION_TRACER 386 default n 387 help 388 This option enables the kernel function profiler. A file is created 389 in debugfs called function_profile_enabled which defaults to zero. 390 When a 1 is echoed into this file profiling begins, and when a 391 zero is entered, profiling stops. A file in the trace_stats 392 directory called functions, that show the list of functions that 393 have been hit and their counters. 394 395 If in doubt, say N 396 397config FTRACE_MCOUNT_RECORD 398 def_bool y 399 depends on DYNAMIC_FTRACE 400 depends on HAVE_FTRACE_MCOUNT_RECORD 401 402config FTRACE_SELFTEST 403 bool 404 405config FTRACE_STARTUP_TEST 406 bool "Perform a startup test on ftrace" 407 depends on TRACING 408 select FTRACE_SELFTEST 409 help 410 This option performs a series of startup tests on ftrace. On bootup 411 a series of tests are made to verify that the tracer is 412 functioning properly. It will do tests on all the configured 413 tracers of ftrace. 414 415config MMIOTRACE 416 bool "Memory mapped IO tracing" 417 depends on HAVE_MMIOTRACE_SUPPORT && PCI 418 select TRACING 419 help 420 Mmiotrace traces Memory Mapped I/O access and is meant for 421 debugging and reverse engineering. It is called from the ioremap 422 implementation and works via page faults. Tracing is disabled by 423 default and can be enabled at run-time. 424 425 See Documentation/tracers/mmiotrace.txt. 426 If you are not helping to develop drivers, say N. 427 428config MMIOTRACE_TEST 429 tristate "Test module for mmiotrace" 430 depends on MMIOTRACE && m 431 help 432 This is a dumb module for testing mmiotrace. It is very dangerous 433 as it will write garbage to IO memory starting at a given address. 434 However, it should be safe to use on e.g. unused portion of VRAM. 435 436 Say N, unless you absolutely know what you are doing. 437 438endmenu 439 440endif # TRACING_SUPPORT 441 442