1197 lines · 38.8 KB · Text
RawDownload
# SPDX-License-Identifier: GPL-2.0-only## Architectures that offer an FUNCTION_TRACER implementation should#  select HAVE_FUNCTION_TRACER:# config USER_STACKTRACE_SUPPORT	bool config NOP_TRACER	bool config HAVE_RETHOOK	bool config RETHOOK	bool	depends on HAVE_RETHOOK	help	  Enable generic return hooking feature. This is an internal	  API, which will be used by other function-entry hooking	  features like fprobe and kprobes. config HAVE_FUNCTION_TRACER	bool	help	  See Documentation/trace/ftrace-design.rst config HAVE_FUNCTION_GRAPH_TRACER	bool	help	  See Documentation/trace/ftrace-design.rst config HAVE_FUNCTION_GRAPH_RETVAL	bool config HAVE_DYNAMIC_FTRACE	bool	help	  See Documentation/trace/ftrace-design.rst config HAVE_DYNAMIC_FTRACE_WITH_REGS	bool config HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS	bool config HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS	bool config HAVE_DYNAMIC_FTRACE_WITH_ARGS	bool	help	 If this is set, then arguments and stack can be found from	 the ftrace_regs passed into the function callback regs parameter	 by default, even without setting the REGS flag in the ftrace_ops.	 This allows for use of ftrace_regs_get_argument() and	 ftrace_regs_get_stack_pointer(). config HAVE_DYNAMIC_FTRACE_NO_PATCHABLE	bool	help	  If the architecture generates __patchable_function_entries sections	  but does not want them included in the ftrace locations. config HAVE_FTRACE_MCOUNT_RECORD	bool	help	  See Documentation/trace/ftrace-design.rst config HAVE_SYSCALL_TRACEPOINTS	bool	help	  See Documentation/trace/ftrace-design.rst config HAVE_FENTRY	bool	help	  Arch supports the gcc options -pg with -mfentry config HAVE_NOP_MCOUNT	bool	help	  Arch supports the gcc options -pg with -mrecord-mcount and -nop-mcount config HAVE_OBJTOOL_MCOUNT	bool	help	  Arch supports objtool --mcount config HAVE_OBJTOOL_NOP_MCOUNT	bool	help	  Arch supports the objtool options --mcount with --mnop.	  An architecture can select this if it wants to enable nop'ing	  of ftrace locations. config HAVE_C_RECORDMCOUNT	bool	help	  C version of recordmcount available? config HAVE_BUILDTIME_MCOUNT_SORT       bool       help         An architecture selects this if it sorts the mcount_loc section	 at build time. config BUILDTIME_MCOUNT_SORT       bool       default y       depends on HAVE_BUILDTIME_MCOUNT_SORT && DYNAMIC_FTRACE       help         Sort the mcount_loc section at build time. config TRACER_MAX_TRACE	bool config TRACE_CLOCK	bool config RING_BUFFER	bool	select TRACE_CLOCK	select IRQ_WORK config EVENT_TRACING	select CONTEXT_SWITCH_TRACER	select GLOB	bool config CONTEXT_SWITCH_TRACER	bool config RING_BUFFER_ALLOW_SWAP	bool	help	 Allow the use of ring_buffer_swap_cpu.	 Adds a very slight overhead to tracing when enabled. 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. # 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# hiding of the automatic options. config TRACING	bool	select RING_BUFFER	select STACKTRACE if STACKTRACE_SUPPORT	select TRACEPOINTS	select NOP_TRACER	select BINARY_PRINTF	select EVENT_TRACING	select TRACE_CLOCK	select NEED_TASKS_RCU config GENERIC_TRACER	bool	select TRACING ## Minimum requirements an architecture has to meet for us to# be able to offer generic tracing facilities:#config TRACING_SUPPORT	bool	depends on TRACE_IRQFLAGS_SUPPORT	depends on STACKTRACE_SUPPORT	default y menuconfig FTRACE	bool "Tracers"	depends on TRACING_SUPPORT	default y if DEBUG_KERNEL	help	  Enable the kernel tracing infrastructure. if FTRACE config BOOTTIME_TRACING	bool "Boot-time Tracing support"	depends on TRACING	select BOOT_CONFIG	help	  Enable developer to setup ftrace subsystem via supplemental	  kernel cmdline at boot time for debugging (tracing) driver	  initialization and boot process. config FUNCTION_TRACER	bool "Kernel Function Tracer"	depends on HAVE_FUNCTION_TRACER	select KALLSYMS	select GENERIC_TRACER	select CONTEXT_SWITCH_TRACER	select GLOB	select NEED_TASKS_RCU	select TASKS_RUDE_RCU	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	  instruction at the beginning of every kernel function, which NOP	  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 (at least on	  x86, but may have impact on other architectures). config FUNCTION_GRAPH_TRACER	bool "Kernel Function Graph Tracer"	depends on HAVE_FUNCTION_GRAPH_TRACER	depends on FUNCTION_TRACER	depends on !X86_32 || !CC_OPTIMIZE_FOR_SIZE	default y	help	  Enable the kernel to trace a function at both its return	  and its entry.	  Its first purpose is to trace the duration of functions and	  draw a call graph for each thread with some information like	  the return value. This is done by setting the current return	  address on the current task structure into a stack of calls. config FUNCTION_GRAPH_RETVAL	bool "Kernel Function Graph Return Value"	depends on HAVE_FUNCTION_GRAPH_RETVAL	depends on FUNCTION_GRAPH_TRACER	default n	help	  Support recording and printing the function return value when	  using function graph tracer. It can be helpful to locate functions	  that return errors. This feature is off by default, and you can	  enable it via the trace option funcgraph-retval.	  See Documentation/trace/ftrace.rst config FUNCTION_GRAPH_RETADDR	bool "Kernel Function Graph Return Address"	depends on FUNCTION_GRAPH_TRACER	default n	help	  Support recording and printing the function return address when	  using function graph tracer. It can be helpful to locate code line that	  the function is called. This feature is off by default, and you can	  enable it via the trace option funcgraph-retaddr. config DYNAMIC_FTRACE	bool "enable/disable function tracing dynamically"	depends on FUNCTION_TRACER	depends on HAVE_DYNAMIC_FTRACE	default y	help	  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/tracing:	    available_filter_functions	    set_ftrace_filter	    set_ftrace_notrace 	  This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but	  otherwise has native performance as long as no tracing is active. config DYNAMIC_FTRACE_WITH_REGS	def_bool y	depends on DYNAMIC_FTRACE	depends on HAVE_DYNAMIC_FTRACE_WITH_REGS config DYNAMIC_FTRACE_WITH_DIRECT_CALLS	def_bool y	depends on DYNAMIC_FTRACE_WITH_REGS || DYNAMIC_FTRACE_WITH_ARGS	depends on HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS config DYNAMIC_FTRACE_WITH_CALL_OPS	def_bool y	depends on HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS config DYNAMIC_FTRACE_WITH_ARGS	def_bool y	depends on DYNAMIC_FTRACE	depends on HAVE_DYNAMIC_FTRACE_WITH_ARGS config FPROBE	bool "Kernel Function Probe (fprobe)"	depends on FUNCTION_TRACER	depends on DYNAMIC_FTRACE_WITH_REGS	depends on HAVE_RETHOOK	select RETHOOK	default n	help	  This option enables kernel function probe (fprobe) based on ftrace.	  The fprobe is similar to kprobes, but probes only for kernel function	  entries and exits. This also can probe multiple functions by one	  fprobe. 	  If unsure, say N. config FUNCTION_PROFILER	bool "Kernel function profiler"	depends on FUNCTION_TRACER	default n	help	  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	  the trace_stat directory; this file shows the list of functions that	  have been hit and their counters. 	  If in doubt, say N. config STACK_TRACER	bool "Trace max stack"	depends on HAVE_FUNCTION_TRACER	select FUNCTION_TRACER	select STACKTRACE	select KALLSYMS	help	  This special tracer records the maximum stack footprint of the	  kernel and displays it in /sys/kernel/tracing/stack_trace. 	  This tracer works by hooking into every function call that the	  kernel executes, and keeping a maximum stack depth value and	  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 	  Say N if unsure. config TRACE_PREEMPT_TOGGLE	bool	help	  Enables hooks which will be called when preemption is first disabled,	  and last enabled. config IRQSOFF_TRACER	bool "Interrupts-off Latency Tracer"	default n	depends on TRACE_IRQFLAGS_SUPPORT	select TRACE_IRQFLAGS	select GENERIC_TRACER	select TRACER_MAX_TRACE	select RING_BUFFER_ALLOW_SWAP	select TRACER_SNAPSHOT	select TRACER_SNAPSHOT_PER_CPU_SWAP	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: 	      echo 0 > /sys/kernel/tracing/tracing_max_latency 	  (Note that kernel size and overhead increase with this option	  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	depends on PREEMPTION	select GENERIC_TRACER	select TRACER_MAX_TRACE	select RING_BUFFER_ALLOW_SWAP	select TRACER_SNAPSHOT	select TRACER_SNAPSHOT_PER_CPU_SWAP	select TRACE_PREEMPT_TOGGLE	help	  This option measures the time spent in preemption-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: 	      echo 0 > /sys/kernel/tracing/tracing_max_latency 	  (Note that kernel size and overhead increase with this option	  enabled. This option and the irqs-off timing option can be	  used together or separately.) config SCHED_TRACER	bool "Scheduling Latency Tracer"	select GENERIC_TRACER	select CONTEXT_SWITCH_TRACER	select TRACER_MAX_TRACE	select TRACER_SNAPSHOT	help	  This tracer tracks the latency of the highest priority task	  to be scheduled in, starting from the point it has woken up. config HWLAT_TRACER	bool "Tracer to detect hardware latencies (like SMIs)"	select GENERIC_TRACER	select TRACER_MAX_TRACE	help	 This tracer, when enabled will create one or more kernel threads,	 depending on what the cpumask file is set to, which each thread	 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	 for "width" microseconds in every "window" cycle. It will not spin	 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. config OSNOISE_TRACER	bool "OS Noise tracer"	select GENERIC_TRACER	select TRACER_MAX_TRACE	help	  In the context of high-performance computing (HPC), the Operating	  System Noise (osnoise) refers to the interference experienced by an	  application due to activities inside the operating system. In the	  context of Linux, NMIs, IRQs, SoftIRQs, and any other system thread	  can cause noise to the system. Moreover, hardware-related jobs can	  also cause noise, for example, via SMIs. 	  The osnoise tracer leverages the hwlat_detector by running a similar	  loop with preemption, SoftIRQs and IRQs enabled, thus allowing all	  the sources of osnoise during its execution. The osnoise tracer takes	  note of the entry and exit point of any source of interferences,	  increasing a per-cpu interference counter. It saves an interference	  counter for each source of interference. The interference counter for	  NMI, IRQs, SoftIRQs, and threads is increased anytime the tool	  observes these interferences' entry events. When a noise happens	  without any interference from the operating system level, the	  hardware noise counter increases, pointing to a hardware-related	  noise. In this way, osnoise can account for any source of	  interference. At the end of the period, the osnoise tracer prints	  the sum of all noise, the max single noise, the percentage of CPU	  available for the thread, and the counters for the noise sources. 	  In addition to the tracer, a set of tracepoints were added to	  facilitate the identification of the osnoise source. 	  The output will appear in the trace and trace_pipe files. 	  To enable this tracer, echo in "osnoise" into the current_tracer          file. config TIMERLAT_TRACER	bool "Timerlat tracer"	select OSNOISE_TRACER	select GENERIC_TRACER	help	  The timerlat tracer aims to help the preemptive kernel developers	  to find sources of wakeup latencies of real-time threads. 	  The tracer creates a per-cpu kernel thread with real-time priority.	  The tracer thread sets a periodic timer to wakeup itself, and goes	  to sleep waiting for the timer to fire. At the wakeup, the thread	  then computes a wakeup latency value as the difference between	  the current time and the absolute time that the timer was set	  to expire. 	  The tracer prints two lines at every activation. The first is the

Lines 1–500 of 1197.