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