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 select PROBE_EVENTS 376 default y 377 help 378 This allows the user to add tracing events (similar to tracepoints) 379 on the fly via the ftrace interface. See 380 Documentation/trace/kprobetrace.txt for more details. 381 382 Those events can be inserted wherever kprobes can probe, and record 383 various register and memory values. 384 385 This option is also required by perf-probe subcommand of perf tools. 386 If you want to use perf tools, this option is strongly recommended. 387 388config UPROBE_EVENT 389 bool "Enable uprobes-based dynamic events" 390 depends on ARCH_SUPPORTS_UPROBES 391 depends on MMU 392 select UPROBES 393 select PROBE_EVENTS 394 select TRACING 395 default n 396 help 397 This allows the user to add tracing events on top of userspace 398 dynamic events (similar to tracepoints) on the fly via the trace 399 events interface. Those events can be inserted wherever uprobes 400 can probe, and record various registers. 401 This option is required if you plan to use perf-probe subcommand 402 of perf tools on user space applications. 403 404config PROBE_EVENTS 405 def_bool n 406 407config DYNAMIC_FTRACE 408 bool "enable/disable ftrace tracepoints dynamically" 409 depends on FUNCTION_TRACER 410 depends on HAVE_DYNAMIC_FTRACE 411 default y 412 help 413 This option will modify all the calls to ftrace dynamically 414 (will patch them out of the binary image and replace them 415 with a No-Op instruction) as they are called. A table is 416 created to dynamically enable them again. 417 418 This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but 419 otherwise has native performance as long as no tracing is active. 420 421 The changes to the code are done by a kernel thread that 422 wakes up once a second and checks to see if any ftrace calls 423 were made. If so, it runs stop_machine (stops all CPUS) 424 and modifies the code to jump over the call to ftrace. 425 426config FUNCTION_PROFILER 427 bool "Kernel function profiler" 428 depends on FUNCTION_TRACER 429 default n 430 help 431 This option enables the kernel function profiler. A file is created 432 in debugfs called function_profile_enabled which defaults to zero. 433 When a 1 is echoed into this file profiling begins, and when a 434 zero is entered, profiling stops. A "functions" file is created in 435 the trace_stats directory; this file shows the list of functions that 436 have been hit and their counters. 437 438 If in doubt, say N. 439 440config FTRACE_MCOUNT_RECORD 441 def_bool y 442 depends on DYNAMIC_FTRACE 443 depends on HAVE_FTRACE_MCOUNT_RECORD 444 445config FTRACE_SELFTEST 446 bool 447 448config FTRACE_STARTUP_TEST 449 bool "Perform a startup test on ftrace" 450 depends on GENERIC_TRACER 451 select FTRACE_SELFTEST 452 help 453 This option performs a series of startup tests on ftrace. On bootup 454 a series of tests are made to verify that the tracer is 455 functioning properly. It will do tests on all the configured 456 tracers of ftrace. 457 458config EVENT_TRACE_TEST_SYSCALLS 459 bool "Run selftest on syscall events" 460 depends on FTRACE_STARTUP_TEST 461 help 462 This option will also enable testing every syscall event. 463 It only enables the event and disables it and runs various loads 464 with the event enabled. This adds a bit more time for kernel boot 465 up since it runs this on every system call defined. 466 467 TBD - enable a way to actually call the syscalls as we test their 468 events 469 470config MMIOTRACE 471 bool "Memory mapped IO tracing" 472 depends on HAVE_MMIOTRACE_SUPPORT && PCI 473 select GENERIC_TRACER 474 help 475 Mmiotrace traces Memory Mapped I/O access and is meant for 476 debugging and reverse engineering. It is called from the ioremap 477 implementation and works via page faults. Tracing is disabled by 478 default and can be enabled at run-time. 479 480 See Documentation/trace/mmiotrace.txt. 481 If you are not helping to develop drivers, say N. 482 483config MMIOTRACE_TEST 484 tristate "Test module for mmiotrace" 485 depends on MMIOTRACE && m 486 help 487 This is a dumb module for testing mmiotrace. It is very dangerous 488 as it will write garbage to IO memory starting at a given address. 489 However, it should be safe to use on e.g. unused portion of VRAM. 490 491 Say N, unless you absolutely know what you are doing. 492 493config RING_BUFFER_BENCHMARK 494 tristate "Ring buffer benchmark stress tester" 495 depends on RING_BUFFER 496 help 497 This option creates a test to stress the ring buffer and benchmark it. 498 It creates its own ring buffer such that it will not interfere with 499 any other users of the ring buffer (such as ftrace). It then creates 500 a producer and consumer that will run for 10 seconds and sleep for 501 10 seconds. Each interval it will print out the number of events 502 it recorded and give a rough estimate of how long each iteration took. 503 504 It does not disable interrupts or raise its priority, so it may be 505 affected by processes that are running. 506 507 If unsure, say N. 508 509endif # FTRACE 510 511endif # TRACING_SUPPORT 512 513