1 .\" Copyright (c) 2010, Apple Inc. All rights reserved.
8 .Nd configure, record, and display kernel trace events
10 .Bl -hang -compact -width "trace -"
13 .Op Fl a Ar pid | Fl x Ar pid
16 .Op Fl c Ar class Oo Fl p Ar end-class Oc Oo Fl s Ar subclass Oc
17 .Op Fl a Ar pid | Fl x Ar pid
20 .Op Fl T Ar filter-file
23 .Op Fl c Ar class Oo Fl p Ar end-class Oc Oo Fl s Ar subclass Oc
24 .Op Fl a Ar pid | Fl x Ar pid
27 .Op Fl T Ar tracefilter
34 .Op Fl b Ar num-events
38 .It Nm Fl l Ar rawfile
40 .It Nm Fl L Ar rawfile
47 .It Nm Fl R Ar rawfile
61 initializes and configures the kernel trace subsystem. Trace events can
62 be recorded to an in-memory buffer or logged directly to a file, and
63 optionally converted to a human-readable, plain-text format.
66 operates according to the command flag specified.
70 Print a succinct help message to
74 .It Fl i Op Fl b Ar num-events
76 Initialize the kernel trace buffer. This command is required before
79 .It Fl b Ar num-events
80 Set the number of events that can be stored in the kernel trace buffer.
82 is a decimal number of events. The default (and minimum) value is 8192
83 event records per logical CPU. No more than half of available
84 memory may be used by trace buffers, though running with a buffer this
85 large is not recommended.
90 Print the current kernel trace buffer settings to
94 .It Fl d Op Fl a Ar pid | Fl x Ar pid
96 By default, disable collection of events. This command does not remove
97 the kernel trace buffer.
100 Disable event collection for the process identified by
106 This reenables event collection of events for.
112 Remove the kernel trace buffer.
116 Disable ring buffer mode. When set, the trace buffer will fill to capacity
117 and then stop collecting events. Ring buffer mode is sometimes called
118 "head," "stop," or "no-wrap" mode. By default, the trace buffer will
119 wrap around, overwriting previous events. The default behavior is
120 sometimes called windowed or wrap-around mode.
125 .Op Fl c Ar class Oo Fl p Ar end-class Oc Oo Fl s Ar subclass Oc
126 .Op Fl a Ar pid | Fl x Ar pid
129 .Op Fl T Ar filter-file
133 Enable collection of events. By default, all events are collected.
135 Options can be used to restrict collection to specific classes, class
136 ranges, subclasses, and codes. Classes and subclasses can be specified
137 any number of times, but only 4 codes can be filtered at once. Values
138 can be specified in hex (0x...), decimal, or octal (0...).
141 Restrict collection to the events with the specified
143 This option can be specified any number of times to collect events from
146 .It Fl p Ar end-class
147 Provide an ending class to restrict collection to events in an inclusive
148 range of classes between
153 Restrict collection to the events with the specified
157 Restrict collection to to those events emitted by the process identified
161 Exclude events emitted by the process identified by
164 Restrict collection to events with the specified
166 This option can be specified up to 4 times, and applies to all classes
168 .It Fl T Ar filter-file
169 Restrict collection to events specified in the provided
172 .Sx TRACEFILTER FORMAT
175 Restrict collection to PPT events. This special collection of trace
176 events provides insight into system performance.
183 .Op Fl c Ar class Oo Fl p Ar end-class Oc Oo Fl s Ar subclass Oc
184 .Op Fl a Ar pid | Fl x Ar pid
187 .Op Fl T Ar filter-file
188 .Ar command Op args ...
194 with trace collection enabled for events emitted by the process. See
196 for more information.
199 .It Fl t Oo Fl o Ar outfile Oc Oo Fl N Oc Oo Ar codesfile ... Oc
201 Extract events from the kernel trace buffer and print them in a formatted,
202 plain-text representation. Additional code files can be specified to
205 find the names of unknown events. For more information on the formatting
207 .Sx TRACE CODES FORMAT .
210 Output the plain-text events to
213 Ignore the system-wide trace codes file when getting names of events.
214 Additional trace codes files specified will still be used.
220 Empty the current kernel trace buffer into
225 .It Fl L Ar rawfile Fl S Ar seconds
227 Copy the current trace buffer to
229 and send all future trace events to
235 have elapsed, stop recording and exit.
239 .It Fl R Ar rawfile Oo Fl o Ar outfile Oc Oo Fl N Oc Oo Fl F Ar frequency Oc Oo Fl X Oc Op Ar codesfile ...
243 and print them in a human-readable format.
245 .It Fl F Ar frequency
248 does not contain clock frequency information, it can be specified with
251 Force the binary format to be interpreted as 32-bit, as opposed to
252 matching the width of the system running
258 for additional options.
260 .Sh TRACE CODES FORMAT
261 Event classes, subclasses, and codes are matched to names using a trace
262 codes file. Any events that cannot be matched will be referred to by
263 their debugid in hex.
265 The system-wide trace codes file is located at
266 .Pa /usr/share/misc/trace.codes .
267 Additional files are typically stored in
268 .Pa /usr/local/share/misc .
270 A code file consists of a list of tracepoints, one per line, with the
271 tracepoint's debugid (component, subclass, and code) in hex, followed by
272 a tab, followed by the tracepoint's name.
274 For instance, the MSC_mach_msg_trap tracepoint is defined by
276 .Dl 0x010c007c MSC_mach_msg_trap
278 This describes the tracepoint with the following info:
280 .Bl -column -offset indent "Subclass" "MSC_mach_msg_trap"
281 .\" is this right? We should refer to the shifting and kdebug.h
282 .It Sy Name Ta MSC_mach_msg_trap
283 .It Sy Class Ta 0x01 Ta (Mach events)
284 .It Sy Subclass Ta 0x0c Ta (Mach system calls)
285 .It Sy Code Ta 0x007c Ta (msg_trap)
289 .\" this absolute path no longer exists thanks to SDKs. :P
290 .Pa /usr/include/sys/kdebug.h
291 for class and subclass values.
292 .Sh TRACEFILTER FORMAT
293 A tracefilter description file consists of a list of class and subclass
294 filters in hex, one per line, which are applied as if they were passed
301 to see what classes and subclasses are being set.
303 Comment lines start with
305 class filter lines start with
307 and subclass filter lines start with
309 and include the class they apply to.
311 For example, to trace Mach events (class 1):
315 And to trace Mach system calls (class 1, subclass 13):
321 usually requires multiple invocations in order to set up the trace
322 buffers, enable the correct events, and collect the events. A typical
323 session with trace is:
326 .Dl trace -e -c 1 -s 31
331 This initializes the trace buffers to their default values, enables the
332 mach_msg_trap subclass of the MACH_SysCall class, waits for one second,
333 then disables tracing and prints it to
335 This is useful for investigating isolated issues or gaining some
336 understanding about a kernel subsystem. If a specific execuable should
337 be traced, with the events saved for later analysis, the sequence of
341 .Dl trace -E -c 0x4 ./my_prog
343 .Dl trace -l tracefile
344 .Dl trace -R tracefile
346 This initializes the trace buffers, enables all events in the BSC_SysCall class and runs
348 disables tracing, collects events into
350 and finally prints those events out in a human-readable form.
354 command flags require superuser (root) privileges.
356 After failures, the trace buffers usually need to be re-initialized.