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
222 in a binary format. If
226 the file will be written to
230 .It Fl L Ar rawfile Fl S Ar seconds
232 Copy the current trace buffer to
234 and send all future trace events to
240 have elapsed, stop recording and exit. If
244 the file will be written to
249 .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 ...
253 and print them in a human-readable format.
255 .It Fl F Ar frequency
258 does not contain clock frequency information, it can be specified with
261 Force the binary format to be interpreted as 32-bit, as opposed to
262 matching the width of the system running
268 for additional options.
270 .Sh TRACE CODES FORMAT
271 Event classes, subclasses, and codes are matched to names using a trace
272 codes file. Any events that cannot be matched will be referred to by
273 their debugid in hex.
275 The system-wide trace codes file is located at
276 .Pa /usr/share/misc/trace.codes .
277 Additional files are typically stored in
278 .Pa /usr/local/share/misc .
280 A code file consists of a list of tracepoints, one per line, with the
281 tracepoint's debugid (component, subclass, and code) in hex, followed by
282 a tab, followed by the tracepoint's name.
284 For instance, the MSC_mach_msg_trap tracepoint is defined by
286 .Dl 0x010c007c MSC_mach_msg_trap
288 This describes the tracepoint with the following info:
290 .Bl -column -offset indent "Subclass" "MSC_mach_msg_trap"
291 .\" is this right? We should refer to the shifting and kdebug.h
292 .It Sy Name Ta MSC_mach_msg_trap
293 .It Sy Class Ta 0x01 Ta (Mach events)
294 .It Sy Subclass Ta 0x0c Ta (Mach system calls)
295 .It Sy Code Ta 0x007c Ta (msg_trap)
299 .\" this absolute path no longer exists thanks to SDKs. :P
300 .Pa /usr/include/sys/kdebug.h
301 for class and subclass values.
302 .Sh TRACEFILTER FORMAT
303 A tracefilter description file consists of a list of class and subclass
304 filters in hex, one per line, which are applied as if they were passed
311 to see what classes and subclasses are being set.
313 Comment lines start with
315 class filter lines start with
317 and subclass filter lines start with
319 and include the class they apply to.
321 For example, to trace Mach events (class 1):
325 And to trace Mach system calls (class 1, subclass 13):
331 usually requires multiple invocations in order to set up the trace
332 buffers, enable the correct events, and collect the events. A typical
333 session with trace is:
336 .Dl trace -e -c 1 -s 31
341 This initializes the trace buffers to their default values, enables the
342 mach_msg_trap subclass of the MACH_SysCall class, waits for one second,
343 then disables tracing and prints it to
345 This is useful for investigating isolated issues or gaining some
346 understanding about a kernel subsystem. If a specific execuable should
347 be traced, with the events saved for later analysis, the sequence of
351 .Dl trace -E -c 0x4 ./my_prog
353 .Dl trace -l tracefile
354 .Dl trace -R tracefile
356 This initializes the trace buffers, enables all events in the BSC_SysCall class and runs
358 disables tracing, collects events into
360 and finally prints those events out in a human-readable form.
364 command flags require superuser (root) privileges.
366 After failures, the trace buffers usually need to be re-initialized.