Kconfig 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. #
  2. # Architectures that offer an FUNCTION_TRACER implementation should
  3. # select HAVE_FUNCTION_TRACER:
  4. #
  5. config USER_STACKTRACE_SUPPORT
  6. bool
  7. config NOP_TRACER
  8. bool
  9. config HAVE_FTRACE_NMI_ENTER
  10. bool
  11. config HAVE_FUNCTION_TRACER
  12. bool
  13. config HAVE_FUNCTION_GRAPH_TRACER
  14. bool
  15. config HAVE_FUNCTION_TRACE_MCOUNT_TEST
  16. bool
  17. help
  18. This gets selected when the arch tests the function_trace_stop
  19. variable at the mcount call site. Otherwise, this variable
  20. is tested by the called function.
  21. config HAVE_DYNAMIC_FTRACE
  22. bool
  23. config HAVE_FTRACE_MCOUNT_RECORD
  24. bool
  25. config HAVE_HW_BRANCH_TRACER
  26. bool
  27. config TRACER_MAX_TRACE
  28. bool
  29. config RING_BUFFER
  30. bool
  31. config FTRACE_NMI_ENTER
  32. bool
  33. depends on HAVE_FTRACE_NMI_ENTER
  34. default y
  35. config TRACING
  36. bool
  37. select DEBUG_FS
  38. select RING_BUFFER
  39. select STACKTRACE if STACKTRACE_SUPPORT
  40. select TRACEPOINTS
  41. select NOP_TRACER
  42. #
  43. # Minimum requirements an architecture has to meet for us to
  44. # be able to offer generic tracing facilities:
  45. #
  46. config TRACING_SUPPORT
  47. bool
  48. depends on TRACE_IRQFLAGS_SUPPORT
  49. depends on STACKTRACE_SUPPORT
  50. if TRACING_SUPPORT
  51. menu "Tracers"
  52. config FUNCTION_TRACER
  53. bool "Kernel Function Tracer"
  54. depends on HAVE_FUNCTION_TRACER
  55. select FRAME_POINTER
  56. select KALLSYMS
  57. select TRACING
  58. select CONTEXT_SWITCH_TRACER
  59. help
  60. Enable the kernel to trace every kernel function. This is done
  61. by using a compiler feature to insert a small, 5-byte No-Operation
  62. instruction to the beginning of every kernel function, which NOP
  63. sequence is then dynamically patched into a tracer call when
  64. tracing is enabled by the administrator. If it's runtime disabled
  65. (the bootup default), then the overhead of the instructions is very
  66. small and not measurable even in micro-benchmarks.
  67. config FUNCTION_GRAPH_TRACER
  68. bool "Kernel Function Graph Tracer"
  69. depends on HAVE_FUNCTION_GRAPH_TRACER
  70. depends on FUNCTION_TRACER
  71. default y
  72. help
  73. Enable the kernel to trace a function at both its return
  74. and its entry.
  75. It's first purpose is to trace the duration of functions and
  76. draw a call graph for each thread with some informations like
  77. the return value.
  78. This is done by setting the current return address on the current
  79. task structure into a stack of calls.
  80. config IRQSOFF_TRACER
  81. bool "Interrupts-off Latency Tracer"
  82. default n
  83. depends on TRACE_IRQFLAGS_SUPPORT
  84. depends on GENERIC_TIME
  85. select TRACE_IRQFLAGS
  86. select TRACING
  87. select TRACER_MAX_TRACE
  88. help
  89. This option measures the time spent in irqs-off critical
  90. sections, with microsecond accuracy.
  91. The default measurement method is a maximum search, which is
  92. disabled by default and can be runtime (re-)started
  93. via:
  94. echo 0 > /debugfs/tracing/tracing_max_latency
  95. (Note that kernel size and overhead increases with this option
  96. enabled. This option and the preempt-off timing option can be
  97. used together or separately.)
  98. config PREEMPT_TRACER
  99. bool "Preemption-off Latency Tracer"
  100. default n
  101. depends on GENERIC_TIME
  102. depends on PREEMPT
  103. select TRACING
  104. select TRACER_MAX_TRACE
  105. help
  106. This option measures the time spent in preemption off critical
  107. sections, with microsecond accuracy.
  108. The default measurement method is a maximum search, which is
  109. disabled by default and can be runtime (re-)started
  110. via:
  111. echo 0 > /debugfs/tracing/tracing_max_latency
  112. (Note that kernel size and overhead increases with this option
  113. enabled. This option and the irqs-off timing option can be
  114. used together or separately.)
  115. config SYSPROF_TRACER
  116. bool "Sysprof Tracer"
  117. depends on X86
  118. select TRACING
  119. select CONTEXT_SWITCH_TRACER
  120. help
  121. This tracer provides the trace needed by the 'Sysprof' userspace
  122. tool.
  123. config SCHED_TRACER
  124. bool "Scheduling Latency Tracer"
  125. select TRACING
  126. select CONTEXT_SWITCH_TRACER
  127. select TRACER_MAX_TRACE
  128. help
  129. This tracer tracks the latency of the highest priority task
  130. to be scheduled in, starting from the point it has woken up.
  131. config CONTEXT_SWITCH_TRACER
  132. bool "Trace process context switches"
  133. select TRACING
  134. select MARKERS
  135. help
  136. This tracer gets called from the context switch and records
  137. all switching of tasks.
  138. config EVENT_TRACER
  139. bool "Trace various events in the kernel"
  140. select TRACING
  141. help
  142. This tracer hooks to various trace points in the kernel
  143. allowing the user to pick and choose which trace point they
  144. want to trace.
  145. config BOOT_TRACER
  146. bool "Trace boot initcalls"
  147. select TRACING
  148. select CONTEXT_SWITCH_TRACER
  149. help
  150. This tracer helps developers to optimize boot times: it records
  151. the timings of the initcalls and traces key events and the identity
  152. of tasks that can cause boot delays, such as context-switches.
  153. Its aim is to be parsed by the /scripts/bootgraph.pl tool to
  154. produce pretty graphics about boot inefficiencies, giving a visual
  155. representation of the delays during initcalls - but the raw
  156. /debug/tracing/trace text output is readable too.
  157. You must pass in ftrace=initcall to the kernel command line
  158. to enable this on bootup.
  159. config TRACE_BRANCH_PROFILING
  160. bool "Trace likely/unlikely profiler"
  161. select TRACING
  162. help
  163. This tracer profiles all the the likely and unlikely macros
  164. in the kernel. It will display the results in:
  165. /debugfs/tracing/profile_annotated_branch
  166. Note: this will add a significant overhead, only turn this
  167. on if you need to profile the system's use of these macros.
  168. Say N if unsure.
  169. config PROFILE_ALL_BRANCHES
  170. bool "Profile all if conditionals"
  171. depends on TRACE_BRANCH_PROFILING
  172. help
  173. This tracer profiles all branch conditions. Every if ()
  174. taken in the kernel is recorded whether it hit or miss.
  175. The results will be displayed in:
  176. /debugfs/tracing/profile_branch
  177. This configuration, when enabled, will impose a great overhead
  178. on the system. This should only be enabled when the system
  179. is to be analyzed
  180. Say N if unsure.
  181. config TRACING_BRANCHES
  182. bool
  183. help
  184. Selected by tracers that will trace the likely and unlikely
  185. conditions. This prevents the tracers themselves from being
  186. profiled. Profiling the tracing infrastructure can only happen
  187. when the likelys and unlikelys are not being traced.
  188. config BRANCH_TRACER
  189. bool "Trace likely/unlikely instances"
  190. depends on TRACE_BRANCH_PROFILING
  191. select TRACING_BRANCHES
  192. help
  193. This traces the events of likely and unlikely condition
  194. calls in the kernel. The difference between this and the
  195. "Trace likely/unlikely profiler" is that this is not a
  196. histogram of the callers, but actually places the calling
  197. events into a running trace buffer to see when and where the
  198. events happened, as well as their results.
  199. Say N if unsure.
  200. config POWER_TRACER
  201. bool "Trace power consumption behavior"
  202. depends on X86
  203. select TRACING
  204. help
  205. This tracer helps developers to analyze and optimize the kernels
  206. power management decisions, specifically the C-state and P-state
  207. behavior.
  208. config STACK_TRACER
  209. bool "Trace max stack"
  210. depends on HAVE_FUNCTION_TRACER
  211. select FUNCTION_TRACER
  212. select STACKTRACE
  213. select KALLSYMS
  214. help
  215. This special tracer records the maximum stack footprint of the
  216. kernel and displays it in debugfs/tracing/stack_trace.
  217. This tracer works by hooking into every function call that the
  218. kernel executes, and keeping a maximum stack depth value and
  219. stack-trace saved. If this is configured with DYNAMIC_FTRACE
  220. then it will not have any overhead while the stack tracer
  221. is disabled.
  222. To enable the stack tracer on bootup, pass in 'stacktrace'
  223. on the kernel command line.
  224. The stack tracer can also be enabled or disabled via the
  225. sysctl kernel.stack_tracer_enabled
  226. Say N if unsure.
  227. config HW_BRANCH_TRACER
  228. depends on HAVE_HW_BRANCH_TRACER
  229. bool "Trace hw branches"
  230. select TRACING
  231. help
  232. This tracer records all branches on the system in a circular
  233. buffer giving access to the last N branches for each cpu.
  234. config KMEMTRACE
  235. bool "Trace SLAB allocations"
  236. select TRACING
  237. help
  238. kmemtrace provides tracing for slab allocator functions, such as
  239. kmalloc, kfree, kmem_cache_alloc, kmem_cache_free etc.. Collected
  240. data is then fed to the userspace application in order to analyse
  241. allocation hotspots, internal fragmentation and so on, making it
  242. possible to see how well an allocator performs, as well as debug
  243. and profile kernel code.
  244. This requires an userspace application to use. See
  245. Documentation/vm/kmemtrace.txt for more information.
  246. Saying Y will make the kernel somewhat larger and slower. However,
  247. if you disable kmemtrace at run-time or boot-time, the performance
  248. impact is minimal (depending on the arch the kernel is built for).
  249. If unsure, say N.
  250. config WORKQUEUE_TRACER
  251. bool "Trace workqueues"
  252. select TRACING
  253. help
  254. The workqueue tracer provides some statistical informations
  255. about each cpu workqueue thread such as the number of the
  256. works inserted and executed since their creation. It can help
  257. to evaluate the amount of work each of them have to perform.
  258. For example it can help a developer to decide whether he should
  259. choose a per cpu workqueue instead of a singlethreaded one.
  260. config BLK_DEV_IO_TRACE
  261. bool "Support for tracing block io actions"
  262. depends on SYSFS
  263. depends on BLOCK
  264. select RELAY
  265. select DEBUG_FS
  266. select TRACEPOINTS
  267. select TRACING
  268. select STACKTRACE
  269. help
  270. Say Y here if you want to be able to trace the block layer actions
  271. on a given queue. Tracing allows you to see any traffic happening
  272. on a block device queue. For more information (and the userspace
  273. support tools needed), fetch the blktrace tools from:
  274. git://git.kernel.dk/blktrace.git
  275. Tracing also is possible using the ftrace interface, e.g.:
  276. echo 1 > /sys/block/sda/sda1/trace/enable
  277. echo blk > /sys/kernel/debug/tracing/current_tracer
  278. cat /sys/kernel/debug/tracing/trace_pipe
  279. If unsure, say N.
  280. config DYNAMIC_FTRACE
  281. bool "enable/disable ftrace tracepoints dynamically"
  282. depends on FUNCTION_TRACER
  283. depends on HAVE_DYNAMIC_FTRACE
  284. default y
  285. help
  286. This option will modify all the calls to ftrace dynamically
  287. (will patch them out of the binary image and replaces them
  288. with a No-Op instruction) as they are called. A table is
  289. created to dynamically enable them again.
  290. This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise
  291. has native performance as long as no tracing is active.
  292. The changes to the code are done by a kernel thread that
  293. wakes up once a second and checks to see if any ftrace calls
  294. were made. If so, it runs stop_machine (stops all CPUS)
  295. and modifies the code to jump over the call to ftrace.
  296. config FTRACE_MCOUNT_RECORD
  297. def_bool y
  298. depends on DYNAMIC_FTRACE
  299. depends on HAVE_FTRACE_MCOUNT_RECORD
  300. config FTRACE_SELFTEST
  301. bool
  302. config FTRACE_STARTUP_TEST
  303. bool "Perform a startup test on ftrace"
  304. depends on TRACING
  305. select FTRACE_SELFTEST
  306. help
  307. This option performs a series of startup tests on ftrace. On bootup
  308. a series of tests are made to verify that the tracer is
  309. functioning properly. It will do tests on all the configured
  310. tracers of ftrace.
  311. config MMIOTRACE
  312. bool "Memory mapped IO tracing"
  313. depends on HAVE_MMIOTRACE_SUPPORT && PCI
  314. select TRACING
  315. help
  316. Mmiotrace traces Memory Mapped I/O access and is meant for
  317. debugging and reverse engineering. It is called from the ioremap
  318. implementation and works via page faults. Tracing is disabled by
  319. default and can be enabled at run-time.
  320. See Documentation/tracers/mmiotrace.txt.
  321. If you are not helping to develop drivers, say N.
  322. config MMIOTRACE_TEST
  323. tristate "Test module for mmiotrace"
  324. depends on MMIOTRACE && m
  325. help
  326. This is a dumb module for testing mmiotrace. It is very dangerous
  327. as it will write garbage to IO memory starting at a given address.
  328. However, it should be safe to use on e.g. unused portion of VRAM.
  329. Say N, unless you absolutely know what you are doing.
  330. endmenu
  331. endif # TRACING_SUPPORT