linux/kernel/trace/Kconfig
<<
>>
Prefs
   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
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.