]> git.saurik.com Git - apple/system_cmds.git/blame - trace.tproj/trace.1
system_cmds-735.20.1.tar.gz
[apple/system_cmds.git] / trace.tproj / trace.1
CommitLineData
8459d725
A
1.\" Copyright (c) 2010, Apple Inc. All rights reserved.
2.\"
9726c137 3.Dd April 3, 2015
8459d725
A
4.Dt TRACE 1
5.Os "Mac OS X"
6.Sh NAME
7.Nm trace
9726c137 8.Nd configure, record, and display kernel trace events
8459d725 9.Sh SYNOPSIS
9726c137
A
10.Bl -hang -compact -width "trace -"
11.\"
12.It Nm Fl d
13.Op Fl a Ar pid | Fl x Ar pid
14.\"
15.It Nm Fl e
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
18.Op Fl k Ar code
19.Op Fl P
20.Op Fl T Ar filter-file
21.\"
22.It Nm Fl E
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
25.Op Fl k Ar code
26.Op Fl P
27.Op Fl T Ar tracefilter
28.Ar command
29.Op Ar argument ...
30.\"
31.It Nm Fl h
32.\"
33.It Nm Fl i
34.Op Fl b Ar num-events
35.\"
36.It Nm Fl g
37.\"
38.It Nm Fl l Ar rawfile
39.\"
40.It Nm Fl L Ar rawfile
41.Op Fl S Ar secs
42.\"
43.It Nm Fl n
44.\"
45.It Nm Fl r
46.\"
47.It Nm Fl R Ar rawfile
48.Op Fl X
49.Op Fl F Ar frequency
50.Op Fl o Ar outfile
51.Op Fl N
52.Op Ar codesfile ...
53.\"
54.It Nm Fl t
55.Op Fl o Ar outfile
56.Op Fl N
57.Op Ar codesfile ...
58.El
59.Sh DESCRIPTION
60.Nm
61initializes and configures the kernel trace subsystem. Trace events can
62be recorded to an in-memory buffer or logged directly to a file, and
63optionally converted to a human-readable, plain-text format.
8459d725 64.Pp
9726c137
A
65.Nm
66operates according to the command flag specified.
67.Sh COMMANDS
68.Bl -tag -width Ds
69.It Fl h
70Print a succinct help message to
71.Xr stdout 4 .
72.\"
73.\" ## trace -i ##
74.It Fl i Op Fl b Ar num-events
8459d725 75.Pp
9726c137
A
76Initialize the kernel trace buffer. This command is required before
77tracing.
78.Bl -tag -width Ds
79.It Fl b Ar num-events
80Set the number of events that can be stored in the kernel trace buffer.
81.Ar num-events
82is a decimal number of events. The default (and minimum) value is 8192
83event records per logical CPU. No more than half of available
84memory may be used by trace buffers, though running with a buffer this
85large is not recommended.
86.El
87.\"
88.\" ## trace -g ##
89.It Fl g
90Print the current kernel trace buffer settings to
91.Xr stdout 4 .
92.\"
93.\" ## trace -d ##
94.It Fl d Op Fl a Ar pid | Fl x Ar pid
8459d725 95.Pp
9726c137
A
96By default, disable collection of events. This command does not remove
97the kernel trace buffer.
98.Bl -tag -width Ds
99.It Fl a Ar pid
100Disable event collection for the process identified by
101.Ar pid .
102.It Fl x Ar pid
103Stop excluding
104.Ar pid
105from the trace.
106This reenables event collection of events for.
107.Ar pid .
108.El
109.\"
110.\" ## trace -r ##
111.It Fl r
112Remove the kernel trace buffer.
113.\"
114.\" ## trace -n ##
115.It Fl n
116Disable ring buffer mode. When set, the trace buffer will fill to capacity
117and then stop collecting events. Ring buffer mode is sometimes called
118"head," "stop," or "no-wrap" mode. By default, the trace buffer will
119wrap around, overwriting previous events. The default behavior is
120sometimes called windowed or wrap-around mode.
121.\"
122.\" ## trace -e ##
123.Bk -words
124.It Xo Fl e
125.Op Fl c Ar class Oo Fl p Ar end-class Oc Oo Fl s Ar subclass Oc
8459d725 126.Op Fl a Ar pid | Fl x Ar pid
9726c137
A
127.Op Fl k Ar code ...
128.Op Fl P
129.Op Fl T Ar filter-file
130.Ek
131.Xc
8459d725 132.Pp
9726c137 133Enable collection of events. By default, all events are collected.
8459d725 134.Pp
9726c137
A
135Options can be used to restrict collection to specific classes, class
136ranges, subclasses, and codes. Classes and subclasses can be specified
137any number of times, but only 4 codes can be filtered at once. Values
138can be specified in hex (0x...), decimal, or octal (0...).
139.Bl -tag -width " "
140.It Fl c Ar class
141Restrict collection to the events with the specified
142.Ar class .
143This option can be specified any number of times to collect events from
144more classes.
145.Bl -tag -width " "
146.It Fl p Ar end-class
147Provide an ending class to restrict collection to events in an inclusive
148range of classes between
149.Ar class
150and
151.Ar end-class .
152.It Fl s Ar subclass
153Restrict collection to the events with the specified
154.Ar subclass .
155.El
156.It Fl a Ar pid
157Restrict collection to to those events emitted by the process identified
158by
159.Ar pid .
160.It Fl x Ar pid
161Exclude events emitted by the process identified by
162.Ar pid .
163.It Fl k Ar code
164Restrict collection to events with the specified
165.Ar code .
166This option can be specified up to 4 times, and applies to all classes
167being collected.
168.It Fl T Ar filter-file
169Restrict collection to events specified in the provided
170.Ar filter-file .
171See
172.Sx TRACEFILTER FORMAT
173for details.
174.It Xo Fl P
175Restrict collection to PPT events. This special collection of trace
176events provides insight into system performance.
177.Xc
178.El
179.\"
180.\" ## trace -E ##
181.Bk -words
182.It Xo Fl E
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
185.Op Fl k Ar code ...
186.Op Fl P
187.Op Fl T Ar filter-file
188.Ar command Op args ...
189.Ek
190.Xc
8459d725 191.Pp
9726c137
A
192Execute
193.Ar command
194with trace collection enabled for events emitted by the process. See
8459d725 195.Fl e
9726c137
A
196for more information.
197.\"
198.\" ## trace -t ##
199.It Fl t Oo Fl o Ar outfile Oc Oo Fl N Oc Oo Ar codesfile ... Oc
8459d725 200.Pp
9726c137
A
201Extract events from the kernel trace buffer and print them in a formatted,
202plain-text representation. Additional code files can be specified to
203help
204.Nm
205find the names of unknown events. For more information on the formatting
206process, see
207.Sx TRACE CODES FORMAT .
208.Bl -tag -width Ds
209.It Fl o Ar outfile
210Output the plain-text events to
211.Ar outfile .
212.It Fl N
213Ignore the system-wide trace codes file when getting names of events.
214Additional trace codes files specified will still be used.
215.El
216.\"
217.\" ## trace -l ##
218.It Fl l Ar rawfile
8459d725 219.Pp
9726c137
A
220Empty the current kernel trace buffer into
221.Ar rawfile
cf37c299
A
222in a binary format. If
223.Ar rawfile
224is
225.Li - ,
226the file will be written to
227.Xr stdout 4 .
9726c137
A
228.\"
229.\" ## trace -L ##
230.It Fl L Ar rawfile Fl S Ar seconds
231.Pp
232Copy the current trace buffer to
233.Ar rawfile
cf37c299 234and send all future trace events to
9726c137
A
235.Ar rawfile .
236.Bl -tag -width Ds
237.It Fl S Ar seconds
238After
239.Ar seconds
cf37c299
A
240have elapsed, stop recording and exit. If
241.Ar rawfile
242is
243.Li - ,
244the file will be written to
245.Xr stdout 4 .
9726c137
A
246.El
247.\"
248.\" ## trace -R ##
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 ...
250.Pp
251Read events from
252.Ar rawfile
cf37c299 253and print them in a human-readable format.
9726c137
A
254.Bl -tag -width " "
255.It Fl F Ar frequency
256If
257.Ar rawfile
258does not contain clock frequency information, it can be specified with
259.Fl F .
260.It Fl X
261Force the binary format to be interpreted as 32-bit, as opposed to
262matching the width of the system running
263.Nm .
264.El
265.Pp
266See
8459d725 267.Fl t
9726c137
A
268for additional options.
269.El
270.Sh TRACE CODES FORMAT
271Event classes, subclasses, and codes are matched to names using a trace
272codes file. Any events that cannot be matched will be referred to by
273their debugid in hex.
274.Pp
275The system-wide trace codes file is located at
276.Pa /usr/share/misc/trace.codes .
277Additional files are typically stored in
278.Pa /usr/local/share/misc .
279.Pp
280A code file consists of a list of tracepoints, one per line, with the
281tracepoint's debugid (component, subclass, and code) in hex, followed by
282a tab, followed by the tracepoint's name.
283.Pp
284For instance, the MSC_mach_msg_trap tracepoint is defined by
285.Pp
286.Dl 0x010c007c MSC_mach_msg_trap
287.Pp
288This describes the tracepoint with the following info:
289.Pp
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)
296.El
297.Pp
298See
299.\" this absolute path no longer exists thanks to SDKs. :P
300.Pa /usr/include/sys/kdebug.h
301for class and subclass values.
302.Sh TRACEFILTER FORMAT
303A tracefilter description file consists of a list of class and subclass
304filters in hex, one per line, which are applied as if they were passed
305with
306.Fl c
307and
308.Fl s .
309Pass
310.Fl v
311to see what classes and subclasses are being set.
312.Pp
313Comment lines start with
314.Ql # ,
315class filter lines start with
316.Ql C ,
317and subclass filter lines start with
318.Ql S
319and include the class they apply to.
320.Pp
321For example, to trace Mach events (class 1):
322.Pp
323.Dl C 0x01
324.Pp
325And to trace Mach system calls (class 1, subclass 13):
326.Pp
327.Dl S 0x010C
328.Pp
329.Sh EXAMPLES
330.Nm
331usually requires multiple invocations in order to set up the trace
332buffers, enable the correct events, and collect the events. A typical
333session with trace is:
334.Pp
335.Dl trace -i
336.Dl trace -e -c 1 -s 31
337.Dl sleep 1
338.Dl trace -d
339.Dl trace -t
340.Pp
341This initializes the trace buffers to their default values, enables the
342mach_msg_trap subclass of the MACH_SysCall class, waits for one second,
343then disables tracing and prints it to
344.Xr stdout 4 .
345This is useful for investigating isolated issues or gaining some
346understanding about a kernel subsystem. If a specific execuable should
347be traced, with the events saved for later analysis, the sequence of
348commands would be:
349.Pp
350.Dl trace -i
351.Dl trace -E -c 0x4 ./my_prog
352.Dl trace -d
353.Dl trace -l tracefile
354.Dl trace -R tracefile
355.Pp
356This initializes the trace buffers, enables all events in the BSC_SysCall class and runs
357.Li my_prog ,
358disables tracing, collects events into
359.Li tracefile ,
360and finally prints those events out in a human-readable form.
361.Sh CAVEATS
362Almost all
363.Nm
364command flags require superuser (root) privileges.
365.Pp
366After failures, the trace buffers usually need to be re-initialized.
367.Pp
368.Sh DIAGNOSTICS
369.Ex -std
8459d725 370.Sh SEE ALSO
9726c137 371.Xr trace 4 ,
8459d725
A
372.Xr fs_usage 1 ,
373.Xr sc_usage 1 ,
374.Xr latency 1 ,
375.Xr top 1