~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/trace/boottime-trace.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/trace/boottime-trace.rst (Version linux-6.12-rc7) and /Documentation/trace/boottime-trace.rst (Version linux-5.10.229)


  1 .. SPDX-License-Identifier: GPL-2.0                 1 .. SPDX-License-Identifier: GPL-2.0
  2                                                     2 
  3 =================                                   3 =================
  4 Boot-time tracing                                   4 Boot-time tracing
  5 =================                                   5 =================
  6                                                     6 
  7 :Author: Masami Hiramatsu <mhiramat@kernel.org>      7 :Author: Masami Hiramatsu <mhiramat@kernel.org>
  8                                                     8 
  9 Overview                                            9 Overview
 10 ========                                           10 ========
 11                                                    11 
 12 Boot-time tracing allows users to trace boot-t     12 Boot-time tracing allows users to trace boot-time process including
 13 device initialization with full features of ft     13 device initialization with full features of ftrace including per-event
 14 filter and actions, histograms, kprobe-events      14 filter and actions, histograms, kprobe-events and synthetic-events,
 15 and trace instances.                               15 and trace instances.
 16 Since kernel command line is not enough to con     16 Since kernel command line is not enough to control these complex features,
 17 this uses bootconfig file to describe tracing      17 this uses bootconfig file to describe tracing feature programming.
 18                                                    18 
 19 Options in the Boot Config                         19 Options in the Boot Config
 20 ==========================                         20 ==========================
 21                                                    21 
 22 Here is the list of available options list for     22 Here is the list of available options list for boot time tracing in
 23 boot config file [1]_. All options are under "     23 boot config file [1]_. All options are under "ftrace." or "kernel."
 24 prefix. See kernel parameters for the options      24 prefix. See kernel parameters for the options which starts
 25 with "kernel." prefix [2]_.                        25 with "kernel." prefix [2]_.
 26                                                    26 
 27 .. [1] See :ref:`Documentation/admin-guide/boo     27 .. [1] See :ref:`Documentation/admin-guide/bootconfig.rst <bootconfig>`
 28 .. [2] See :ref:`Documentation/admin-guide/ker     28 .. [2] See :ref:`Documentation/admin-guide/kernel-parameters.rst <kernelparameters>`
 29                                                    29 
 30 Ftrace Global Options                              30 Ftrace Global Options
 31 ---------------------                              31 ---------------------
 32                                                    32 
 33 Ftrace global options have "kernel." prefix in     33 Ftrace global options have "kernel." prefix in boot config, which means
 34 these options are passed as a part of kernel l     34 these options are passed as a part of kernel legacy command line.
 35                                                    35 
 36 kernel.tp_printk                                   36 kernel.tp_printk
 37    Output trace-event data on printk buffer to     37    Output trace-event data on printk buffer too.
 38                                                    38 
 39 kernel.dump_on_oops [= MODE]                       39 kernel.dump_on_oops [= MODE]
 40    Dump ftrace on Oops. If MODE = 1 or omitted     40    Dump ftrace on Oops. If MODE = 1 or omitted, dump trace buffer
 41    on all CPUs. If MODE = 2, dump a buffer on      41    on all CPUs. If MODE = 2, dump a buffer on a CPU which kicks Oops.
 42                                                    42 
 43 kernel.traceoff_on_warning                         43 kernel.traceoff_on_warning
 44    Stop tracing if WARN_ON() occurs.               44    Stop tracing if WARN_ON() occurs.
 45                                                    45 
 46 kernel.fgraph_max_depth = MAX_DEPTH                46 kernel.fgraph_max_depth = MAX_DEPTH
 47    Set MAX_DEPTH to maximum depth of fgraph tr     47    Set MAX_DEPTH to maximum depth of fgraph tracer.
 48                                                    48 
 49 kernel.fgraph_filters = FILTER[, FILTER2...]       49 kernel.fgraph_filters = FILTER[, FILTER2...]
 50    Add fgraph tracing function filters.            50    Add fgraph tracing function filters.
 51                                                    51 
 52 kernel.fgraph_notraces = FILTER[, FILTER2...]      52 kernel.fgraph_notraces = FILTER[, FILTER2...]
 53    Add fgraph non-tracing function filters.        53    Add fgraph non-tracing function filters.
 54                                                    54 
 55                                                    55 
 56 Ftrace Per-instance Options                        56 Ftrace Per-instance Options
 57 ---------------------------                        57 ---------------------------
 58                                                    58 
 59 These options can be used for each instance in     59 These options can be used for each instance including global ftrace node.
 60                                                    60 
 61 ftrace.[instance.INSTANCE.]options = OPT1[, OP     61 ftrace.[instance.INSTANCE.]options = OPT1[, OPT2[...]]
 62    Enable given ftrace options.                    62    Enable given ftrace options.
 63                                                    63 
 64 ftrace.[instance.INSTANCE.]tracing_on = 0|1        64 ftrace.[instance.INSTANCE.]tracing_on = 0|1
 65    Enable/Disable tracing on this instance whe     65    Enable/Disable tracing on this instance when starting boot-time tracing.
 66    (you can enable it by the "traceon" event t     66    (you can enable it by the "traceon" event trigger action)
 67                                                    67 
 68 ftrace.[instance.INSTANCE.]trace_clock = CLOCK     68 ftrace.[instance.INSTANCE.]trace_clock = CLOCK
 69    Set given CLOCK to ftrace's trace_clock.        69    Set given CLOCK to ftrace's trace_clock.
 70                                                    70 
 71 ftrace.[instance.INSTANCE.]buffer_size = SIZE      71 ftrace.[instance.INSTANCE.]buffer_size = SIZE
 72    Configure ftrace buffer size to SIZE. You c     72    Configure ftrace buffer size to SIZE. You can use "KB" or "MB"
 73    for that SIZE.                                  73    for that SIZE.
 74                                                    74 
 75 ftrace.[instance.INSTANCE.]alloc_snapshot          75 ftrace.[instance.INSTANCE.]alloc_snapshot
 76    Allocate snapshot buffer.                       76    Allocate snapshot buffer.
 77                                                    77 
 78 ftrace.[instance.INSTANCE.]cpumask = CPUMASK       78 ftrace.[instance.INSTANCE.]cpumask = CPUMASK
 79    Set CPUMASK as trace cpu-mask.                  79    Set CPUMASK as trace cpu-mask.
 80                                                    80 
 81 ftrace.[instance.INSTANCE.]events = EVENT[, EV     81 ftrace.[instance.INSTANCE.]events = EVENT[, EVENT2[...]]
 82    Enable given events on boot. You can use a      82    Enable given events on boot. You can use a wild card in EVENT.
 83                                                    83 
 84 ftrace.[instance.INSTANCE.]tracer = TRACER         84 ftrace.[instance.INSTANCE.]tracer = TRACER
 85    Set TRACER to current tracer on boot. (e.g.     85    Set TRACER to current tracer on boot. (e.g. function)
 86                                                    86 
 87 ftrace.[instance.INSTANCE.]ftrace.filters          87 ftrace.[instance.INSTANCE.]ftrace.filters
 88    This will take an array of tracing function     88    This will take an array of tracing function filter rules.
 89                                                    89 
 90 ftrace.[instance.INSTANCE.]ftrace.notraces         90 ftrace.[instance.INSTANCE.]ftrace.notraces
 91    This will take an array of NON-tracing func     91    This will take an array of NON-tracing function filter rules.
 92                                                    92 
 93                                                    93 
 94 Ftrace Per-Event Options                           94 Ftrace Per-Event Options
 95 ------------------------                           95 ------------------------
 96                                                    96 
 97 These options are setting per-event options.       97 These options are setting per-event options.
 98                                                    98 
 99 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.e     99 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.enable
100    Enable GROUP:EVENT tracing.                    100    Enable GROUP:EVENT tracing.
101                                                   101 
102 ftrace.[instance.INSTANCE.]event.GROUP.enable  << 
103    Enable all event tracing within GROUP.      << 
104                                                << 
105 ftrace.[instance.INSTANCE.]event.enable        << 
106    Enable all event tracing.                   << 
107                                                << 
108 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.f    102 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.filter = FILTER
109    Set FILTER rule to the GROUP:EVENT.            103    Set FILTER rule to the GROUP:EVENT.
110                                                   104 
111 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.a    105 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.actions = ACTION[, ACTION2[...]]
112    Set ACTIONs to the GROUP:EVENT.                106    Set ACTIONs to the GROUP:EVENT.
113                                                   107 
114 ftrace.[instance.INSTANCE.]event.kprobes.EVENT    108 ftrace.[instance.INSTANCE.]event.kprobes.EVENT.probes = PROBE[, PROBE2[...]]
115    Defines new kprobe event based on PROBEs. I    109    Defines new kprobe event based on PROBEs. It is able to define
116    multiple probes on one event, but those mus    110    multiple probes on one event, but those must have same type of
117    arguments. This option is available only fo    111    arguments. This option is available only for the event which
118    group name is "kprobes".                       112    group name is "kprobes".
119                                                   113 
120 ftrace.[instance.INSTANCE.]event.synthetic.EVE    114 ftrace.[instance.INSTANCE.]event.synthetic.EVENT.fields = FIELD[, FIELD2[...]]
121    Defines new synthetic event with FIELDs. Ea    115    Defines new synthetic event with FIELDs. Each field should be
122    "type varname".                                116    "type varname".
123                                                   117 
124 Note that kprobe and synthetic event definitio    118 Note that kprobe and synthetic event definitions can be written under
125 instance node, but those are also visible from    119 instance node, but those are also visible from other instances. So please
126 take care for event name conflict.                120 take care for event name conflict.
127                                                   121 
128 Ftrace Histogram Options                       << 
129 ------------------------                       << 
130                                                << 
131 Since it is too long to write a histogram acti << 
132 action option, there are tree-style options un << 
133 for the histogram actions. For the detail of t << 
134 please read the event histogram document (Docu << 
135                                                << 
136 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
137   Set histogram key parameters. (Mandatory)    << 
138   The 'N' is a digit string for the multiple h << 
139   if there is one histogram on the event.      << 
140                                                << 
141 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
142   Set histogram value parameters.              << 
143                                                << 
144 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
145   Set histogram sort parameter options.        << 
146                                                << 
147 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
148   Set histogram size (number of entries).      << 
149                                                << 
150 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
151   Set histogram name.                          << 
152                                                << 
153 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
154   Define a new VARIABLE by EXPR expression.    << 
155                                                << 
156 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
157   Set histogram control parameter. You can set << 
158                                                << 
159 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
160   Set histogram 'onmatch' handler matching eve << 
161   The 'M' is a digit string for the multiple ' << 
162   if there is one 'onmatch' handler on this hi << 
163                                                << 
164 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
165   Set histogram 'trace' action for 'onmatch'.  << 
166   EVENT must be a synthetic event name, and AR << 
167   for that event. Mandatory if 'onmatch.event' << 
168                                                << 
169 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
170   Set histogram 'onmax' handler variable param << 
171                                                << 
172 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
173   Set histogram 'onchange' handler variable pa << 
174                                                << 
175 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
176   Set histogram 'save' action parameters for ' << 
177   This option or below 'snapshot' option is ma << 
178   'onchange.var' option is set.                << 
179                                                << 
180 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
181   Set histogram 'snapshot' action for 'onmax'  << 
182   This option or above 'save' option is mandat << 
183   'onchange.var' option is set.                << 
184                                                << 
185 ftrace.[instance.INSTANCE.]event.GROUP.EVENT.h << 
186   Set histogram filter expression. You don't n << 
187                                                << 
188 Note that this 'hist' option can conflict with << 
189 option if the 'actions' option has a histogram << 
190                                                << 
191                                                   122 
192 When to Start                                     123 When to Start
193 =============                                     124 =============
194                                                   125 
195 All boot-time tracing options starting with ``    126 All boot-time tracing options starting with ``ftrace`` will be enabled at the
196 end of core_initcall. This means you can trace    127 end of core_initcall. This means you can trace the events from postcore_initcall.
197 Most of the subsystems and architecture depend    128 Most of the subsystems and architecture dependent drivers will be initialized
198 after that (arch_initcall or subsys_initcall).    129 after that (arch_initcall or subsys_initcall). Thus, you can trace those with
199 boot-time tracing.                                130 boot-time tracing.
200 If you want to trace events before core_initca    131 If you want to trace events before core_initcall, you can use the options
201 starting with ``kernel``. Some of them will be    132 starting with ``kernel``. Some of them will be enabled eariler than the initcall
202 processing (for example,. ``kernel.ftrace=func    133 processing (for example,. ``kernel.ftrace=function`` and ``kernel.trace_event``
203 will start before the initcall.)                  134 will start before the initcall.)
204                                                   135 
205                                                   136 
206 Examples                                          137 Examples
207 ========                                          138 ========
208                                                   139 
209 For example, to add filter and actions for eac    140 For example, to add filter and actions for each event, define kprobe
210 events, and synthetic events with histogram, w    141 events, and synthetic events with histogram, write a boot config like
211 below::                                           142 below::
212                                                   143 
213   ftrace.event {                                  144   ftrace.event {
214         task.task_newtask {                       145         task.task_newtask {
215                 filter = "pid < 128"              146                 filter = "pid < 128"
216                 enable                            147                 enable
217         }                                         148         }
218         kprobes.vfs_read {                        149         kprobes.vfs_read {
219                 probes = "vfs_read $arg1 $arg2    150                 probes = "vfs_read $arg1 $arg2"
220                 filter = "common_pid < 200"       151                 filter = "common_pid < 200"
221                 enable                            152                 enable
222         }                                         153         }
223         synthetic.initcall_latency {              154         synthetic.initcall_latency {
224                 fields = "unsigned long func",    155                 fields = "unsigned long func", "u64 lat"
225                 hist {                         !! 156                 actions = "hist:keys=func.sym,lat:vals=lat:sort=lat"
226                         keys = func.sym, lat   << 
227                         values = lat           << 
228                         sort = lat             << 
229                 }                              << 
230         }                                         157         }
231         initcall.initcall_start.hist {         !! 158         initcall.initcall_start {
232                 keys = func                    !! 159                 actions = "hist:keys=func:ts0=common_timestamp.usecs"
233                 var.ts0 = common_timestamp.use << 
234         }                                         160         }
235         initcall.initcall_finish.hist {        !! 161         initcall.initcall_finish {
236                 keys = func                    !! 162                 actions = "hist:keys=func:lat=common_timestamp.usecs-$ts0:onmatch(initcall.initcall_start).initcall_latency(func,$lat)"
237                 var.lat = common_timestamp.use << 
238                 onmatch {                      << 
239                         event = initcall.initc << 
240                         trace = initcall_laten << 
241                 }                              << 
242         }                                         163         }
243   }                                               164   }
244                                                   165 
245 Also, boot-time tracing supports "instance" no    166 Also, boot-time tracing supports "instance" node, which allows us to run
246 several tracers for different purpose at once.    167 several tracers for different purpose at once. For example, one tracer
247 is for tracing functions starting with "user\_    168 is for tracing functions starting with "user\_", and others tracing
248 "kernel\_" functions, you can write boot confi    169 "kernel\_" functions, you can write boot config as below::
249                                                   170 
250   ftrace.instance {                               171   ftrace.instance {
251         foo {                                     172         foo {
252                 tracer = "function"               173                 tracer = "function"
253                 ftrace.filters = "user_*"         174                 ftrace.filters = "user_*"
254         }                                         175         }
255         bar {                                     176         bar {
256                 tracer = "function"               177                 tracer = "function"
257                 ftrace.filters = "kernel_*"       178                 ftrace.filters = "kernel_*"
258         }                                         179         }
259   }                                               180   }
260                                                   181 
261 The instance node also accepts event nodes so     182 The instance node also accepts event nodes so that each instance
262 can customize its event tracing.                  183 can customize its event tracing.
263                                                   184 
264 With the trigger action and kprobes, you can t    185 With the trigger action and kprobes, you can trace function-graph while
265 a function is called. For example, this will t    186 a function is called. For example, this will trace all function calls in
266 the pci_proc_init()::                             187 the pci_proc_init()::
267                                                   188 
268   ftrace {                                        189   ftrace {
269         tracing_on = 0                            190         tracing_on = 0
270         tracer = function_graph                   191         tracer = function_graph
271         event.kprobes {                           192         event.kprobes {
272                 start_event {                     193                 start_event {
273                         probes = "pci_proc_ini    194                         probes = "pci_proc_init"
274                         actions = "traceon"       195                         actions = "traceon"
275                 }                                 196                 }
276                 end_event {                       197                 end_event {
277                         probes = "pci_proc_ini    198                         probes = "pci_proc_init%return"
278                         actions = "traceoff"      199                         actions = "traceoff"
279                 }                                 200                 }
280         }                                         201         }
281   }                                               202   }
282                                                   203 
283                                                   204 
284 This boot-time tracing also supports ftrace ke    205 This boot-time tracing also supports ftrace kernel parameters via boot
285 config.                                           206 config.
286 For example, following kernel parameters::        207 For example, following kernel parameters::
287                                                   208 
288  trace_options=sym-addr trace_event=initcall:*    209  trace_options=sym-addr trace_event=initcall:* tp_printk trace_buf_size=1M ftrace=function ftrace_filter="vfs*"
289                                                   210 
290 This can be written in boot config like below:    211 This can be written in boot config like below::
291                                                   212 
292   kernel {                                        213   kernel {
293         trace_options = sym-addr                  214         trace_options = sym-addr
294         trace_event = "initcall:*"                215         trace_event = "initcall:*"
295         tp_printk                                 216         tp_printk
296         trace_buf_size = 1M                       217         trace_buf_size = 1M
297         ftrace = function                         218         ftrace = function
298         ftrace_filter = "vfs*"                    219         ftrace_filter = "vfs*"
299   }                                               220   }
300                                                   221 
301 Note that parameters start with "kernel" prefi    222 Note that parameters start with "kernel" prefix instead of "ftrace".
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php