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 help 15 See Documentation/trace/ftrace-design.txt 16 17config HAVE_FUNCTION_TRACER 18 bool 19 help 20 See Documentation/trace/ftrace-design.txt 21 22config HAVE_FUNCTION_GRAPH_TRACER 23 bool 24 help 25 See Documentation/trace/ftrace-design.txt 26 27config HAVE_FUNCTION_GRAPH_FP_TEST 28 bool 29 help 30 See Documentation/trace/ftrace-design.txt 31 32config HAVE_FUNCTION_TRACE_MCOUNT_TEST 33 bool 34 help 35 See Documentation/trace/ftrace-design.txt 36 37config HAVE_DYNAMIC_FTRACE 38 bool 39 help 40 See Documentation/trace/ftrace-design.txt 41 42config HAVE_FTRACE_MCOUNT_RECORD 43 bool 44 help 45 See Documentation/trace/ftrace-design.txt 46 47config HAVE_SYSCALL_TRACEPOINTS 48 bool 49 help 50 See Documentation/trace/ftrace-design.txt 51 52config HAVE_C_RECORDMCOUNT 53 bool 54 help 55 C version of recordmcount available? 56 57config TRACER_MAX_TRACE 58 bool 59 60config RING_BUFFER 61 bool 62 63config FTRACE_NMI_ENTER 64 bool 65 depends on HAVE_FTRACE_NMI_ENTER 66 default y 67 68config EVENT_TRACING 69 select CONTEXT_SWITCH_TRACER 70 bool 71 72config EVENT_POWER_TRACING_DEPRECATED 73 depends on EVENT_TRACING 74 bool "Deprecated power event trace API, to be removed" 75 default y 76 help 77 Provides old power event types: 78 C-state/idle accounting events: 79 power:power_start 80 power:power_end 81 and old cpufreq accounting event: 82 power:power_frequency 83 This is for userspace compatibility 84 and will vanish after 5 kernel iterations, 85 namely 3.1. 86 87config CONTEXT_SWITCH_TRACER 88 bool 89 90config RING_BUFFER_ALLOW_SWAP 91 bool 92 help 93 Allow the use of ring_buffer_swap_cpu. 94 Adds a very slight overhead to tracing when enabled. 95 96# All tracer options should select GENERIC_TRACER. For those options that are 97# enabled by all tracers (context switch and event tracer) they select TRACING. 98# This allows those options to appear when no other tracer is selected. But the 99# options do not appear when something else selects it. We need the two options 100# GENERIC_TRACER and TRACING to avoid circular dependencies to accomplish the 101# hiding of the automatic options. 102 103config TRACING 104 bool 105 select DEBUG_FS 106 select RING_BUFFER 107 select STACKTRACE if STACKTRACE_SUPPORT 108 select TRACEPOINTS 109 select NOP_TRACER 110 select BINARY_PRINTF 111 select EVENT_TRACING 112 113config GENERIC_TRACER 114 bool 115 select TRACING 116 117# 118# Minimum requirements an architecture has to meet for us to 119# be able to offer generic tracing facilities: 120# 121config TRACING_SUPPORT 122 bool 123 # PPC32 has no irqflags tracing support, but it can use most of the 124 # tracers anyway, they were tested to build and work. Note that new 125 # exceptions to this list aren't welcomed, better implement the 126 # irqflags tracing for your architecture. 127 depends on TRACE_IRQFLAGS_SUPPORT || PPC32 128 depends on STACKTRACE_SUPPORT 129 default y 130 131if TRACING_SUPPORT 132 133menuconfig FTRACE 134 bool "Tracers" 135 default y if DEBUG_KERNEL 136 help 137 Enable the kernel tracing infrastructure. 138 139if FTRACE 140 141config FUNCTION_TRACER 142 bool "Kernel Function Tracer" 143 depends on HAVE_FUNCTION_TRACER 144 select KALLSYMS 145 select GENERIC_TRACER 146 select CONTEXT_SWITCH_TRACER 147 help 148 Enable the kernel to trace every kernel function. This is done 149 by using a compiler feature to insert a small, 5-byte No-Operation 150 instruction at the beginning of every kernel function, which NOP 151 sequence is then dynamically patched into a tracer call when 152 tracing is enabled by the administrator. If it's runtime disabled 153 (the bootup default), then the overhead of the instructions is very 154 small and not measurable even in micro-benchmarks. 155 156config FUNCTION_GRAPH_TRACER 157 bool "Kernel Function Graph Tracer" 158 depends on HAVE_FUNCTION_GRAPH_TRACER 159 depends on FUNCTION_TRACER 160 depends on !X86_32 || !CC_OPTIMIZE_FOR_SIZE 161 default y 162 help 163 Enable the kernel to trace a function at both its return 164 and its entry. 165 Its first purpose is to trace the duration of functions and 166 draw a call graph for each thread with some information like 167 the return value. This is done by setting the current return 168 address on the current task structure into a stack of calls. 169 170 171config IRQSOFF_TRACER 172 bool "Interrupts-off Latency Tracer" 173 default n 174 depends on TRACE_IRQFLAGS_SUPPORT 175 depends on !ARCH_USES_GETTIMEOFFSET 176 select TRACE_IRQFLAGS 177 select GENERIC_TRACER 178 select TRACER_MAX_TRACE 179 select RING_BUFFER_ALLOW_SWAP 180 help 181 This option measures the time spent in irqs-off critical 182 sections, with microsecond accuracy. 183 184 The default measurement method is a maximum search, which is 185 disabled by default and can be runtime (re-)started 186 via: 187 188 echo 0 > /sys/kernel/debug/tracing/tracing_max_latency 189 190 (Note that kernel size and overhead increase with this option 191 enabled. This option and the preempt-off timing option can be 192 used together or separately.) 193 194config PREEMPT_TRACER 195 bool "Preemption-off Latency Tracer" 196 default n 197 depends on !ARCH_USES_GETTIMEOFFSET 198 depends on PREEMPT 199 select GENERIC_TRACER 200 select TRACER_MAX_TRACE 201 select RING_BUFFER_ALLOW_SWAP 202 help 203 This option measures the time spent in preemption-off critical 204 sections, with microsecond accuracy. 205 206 The default measurement method is a maximum search, which is 207 disabled by default and can be runtime (re-)started 208 via: 209 210 echo 0 > /sys/kernel/debug/tracing/tracing_max_latency 211 212 (Note that kernel size and overhead increase with this option 213 enabled. This option and the irqs-off timing option can be 214 used together or separately.) 215 216config SCHED_TRACER 217 bool "Scheduling Latency Tracer" 218 select GENERIC_TRACER 219 select CONTEXT_SWITCH_TRACER 220 select TRACER_MAX_TRACE 221 help 222 This tracer tracks the latency of the highest priority task 223 to be scheduled in, starting from the point it has woken up. 224 225config ENABLE_DEFAULT_TRACERS 226 bool "Trace process context switches and events" 227 depends on !GENERIC_TRACER 228 select TRACING 229 help 230 This tracer hooks to various trace points in the kernel, 231 allowing the user to pick and choose which trace point they 232 want to trace. It also includes the sched_switch tracer plugin. 233 234config FTRACE_SYSCALLS 235 bool "Trace syscalls" 236 depends on HAVE_SYSCALL_TRACEPOINTS 237 select GENERIC_TRACER 238 select KALLSYMS 239 help 240 Basic tracer to catch the syscall entry and exit events. 241 242config TRACE_BRANCH_PROFILING 243 bool 244 select GENERIC_TRACER 245 246choice 247 prompt "Branch Profiling" 248 default BRANCH_PROFILE_NONE 249 help 250 The branch profiling is a software profiler. It will add hooks 251 into the C conditionals to test which path a branch takes. 252 253 The likely/unlikely profiler only looks at the conditions that 254 are annotated with a likely or unlikely macro. 255 256 The "all branch" profiler will profile every if-statement in the 257 kernel. This profiler will also enable the likely/unlikely 258 profiler. 259 260 Either of the above profilers adds a bit of overhead to the system. 261 If unsure, choose "No branch profiling". 262 263config BRANCH_PROFILE_NONE 264 bool "No branch profiling" 265 help 266 No branch profiling. Branch profiling adds a bit of overhead. 267 Only enable it if you want to analyse the branching behavior. 268 Otherwise keep it disabled. 269 270config PROFILE_ANNOTATED_BRANCHES 271 bool "Trace likely/unlikely profiler" 272 select TRACE_BRANCH_PROFILING 273 help 274 This tracer profiles all likely and unlikely macros 275 in the kernel. It will display the results in: 276 277 /sys/kernel/debug/tracing/trace_stat/branch_annotated 278 279 Note: this will add a significant overhead; only turn this 280 on if you need to profile the system's use of these macros. 281 282config PROFILE_ALL_BRANCHES 283 bool "Profile all if conditionals" 284 select TRACE_BRANCH_PROFILING 285 help 286 This tracer profiles all branch conditions. Every if () 287 taken in the kernel is recorded whether it hit or miss. 288 The results will be displayed in: 289 290 /sys/kernel/debug/tracing/trace_stat/branch_all 291 292 This option also enables the likely/unlikely profiler. 293 294 This configuration, when enabled, will impose a great overhead 295 on the system. This should only be enabled when the system 296 is to be analyzed in much detail. 297endchoice 298 299config TRACING_BRANCHES 300 bool 301 help 302 Selected by tracers that will trace the likely and unlikely 303 conditions. This prevents the tracers themselves from being 304 profiled. Profiling the tracing infrastructure can only happen 305 when the likelys and unlikelys are not being traced. 306 307config BRANCH_TRACER 308 bool "Trace likely/unlikely instances" 309 depends on TRACE_BRANCH_PROFILING 310 select TRACING_BRANCHES 311 help 312 This traces the events of likely and unlikely condition 313 calls in the kernel. The difference between this and the 314 "Trace likely/unlikely profiler" is that this is not a 315 histogram of the callers, but actually places the calling 316 events into a running trace buffer to see when and where the 317 events happened, as well as their results. 318 319 Say N if unsure. 320 321config STACK_TRACER 322 bool "Trace max stack" 323 depends on HAVE_FUNCTION_TRACER 324 select FUNCTION_TRACER 325 select STACKTRACE 326 select KALLSYMS 327 help 328 This special tracer records the maximum stack footprint of the 329 kernel and displays it in /sys/kernel/debug/tracing/stack_trace. 330 331 This tracer works by hooking into every function call that the 332 kernel executes, and keeping a maximum stack depth value and 333 stack-trace saved. If this is configured with DYNAMIC_FTRACE 334 then it will not have any overhead while the stack tracer 335 is disabled. 336 337 To enable the stack tracer on bootup, pass in 'stacktrace' 338 on the kernel command line. 339 340 The stack tracer can also be enabled or disabled via the 341 sysctl kernel.stack_tracer_enabled 342 343 Say N if unsure. 344 345config BLK_DEV_IO_TRACE 346 bool "Support for tracing block IO actions" 347 depends on SYSFS 348 depends on BLOCK 349 select RELAY 350 select DEBUG_FS 351 select TRACEPOINTS 352 select GENERIC_TRACER 353 select STACKTRACE 354 help 355 Say Y here if you want to be able to trace the block layer actions 356 on a given queue. Tracing allows you to see any traffic happening 357 on a block device queue. For more information (and the userspace 358 support tools needed), fetch the blktrace tools from: 359 360 git://git.kernel.dk/blktrace.git 361 362 Tracing also is possible using the ftrace interface, e.g.: 363 364 echo 1 > /sys/block/sda/sda1/trace/enable 365 echo blk > /sys/kernel/debug/tracing/current_tracer 366 cat /sys/kernel/debug/tracing/trace_pipe 367 368 If unsure, say N. 369 370config KPROBE_EVENT 371 depends on KPROBES 372 depends on HAVE_REGS_AND_STACK_ACCESS_API 373 bool "Enable kprobes-based dynamic events" 374 select TRACING 375 default y 376 help 377 This allows the user to add tracing events (similar to tracepoints) 378 on the fly via the ftrace interface. See 379 Documentation/trace/kprobetrace.txt for more details. 380 381 Those events can be inserted wherever kprobes can probe, and record 382 various register and memory values. 383 384 This option is also required by perf-probe subcommand of perf tools. 385 If you want to use perf tools, this option is strongly recommended. 386 387config DYNAMIC_FTRACE 388 bool "enable/disable ftrace tracepoints dynamically" 389 depends on FUNCTION_TRACER 390 depends on HAVE_DYNAMIC_FTRACE 391 default y 392 help 393 This option will modify all the calls to ftrace dynamically 394 (will patch them out of the binary image and replace them 395 with a No-Op instruction) as they are called. A table is 396 created to dynamically enable them again. 397 398 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but 399 otherwise has native performance as long as no tracing is active. 400 401 The changes to the code are done by a kernel thread that 402 wakes up once a second and checks to see if any ftrace calls 403 were made. If so, it runs stop_machine (stops all CPUS) 404 and modifies the code to jump over the call to ftrace. 405 406config FUNCTION_PROFILER 407 bool "Kernel function profiler" 408 depends on FUNCTION_TRACER 409 default n 410 help 411 This option enables the kernel function profiler. A file is created 412 in debugfs called function_profile_enabled which defaults to zero. 413 When a 1 is echoed into this file profiling begins, and when a 414 zero is entered, profiling stops. A "functions" file is created in 415 the trace_stats directory; this file shows the list of functions that 416 have been hit and their counters. 417 418 If in doubt, say N. 419 420config FTRACE_MCOUNT_RECORD 421 def_bool y 422 depends on DYNAMIC_FTRACE 423 depends on HAVE_FTRACE_MCOUNT_RECORD 424 425config FTRACE_SELFTEST 426 bool 427 428config FTRACE_STARTUP_TEST 429 bool "Perform a startup test on ftrace" 430 depends on GENERIC_TRACER 431 select FTRACE_SELFTEST 432 help 433 This option performs a series of startup tests on ftrace. On bootup 434 a series of tests are made to verify that the tracer is 435 functioning properly. It will do tests on all the configured 436 tracers of ftrace. 437 438config EVENT_TRACE_TEST_SYSCALLS 439 bool "Run selftest on syscall events" 440 depends on FTRACE_STARTUP_TEST 441 help 442 This option will also enable testing every syscall event. 443 It only enables the event and disables it and runs various loads 444 with the event enabled. This adds a bit more time for kernel boot 445 up since it runs this on every system call defined. 446 447 TBD - enable a way to actually call the syscalls as we test their 448 events 449 450config MMIOTRACE 451 bool "Memory mapped IO tracing" 452 depends on HAVE_MMIOTRACE_SUPPORT && PCI 453 select GENERIC_TRACER 454 help 455 Mmiotrace traces Memory Mapped I/O access and is meant for 456 debugging and reverse engineering. It is called from the ioremap 457 implementation and works via page faults. Tracing is disabled by 458 default and can be enabled at run-time. 459 460 See Documentation/trace/mmiotrace.txt. 461 If you are not helping to develop drivers, say N. 462 463config MMIOTRACE_TEST 464 tristate "Test module for mmiotrace" 465 depends on MMIOTRACE && m 466 help 467 This is a dumb module for testing mmiotrace. It is very dangerous 468 as it will write garbage to IO memory starting at a given address. 469 However, it should be safe to use on e.g. unused portion of VRAM. 470 471 Say N, unless you absolutely know what you are doing. 472 473config RING_BUFFER_BENCHMARK 474 tristate "Ring buffer benchmark stress tester" 475 depends on RING_BUFFER 476 help 477 This option creates a test to stress the ring buffer and benchmark it. 478 It creates its own ring buffer such that it will not interfere with 479 any other users of the ring buffer (such as ftrace). It then creates 480 a producer and consumer that will run for 10 seconds and sleep for 481 10 seconds. Each interval it will print out the number of events 482 it recorded and give a rough estimate of how long each iteration took. 483 484 It does not disable interrupts or raise its priority, so it may be 485 affected by processes that are running. 486 487 If unsure, say N. 488 489endif # FTRACE 490 491endif # TRACING_SUPPORT 492 493