Kconfig 26.2 KB
Newer Older
1
# SPDX-License-Identifier: GPL-2.0-only
2
#
3 4
# Architectures that offer an FUNCTION_TRACER implementation should
#  select HAVE_FUNCTION_TRACER:
5
#
6

7 8 9
config USER_STACKTRACE_SUPPORT
	bool

10 11 12
config NOP_TRACER
	bool

13 14
config HAVE_FTRACE_NMI_ENTER
	bool
15
	help
16
	  See Documentation/trace/ftrace-design.rst
17

18
config HAVE_FUNCTION_TRACER
19
	bool
20
	help
21
	  See Documentation/trace/ftrace-design.rst
22

23
config HAVE_FUNCTION_GRAPH_TRACER
24
	bool
25
	help
26
	  See Documentation/trace/ftrace-design.rst
27

28 29
config HAVE_DYNAMIC_FTRACE
	bool
30
	help
31
	  See Documentation/trace/ftrace-design.rst
32

33 34 35
config HAVE_DYNAMIC_FTRACE_WITH_REGS
	bool

36 37 38
config HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
	bool

39 40
config HAVE_FTRACE_MCOUNT_RECORD
	bool
41
	help
42
	  See Documentation/trace/ftrace-design.rst
43

44
config HAVE_SYSCALL_TRACEPOINTS
45
	bool
46
	help
47
	  See Documentation/trace/ftrace-design.rst
48

49 50 51 52 53
config HAVE_FENTRY
	bool
	help
	  Arch supports the gcc options -pg with -mfentry

54 55 56 57 58
config HAVE_NOP_MCOUNT
	bool
	help
	  Arch supports the gcc options -pg with -mrecord-mcount and -nop-mcount

59
config HAVE_C_RECORDMCOUNT
60 61 62 63
	bool
	help
	  C version of recordmcount available?

64 65 66
config TRACER_MAX_TRACE
	bool

67 68 69
config TRACE_CLOCK
	bool

70 71
config RING_BUFFER
	bool
72
	select TRACE_CLOCK
73
	select IRQ_WORK
74

75 76 77 78 79
config FTRACE_NMI_ENTER
       bool
       depends on HAVE_FTRACE_NMI_ENTER
       default y

80
config EVENT_TRACING
81
	select CONTEXT_SWITCH_TRACER
82
	select GLOB
83 84 85
	bool

config CONTEXT_SWITCH_TRACER
86 87
	bool

88 89 90 91 92 93
config RING_BUFFER_ALLOW_SWAP
	bool
	help
	 Allow the use of ring_buffer_swap_cpu.
	 Adds a very slight overhead to tracing when enabled.

94 95 96 97 98 99 100 101 102
config PREEMPTIRQ_TRACEPOINTS
	bool
	depends on TRACE_PREEMPT_TOGGLE || TRACE_IRQFLAGS
	select TRACING
	default y
	help
	  Create preempt/irq toggle tracepoints if needed, so that other parts
	  of the kernel can use them to generate or add hooks to them.

103 104 105 106 107
# All tracer options should select GENERIC_TRACER. For those options that are
# enabled by all tracers (context switch and event tracer) they select TRACING.
# This allows those options to appear when no other tracer is selected. But the
# options do not appear when something else selects it. We need the two options
# GENERIC_TRACER and TRACING to avoid circular dependencies to accomplish the
108
# hiding of the automatic options.
109

110 111
config TRACING
	bool
112
	select RING_BUFFER
113
	select STACKTRACE if STACKTRACE_SUPPORT
114
	select TRACEPOINTS
115
	select NOP_TRACER
116
	select BINARY_PRINTF
117
	select EVENT_TRACING
118
	select TRACE_CLOCK
119

120 121 122 123
config GENERIC_TRACER
	bool
	select TRACING

Ingo Molnar's avatar
Ingo Molnar committed
124 125 126 127 128 129
#
# Minimum requirements an architecture has to meet for us to
# be able to offer generic tracing facilities:
#
config TRACING_SUPPORT
	bool
130
	depends on TRACE_IRQFLAGS_SUPPORT
Ingo Molnar's avatar
Ingo Molnar committed
131
	depends on STACKTRACE_SUPPORT
132
	default y
Ingo Molnar's avatar
Ingo Molnar committed
133 134 135

if TRACING_SUPPORT

136 137
menuconfig FTRACE
	bool "Tracers"
138
	default y if DEBUG_KERNEL
139
	help
140
	  Enable the kernel tracing infrastructure.
141 142

if FTRACE
143

144
config FUNCTION_TRACER
Steven Rostedt's avatar
Steven Rostedt committed
145
	bool "Kernel Function Tracer"
146
	depends on HAVE_FUNCTION_TRACER
147
	select KALLSYMS
148
	select GENERIC_TRACER
149
	select CONTEXT_SWITCH_TRACER
150
	select GLOB
151
	select TASKS_RCU if PREEMPTION
Steven Rostedt's avatar
Steven Rostedt committed
152 153 154
	help
	  Enable the kernel to trace every kernel function. This is done
	  by using a compiler feature to insert a small, 5-byte No-Operation
155
	  instruction at the beginning of every kernel function, which NOP
Steven Rostedt's avatar
Steven Rostedt committed
156 157 158 159
	  sequence is then dynamically patched into a tracer call when
	  tracing is enabled by the administrator. If it's runtime disabled
	  (the bootup default), then the overhead of the instructions is very
	  small and not measurable even in micro-benchmarks.
160

161 162 163
config FUNCTION_GRAPH_TRACER
	bool "Kernel Function Graph Tracer"
	depends on HAVE_FUNCTION_GRAPH_TRACER
164
	depends on FUNCTION_TRACER
165
	depends on !X86_32 || !CC_OPTIMIZE_FOR_SIZE
166
	default y
167
	help
168 169
	  Enable the kernel to trace a function at both its return
	  and its entry.
170 171
	  Its first purpose is to trace the duration of functions and
	  draw a call graph for each thread with some information like
172
	  the return value. This is done by setting the current return
173
	  address on the current task structure into a stack of calls.
174

175 176 177 178 179
config TRACE_PREEMPT_TOGGLE
	bool
	help
	  Enables hooks which will be called when preemption is first disabled,
	  and last enabled.
180

181 182 183
config PREEMPTIRQ_EVENTS
	bool "Enable trace events for preempt and irq disable/enable"
	select TRACE_IRQFLAGS
184
	select TRACE_PREEMPT_TOGGLE if PREEMPTION
185
	select GENERIC_TRACER
186 187 188 189
	default n
	help
	  Enable tracing of disable and enable events for preemption and irqs.

190 191 192 193
config IRQSOFF_TRACER
	bool "Interrupts-off Latency Tracer"
	default n
	depends on TRACE_IRQFLAGS_SUPPORT
194
	depends on !ARCH_USES_GETTIMEOFFSET
195
	select TRACE_IRQFLAGS
196
	select GENERIC_TRACER
197
	select TRACER_MAX_TRACE
198
	select RING_BUFFER_ALLOW_SWAP
199
	select TRACER_SNAPSHOT
200
	select TRACER_SNAPSHOT_PER_CPU_SWAP
201 202 203 204 205 206 207 208
	help
	  This option measures the time spent in irqs-off critical
	  sections, with microsecond accuracy.

	  The default measurement method is a maximum search, which is
	  disabled by default and can be runtime (re-)started
	  via:

209
	      echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
210

211
	  (Note that kernel size and overhead increase with this option
212 213 214 215 216 217
	  enabled. This option and the preempt-off timing option can be
	  used together or separately.)

config PREEMPT_TRACER
	bool "Preemption-off Latency Tracer"
	default n
218
	depends on !ARCH_USES_GETTIMEOFFSET
219
	depends on PREEMPTION
220
	select GENERIC_TRACER
221
	select TRACER_MAX_TRACE
222
	select RING_BUFFER_ALLOW_SWAP
223
	select TRACER_SNAPSHOT
224
	select TRACER_SNAPSHOT_PER_CPU_SWAP
225
	select TRACE_PREEMPT_TOGGLE
226
	help
227
	  This option measures the time spent in preemption-off critical
228 229 230 231 232 233
	  sections, with microsecond accuracy.

	  The default measurement method is a maximum search, which is
	  disabled by default and can be runtime (re-)started
	  via:

234
	      echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
235

236
	  (Note that kernel size and overhead increase with this option
237 238 239
	  enabled. This option and the irqs-off timing option can be
	  used together or separately.)

240 241
config SCHED_TRACER
	bool "Scheduling Latency Tracer"
242
	select GENERIC_TRACER
243 244
	select CONTEXT_SWITCH_TRACER
	select TRACER_MAX_TRACE
245
	select TRACER_SNAPSHOT
246 247 248 249
	help
	  This tracer tracks the latency of the highest priority task
	  to be scheduled in, starting from the point it has woken up.

250 251 252 253 254
config HWLAT_TRACER
	bool "Tracer to detect hardware latencies (like SMIs)"
	select GENERIC_TRACER
	help
	 This tracer, when enabled will create one or more kernel threads,
255
	 depending on what the cpumask file is set to, which each thread
256 257 258 259 260 261 262 263 264 265 266 267 268 269
	 spinning in a loop looking for interruptions caused by
	 something other than the kernel. For example, if a
	 System Management Interrupt (SMI) takes a noticeable amount of
	 time, this tracer will detect it. This is useful for testing
	 if a system is reliable for Real Time tasks.

	 Some files are created in the tracing directory when this
	 is enabled:

	   hwlat_detector/width   - time in usecs for how long to spin for
	   hwlat_detector/window  - time in usecs between the start of each
				     iteration

	 A kernel thread is created that will spin with interrupts disabled
270
	 for "width" microseconds in every "window" cycle. It will not spin
271 272 273 274 275 276 277 278 279 280 281 282 283 284
	 for "window - width" microseconds, where the system can
	 continue to operate.

	 The output will appear in the trace and trace_pipe files.

	 When the tracer is not running, it has no affect on the system,
	 but when it is running, it can cause the system to be
	 periodically non responsive. Do not run this tracer on a
	 production system.

	 To enable this tracer, echo in "hwlat" into the current_tracer
	 file. Every time a latency is greater than tracing_thresh, it will
	 be recorded into the ring buffer.

285 286
config ENABLE_DEFAULT_TRACERS
	bool "Trace process context switches and events"
287
	depends on !GENERIC_TRACER
288 289
	select TRACING
	help
290
	  This tracer hooks to various trace points in the kernel,
291
	  allowing the user to pick and choose which trace point they
292
	  want to trace. It also includes the sched_switch tracer plugin.
293

294 295
config FTRACE_SYSCALLS
	bool "Trace syscalls"
296
	depends on HAVE_SYSCALL_TRACEPOINTS
297
	select GENERIC_TRACER
298
	select KALLSYMS
299 300 301
	help
	  Basic tracer to catch the syscall entry and exit events.

302 303 304 305 306 307 308 309 310 311
config TRACER_SNAPSHOT
	bool "Create a snapshot trace buffer"
	select TRACER_MAX_TRACE
	help
	  Allow tracing users to take snapshot of the current buffer using the
	  ftrace interface, e.g.:

	      echo 1 > /sys/kernel/debug/tracing/snapshot
	      cat snapshot

312
config TRACER_SNAPSHOT_PER_CPU_SWAP
313
	bool "Allow snapshot to swap per CPU"
314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332
	depends on TRACER_SNAPSHOT
	select RING_BUFFER_ALLOW_SWAP
	help
	  Allow doing a snapshot of a single CPU buffer instead of a
	  full swap (all buffers). If this is set, then the following is
	  allowed:

	      echo 1 > /sys/kernel/debug/tracing/per_cpu/cpu2/snapshot

	  After which, only the tracing buffer for CPU 2 was swapped with
	  the main tracing buffer, and the other CPU buffers remain the same.

	  When this is enabled, this adds a little more overhead to the
	  trace recording, as it needs to add some checks to synchronize
	  recording with swaps. But this does not affect the performance
	  of the overall system. This is enabled by default when the preempt
	  or irq latency tracers are enabled, as those need to swap as well
	  and already adds the overhead (plus a lot more).

333
config TRACE_BRANCH_PROFILING
334
	bool
335
	select GENERIC_TRACER
336 337 338 339 340 341 342 343 344 345 346

choice
	prompt "Branch Profiling"
	default BRANCH_PROFILE_NONE
	help
	 The branch profiling is a software profiler. It will add hooks
	 into the C conditionals to test which path a branch takes.

	 The likely/unlikely profiler only looks at the conditions that
	 are annotated with a likely or unlikely macro.

347
	 The "all branch" profiler will profile every if-statement in the
348
	 kernel. This profiler will also enable the likely/unlikely
349
	 profiler.
350

351 352
	 Either of the above profilers adds a bit of overhead to the system.
	 If unsure, choose "No branch profiling".
353 354 355 356

config BRANCH_PROFILE_NONE
	bool "No branch profiling"
	help
357 358 359
	  No branch profiling. Branch profiling adds a bit of overhead.
	  Only enable it if you want to analyse the branching behavior.
	  Otherwise keep it disabled.
360 361 362 363

config PROFILE_ANNOTATED_BRANCHES
	bool "Trace likely/unlikely profiler"
	select TRACE_BRANCH_PROFILING
364
	help
365
	  This tracer profiles all likely and unlikely macros
366 367
	  in the kernel. It will display the results in:

368
	  /sys/kernel/debug/tracing/trace_stat/branch_annotated
369

370
	  Note: this will add a significant overhead; only turn this
371 372
	  on if you need to profile the system's use of these macros.

373
config PROFILE_ALL_BRANCHES
374
	bool "Profile all if conditionals" if !FORTIFY_SOURCE
375
	select TRACE_BRANCH_PROFILING
376
	imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED  # avoid false positives
377 378 379 380 381
	help
	  This tracer profiles all branch conditions. Every if ()
	  taken in the kernel is recorded whether it hit or miss.
	  The results will be displayed in:

382
	  /sys/kernel/debug/tracing/trace_stat/branch_all
383

384 385
	  This option also enables the likely/unlikely profiler.

386 387
	  This configuration, when enabled, will impose a great overhead
	  on the system. This should only be enabled when the system
388
	  is to be analyzed in much detail.
389
endchoice
390

391
config TRACING_BRANCHES
392 393 394 395 396 397 398
	bool
	help
	  Selected by tracers that will trace the likely and unlikely
	  conditions. This prevents the tracers themselves from being
	  profiled. Profiling the tracing infrastructure can only happen
	  when the likelys and unlikelys are not being traced.

399
config BRANCH_TRACER
400
	bool "Trace likely/unlikely instances"
401 402
	depends on TRACE_BRANCH_PROFILING
	select TRACING_BRANCHES
403 404 405 406 407 408 409 410 411 412
	help
	  This traces the events of likely and unlikely condition
	  calls in the kernel.  The difference between this and the
	  "Trace likely/unlikely profiler" is that this is not a
	  histogram of the callers, but actually places the calling
	  events into a running trace buffer to see when and where the
	  events happened, as well as their results.

	  Say N if unsure.

Steven Rostedt's avatar
Steven Rostedt committed
413 414
config STACK_TRACER
	bool "Trace max stack"
415 416
	depends on HAVE_FUNCTION_TRACER
	select FUNCTION_TRACER
Steven Rostedt's avatar
Steven Rostedt committed
417
	select STACKTRACE
418
	select KALLSYMS
Steven Rostedt's avatar
Steven Rostedt committed
419
	help
420
	  This special tracer records the maximum stack footprint of the
421
	  kernel and displays it in /sys/kernel/debug/tracing/stack_trace.
422 423 424

	  This tracer works by hooking into every function call that the
	  kernel executes, and keeping a maximum stack depth value and
425 426 427 428 429 430 431 432 433
	  stack-trace saved.  If this is configured with DYNAMIC_FTRACE
	  then it will not have any overhead while the stack tracer
	  is disabled.

	  To enable the stack tracer on bootup, pass in 'stacktrace'
	  on the kernel command line.

	  The stack tracer can also be enabled or disabled via the
	  sysctl kernel.stack_tracer_enabled
434 435

	  Say N if unsure.
Steven Rostedt's avatar
Steven Rostedt committed
436

437
config BLK_DEV_IO_TRACE
438
	bool "Support for tracing block IO actions"
439
	depends on SYSFS
440
	depends on BLOCK
441 442 443
	select RELAY
	select DEBUG_FS
	select TRACEPOINTS
444
	select GENERIC_TRACER
445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460
	select STACKTRACE
	help
	  Say Y here if you want to be able to trace the block layer actions
	  on a given queue. Tracing allows you to see any traffic happening
	  on a block device queue. For more information (and the userspace
	  support tools needed), fetch the blktrace tools from:

	  git://git.kernel.dk/blktrace.git

	  Tracing also is possible using the ftrace interface, e.g.:

	    echo 1 > /sys/block/sda/sda1/trace/enable
	    echo blk > /sys/kernel/debug/tracing/current_tracer
	    cat /sys/kernel/debug/tracing/trace_pipe

	  If unsure, say N.
461

462
config KPROBE_EVENTS
463
	depends on KPROBES
464
	depends on HAVE_REGS_AND_STACK_ACCESS_API
465
	bool "Enable kprobes-based dynamic events"
466
	select TRACING
467
	select PROBE_EVENTS
468
	select DYNAMIC_EVENTS
469
	default y
470
	help
471 472
	  This allows the user to add tracing events (similar to tracepoints)
	  on the fly via the ftrace interface. See
473
	  Documentation/trace/kprobetrace.rst for more details.
474 475 476 477

	  Those events can be inserted wherever kprobes can probe, and record
	  various register and memory values.

478 479
	  This option is also required by perf-probe subcommand of perf tools.
	  If you want to use perf tools, this option is strongly recommended.
480

481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500
config KPROBE_EVENTS_ON_NOTRACE
	bool "Do NOT protect notrace function from kprobe events"
	depends on KPROBE_EVENTS
	depends on KPROBES_ON_FTRACE
	default n
	help
	  This is only for the developers who want to debug ftrace itself
	  using kprobe events.

	  If kprobes can use ftrace instead of breakpoint, ftrace related
	  functions are protected from kprobe-events to prevent an infinit
	  recursion or any unexpected execution path which leads to a kernel
	  crash.

	  This option disables such protection and allows you to put kprobe
	  events on ftrace functions for debugging ftrace by itself.
	  Note that this might let you shoot yourself in the foot.

	  If unsure, say N.

501
config UPROBE_EVENTS
502 503 504
	bool "Enable uprobes-based dynamic events"
	depends on ARCH_SUPPORTS_UPROBES
	depends on MMU
505
	depends on PERF_EVENTS
506 507
	select UPROBES
	select PROBE_EVENTS
508
	select DYNAMIC_EVENTS
509
	select TRACING
510
	default y
511 512 513 514 515 516 517 518
	help
	  This allows the user to add tracing events on top of userspace
	  dynamic events (similar to tracepoints) on the fly via the trace
	  events interface. Those events can be inserted wherever uprobes
	  can probe, and record various registers.
	  This option is required if you plan to use perf-probe subcommand
	  of perf tools on user space applications.

519 520
config BPF_EVENTS
	depends on BPF_SYSCALL
521
	depends on (KPROBE_EVENTS || UPROBE_EVENTS) && PERF_EVENTS
522 523 524
	bool
	default y
	help
525 526
	  This allows the user to attach BPF programs to kprobe, uprobe, and
	  tracepoint events.
527

528 529 530
config DYNAMIC_EVENTS
	def_bool n

531 532 533
config PROBE_EVENTS
	def_bool n

534
config DYNAMIC_FTRACE
535
	bool "enable/disable function tracing dynamically"
536
	depends on FUNCTION_TRACER
537
	depends on HAVE_DYNAMIC_FTRACE
538 539
	default y
	help
540 541 542 543 544 545 546 547 548 549 550 551 552
	  This option will modify all the calls to function tracing
	  dynamically (will patch them out of the binary image and
	  replace them with a No-Op instruction) on boot up. During
	  compile time, a table is made of all the locations that ftrace
	  can function trace, and this table is linked into the kernel
	  image. When this is enabled, functions can be individually
	  enabled, and the functions not enabled will not affect
	  performance of the system.

	  See the files in /sys/kernel/debug/tracing:
	    available_filter_functions
	    set_ftrace_filter
	    set_ftrace_notrace
553

554 555
	  This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but
	  otherwise has native performance as long as no tracing is active.
556

557 558 559 560 561
config DYNAMIC_FTRACE_WITH_REGS
	def_bool y
	depends on DYNAMIC_FTRACE
	depends on HAVE_DYNAMIC_FTRACE_WITH_REGS

562 563 564 565 566
config DYNAMIC_FTRACE_WITH_DIRECT_CALLS
	def_bool y
	depends on DYNAMIC_FTRACE
	depends on HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS

567 568
config FUNCTION_PROFILER
	bool "Kernel function profiler"
569
	depends on FUNCTION_TRACER
570 571
	default n
	help
572 573 574 575
	  This option enables the kernel function profiler. A file is created
	  in debugfs called function_profile_enabled which defaults to zero.
	  When a 1 is echoed into this file profiling begins, and when a
	  zero is entered, profiling stops. A "functions" file is created in
576
	  the trace_stat directory; this file shows the list of functions that
577
	  have been hit and their counters.
578

579
	  If in doubt, say N.
580

581 582 583
config BPF_KPROBE_OVERRIDE
	bool "Enable BPF programs to override a kprobed function"
	depends on BPF_EVENTS
584
	depends on FUNCTION_ERROR_INJECTION
585 586 587 588 589
	default n
	help
	 Allows BPF to override the execution of a probed function and
	 set a different return value.  This is used for error injection.

590 591 592 593 594
config FTRACE_MCOUNT_RECORD
	def_bool y
	depends on DYNAMIC_FTRACE
	depends on HAVE_FTRACE_MCOUNT_RECORD

Steven Rostedt's avatar
Steven Rostedt committed
595 596 597 598 599
config FTRACE_SELFTEST
	bool

config FTRACE_STARTUP_TEST
	bool "Perform a startup test on ftrace"
600
	depends on GENERIC_TRACER
Steven Rostedt's avatar
Steven Rostedt committed
601 602 603 604 605 606
	select FTRACE_SELFTEST
	help
	  This option performs a series of startup tests on ftrace. On bootup
	  a series of tests are made to verify that the tracer is
	  functioning properly. It will do tests on all the configured
	  tracers of ftrace.
607

608 609 610 611 612 613 614 615 616 617
config EVENT_TRACE_STARTUP_TEST
	bool "Run selftest on trace events"
	depends on FTRACE_STARTUP_TEST
	default y
	help
	  This option performs a test on all trace events in the system.
	  It basically just enables each event and runs some code that
	  will trigger events (not necessarily the event it enables)
	  This may take some time run as there are a lot of events.

618 619
config EVENT_TRACE_TEST_SYSCALLS
	bool "Run selftest on syscall events"
620
	depends on EVENT_TRACE_STARTUP_TEST
621 622 623 624 625 626 627 628 629
	help
	 This option will also enable testing every syscall event.
	 It only enables the event and disables it and runs various loads
	 with the event enabled. This adds a bit more time for kernel boot
	 up since it runs this on every system call defined.

	 TBD - enable a way to actually call the syscalls as we test their
	       events

630 631
config MMIOTRACE
	bool "Memory mapped IO tracing"
Ingo Molnar's avatar
Ingo Molnar committed
632
	depends on HAVE_MMIOTRACE_SUPPORT && PCI
633
	select GENERIC_TRACER
634 635 636 637 638 639
	help
	  Mmiotrace traces Memory Mapped I/O access and is meant for
	  debugging and reverse engineering. It is called from the ioremap
	  implementation and works via page faults. Tracing is disabled by
	  default and can be enabled at run-time.

640
	  See Documentation/trace/mmiotrace.rst.
641 642
	  If you are not helping to develop drivers, say N.

643 644 645 646 647 648 649 650 651 652
config TRACING_MAP
	bool
	depends on ARCH_HAVE_NMI_SAFE_CMPXCHG
	help
	  tracing_map is a special-purpose lock-free map for tracing,
	  separated out as a stand-alone facility in order to allow it
	  to be shared between multiple tracers.  It isn't meant to be
	  generally used outside of that context, and is normally
	  selected by tracers that use it.

653 654 655 656
config HIST_TRIGGERS
	bool "Histogram triggers"
	depends on ARCH_HAVE_NMI_SAFE_CMPXCHG
	select TRACING_MAP
657
	select TRACING
658
	select DYNAMIC_EVENTS
659 660 661 662 663 664 665 666 667
	default n
	help
	  Hist triggers allow one or more arbitrary trace event fields
	  to be aggregated into hash tables and dumped to stdout by
	  reading a debugfs/tracefs file.  They're useful for
	  gathering quick and dirty (though precise) summaries of
	  event activity as an initial guide for further investigation
	  using more advanced tools.

668 669 670
	  Inter-event tracing of quantities such as latencies is also
	  supported using hist triggers under this option.

671
	  See Documentation/trace/histogram.rst.
672 673
	  If in doubt, say N.

674 675 676 677 678 679 680 681 682
config TRACE_EVENT_INJECT
	bool "Trace event injection"
	depends on TRACING
	help
	  Allow user-space to inject a specific trace event into the ring
	  buffer. This is mainly used for testing purpose.

	  If unsure, say N.

683 684 685 686 687 688 689 690 691 692
config MMIOTRACE_TEST
	tristate "Test module for mmiotrace"
	depends on MMIOTRACE && m
	help
	  This is a dumb module for testing mmiotrace. It is very dangerous
	  as it will write garbage to IO memory starting at a given address.
	  However, it should be safe to use on e.g. unused portion of VRAM.

	  Say N, unless you absolutely know what you are doing.

693
config TRACEPOINT_BENCHMARK
694
	bool "Add tracepoint that benchmarks tracepoints"
695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722
	help
	 This option creates the tracepoint "benchmark:benchmark_event".
	 When the tracepoint is enabled, it kicks off a kernel thread that
	 goes into an infinite loop (calling cond_sched() to let other tasks
	 run), and calls the tracepoint. Each iteration will record the time
	 it took to write to the tracepoint and the next iteration that
	 data will be passed to the tracepoint itself. That is, the tracepoint
	 will report the time it took to do the previous tracepoint.
	 The string written to the tracepoint is a static string of 128 bytes
	 to keep the time the same. The initial string is simply a write of
	 "START". The second string records the cold cache time of the first
	 write which is not added to the rest of the calculations.

	 As it is a tight loop, it benchmarks as hot cache. That's fine because
	 we care most about hot paths that are probably in cache already.

	 An example of the output:

	      START
	      first=3672 [COLD CACHED]
	      last=632 first=3672 max=632 min=632 avg=316 std=446 std^2=199712
	      last=278 first=3672 max=632 min=278 avg=303 std=316 std^2=100337
	      last=277 first=3672 max=632 min=277 avg=296 std=258 std^2=67064
	      last=273 first=3672 max=632 min=273 avg=292 std=224 std^2=50411
	      last=273 first=3672 max=632 min=273 avg=288 std=200 std^2=40389
	      last=281 first=3672 max=632 min=273 avg=287 std=183 std^2=33666


723 724 725 726
config RING_BUFFER_BENCHMARK
	tristate "Ring buffer benchmark stress tester"
	depends on RING_BUFFER
	help
727 728
	  This option creates a test to stress the ring buffer and benchmark it.
	  It creates its own ring buffer such that it will not interfere with
729 730 731 732 733 734 735 736
	  any other users of the ring buffer (such as ftrace). It then creates
	  a producer and consumer that will run for 10 seconds and sleep for
	  10 seconds. Each interval it will print out the number of events
	  it recorded and give a rough estimate of how long each iteration took.

	  It does not disable interrupts or raise its priority, so it may be
	  affected by processes that are running.

737
	  If unsure, say N.
738

739 740 741 742
config RING_BUFFER_STARTUP_TEST
       bool "Ring buffer startup self test"
       depends on RING_BUFFER
       help
743
	 Run a simple self test on the ring buffer on boot up. Late in the
744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761
	 kernel boot sequence, the test will start that kicks off
	 a thread per cpu. Each thread will write various size events
	 into the ring buffer. Another thread is created to send IPIs
	 to each of the threads, where the IPI handler will also write
	 to the ring buffer, to test/stress the nesting ability.
	 If any anomalies are discovered, a warning will be displayed
	 and all ring buffers will be disabled.

	 The test runs for 10 seconds. This will slow your boot time
	 by at least 10 more seconds.

	 At the end of the test, statics and more checks are done.
	 It will output the stats of each per cpu buffer. What
	 was written, the sizes, what was read, what was lost, and
	 other similar details.

	 If unsure, say N

762 763 764 765 766 767 768 769 770
config PREEMPTIRQ_DELAY_TEST
	tristate "Preempt / IRQ disable delay thread to test latency tracers"
	depends on m
	help
	  Select this option to build a test module that can help test latency
	  tracers by executing a preempt or irq disable section with a user
	  configurable delay. The module busy waits for the duration of the
	  critical section.

771 772 773
	  For example, the following invocation generates a burst of three
	  irq-disabled critical sections for 500us:
	  modprobe preemptirq_delay_test test_mode=irq delay=500 burst_size=3
774 775 776

	  If unsure, say N

777 778 779 780 781 782 783 784 785 786 787 788 789
config SYNTH_EVENT_GEN_TEST
	tristate "Test module for in-kernel synthetic event generation"
	depends on HIST_TRIGGERS
	help
          This option creates a test module to check the base
          functionality of in-kernel synthetic event definition and
          generation.

          To test, insert the module, and then check the trace buffer
	  for the generated sample events.

	  If unsure, say N.

790 791
config TRACE_EVAL_MAP_FILE
       bool "Show eval mappings for trace events"
792 793
       depends on TRACING
       help
794
	The "print fmt" of the trace events will show the enum/sizeof names
795
	instead of their values. This can cause problems for user space tools
796
	that use this string to parse the raw data as user space does not know
797 798 799
	how to convert the string to its value.

	To fix this, there's a special macro in the kernel that can be used
800 801
	to convert an enum/sizeof into its value. If this macro is used, then
	the print fmt strings will be converted to their values.
802 803

	If something does not get converted properly, this option can be
804
	used to show what enums/sizeof the kernel tried to convert.
805

806 807
	This option is for debugging the conversions. A file is created
	in the tracing directory called "eval_map" that will show the
808 809 810 811 812
	names matched with their values and what trace event system they
	belong too.

	Normally, the mapping of the strings to values will be freed after
	boot up or module load. With this option, they will not be freed, as
813
	they are needed for the "eval_map" file. Enabling this option will
814 815
	increase the memory footprint of the running kernel.

816
	If unsure, say N.
817

818 819 820 821 822 823 824 825 826 827 828 829
config GCOV_PROFILE_FTRACE
	bool "Enable GCOV profiling on ftrace subsystem"
	depends on GCOV_KERNEL
	help
	  Enable GCOV profiling on ftrace subsystem for checking
	  which functions/lines are tested.

	  If unsure, say N.

	  Note that on a kernel compiled with this config, ftrace will
	  run significantly slower.

830 831 832 833 834 835 836 837 838
config BOOTTIME_TRACING
	bool "Boot-time Tracing support"
	depends on BOOT_CONFIG && TRACING
	default y
	help
	  Enable developer to setup ftrace subsystem via supplemental
	  kernel cmdline at boot time for debugging (tracing) driver
	  initialization and boot process.

839
endif # FTRACE
Ingo Molnar's avatar
Ingo Molnar committed
840 841 842

endif # TRACING_SUPPORT