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