blob: 79445750fcb322fb323c38b6e9a921500f5241c6 [file] [log] [blame]
Ingo Molnar133dc4c2010-11-16 18:45:39 +01001perf-script(1)
Arnaldo Carvalho de Melo4778e0e2010-05-05 11:23:27 -03002=============
Ingo Molnar0a02ad92009-09-11 12:12:54 +02003
4NAME
5----
Ingo Molnar133dc4c2010-11-16 18:45:39 +01006perf-script - Read perf.data (created by perf record) and display trace output
Ingo Molnar0a02ad92009-09-11 12:12:54 +02007
8SYNOPSIS
9--------
10[verse]
Ingo Molnar133dc4c2010-11-16 18:45:39 +010011'perf script' [<options>]
12'perf script' [<options>] record <script> [<record-options>] <command>
13'perf script' [<options>] report <script> [script-args]
14'perf script' [<options>] <script> <required-script-args> [<record-options>] <command>
15'perf script' [<options>] <top-script> [script-args]
Ingo Molnar0a02ad92009-09-11 12:12:54 +020016
17DESCRIPTION
18-----------
19This command reads the input file and displays the trace recorded.
20
Ingo Molnar133dc4c2010-11-16 18:45:39 +010021There are several variants of perf script:
Tom Zanussia6005122009-12-15 02:53:40 -060022
Ingo Molnar133dc4c2010-11-16 18:45:39 +010023 'perf script' to see a detailed trace of the workload that was
Tom Zanussia6005122009-12-15 02:53:40 -060024 recorded.
25
Tom Zanussicff68e52010-01-27 02:28:03 -060026 You can also run a set of pre-canned scripts that aggregate and
27 summarize the raw trace data in various ways (the list of scripts is
Ingo Molnar133dc4c2010-11-16 18:45:39 +010028 available via 'perf script -l'). The following variants allow you to
Tom Zanussicff68e52010-01-27 02:28:03 -060029 record and run those scripts:
30
Ingo Molnar133dc4c2010-11-16 18:45:39 +010031 'perf script record <script> <command>' to record the events required
32 for 'perf script report'. <script> is the name displayed in the
33 output of 'perf script --list' i.e. the actual script name minus any
Tom Zanussid3c4f792010-11-10 08:19:35 -060034 language extension. If <command> is not specified, the events are
35 recorded using the -a (system-wide) 'perf record' option.
Tom Zanussia6005122009-12-15 02:53:40 -060036
Ingo Molnar133dc4c2010-11-16 18:45:39 +010037 'perf script report <script> [args]' to run and display the results
Tom Zanussid3c4f792010-11-10 08:19:35 -060038 of <script>. <script> is the name displayed in the output of 'perf
Tom Zanussia6005122009-12-15 02:53:40 -060039 trace --list' i.e. the actual script name minus any language
Ingo Molnar133dc4c2010-11-16 18:45:39 +010040 extension. The perf.data output from a previous run of 'perf script
Tom Zanussia6005122009-12-15 02:53:40 -060041 record <script>' is used and should be present for this command to
Tom Zanussid3c4f792010-11-10 08:19:35 -060042 succeed. [args] refers to the (mainly optional) args expected by
43 the script.
44
Ingo Molnar133dc4c2010-11-16 18:45:39 +010045 'perf script <script> <required-script-args> <command>' to both
Tom Zanussid3c4f792010-11-10 08:19:35 -060046 record the events required for <script> and to run the <script>
47 using 'live-mode' i.e. without writing anything to disk. <script>
Ingo Molnar133dc4c2010-11-16 18:45:39 +010048 is the name displayed in the output of 'perf script --list' i.e. the
Tom Zanussid3c4f792010-11-10 08:19:35 -060049 actual script name minus any language extension. If <command> is
50 not specified, the events are recorded using the -a (system-wide)
51 'perf record' option. If <script> has any required args, they
52 should be specified before <command>. This mode doesn't allow for
53 optional script args to be specified; if optional script args are
Ingo Molnar133dc4c2010-11-16 18:45:39 +010054 desired, they can be specified using separate 'perf script record'
55 and 'perf script report' commands, with the stdout of the record step
Tom Zanussid3c4f792010-11-10 08:19:35 -060056 piped to the stdin of the report script, using the '-o -' and '-i -'
57 options of the corresponding commands.
58
Ingo Molnar133dc4c2010-11-16 18:45:39 +010059 'perf script <top-script>' to both record the events required for
Tom Zanussid3c4f792010-11-10 08:19:35 -060060 <top-script> and to run the <top-script> using 'live-mode'
61 i.e. without writing anything to disk. <top-script> is the name
Ingo Molnar133dc4c2010-11-16 18:45:39 +010062 displayed in the output of 'perf script --list' i.e. the actual
Tom Zanussid3c4f792010-11-10 08:19:35 -060063 script name minus any language extension; a <top-script> is defined
64 as any script name ending with the string 'top'.
65
Ingo Molnar133dc4c2010-11-16 18:45:39 +010066 [<record-options>] can be passed to the record steps of 'perf script
Tom Zanussid3c4f792010-11-10 08:19:35 -060067 record' and 'live-mode' variants; this isn't possible however for
Ingo Molnar133dc4c2010-11-16 18:45:39 +010068 <top-script> 'live-mode' or 'perf script report' variants.
Tom Zanussia6005122009-12-15 02:53:40 -060069
Tom Zanussicff68e52010-01-27 02:28:03 -060070 See the 'SEE ALSO' section for links to language-specific
71 information on how to write and run your own trace scripts.
72
Ingo Molnar0a02ad92009-09-11 12:12:54 +020073OPTIONS
74-------
Tom Zanussid3c4f792010-11-10 08:19:35 -060075<command>...::
76 Any command you can specify in a shell.
77
Ingo Molnar0a02ad92009-09-11 12:12:54 +020078-D::
Ingo Molnar133dc4c2010-11-16 18:45:39 +010079--dump-raw-script=::
Ingo Molnar0a02ad92009-09-11 12:12:54 +020080 Display verbose dump of the trace data.
81
Tom Zanussia6005122009-12-15 02:53:40 -060082-L::
83--Latency=::
84 Show latency attributes (irqs/preemption disabled, etc).
85
86-l::
87--list=::
88 Display a list of available trace scripts.
89
Tom Zanussif526d682010-01-27 02:27:52 -060090-s ['lang']::
Tom Zanussi89fbf0b2009-11-25 01:15:51 -060091--script=::
92 Process trace data with the given script ([lang]:script[.ext]).
Tom Zanussif526d682010-01-27 02:27:52 -060093 If the string 'lang' is specified in place of a script name, a
94 list of supported languages will be displayed instead.
Tom Zanussi89fbf0b2009-11-25 01:15:51 -060095
96-g::
97--gen-script=::
Ingo Molnar133dc4c2010-11-16 18:45:39 +010098 Generate perf-script.[ext] starter script for given language,
Tom Zanussi89fbf0b2009-11-25 01:15:51 -060099 using current perf.data.
100
Tom Zanussid3c4f792010-11-10 08:19:35 -0600101-a::
102 Force system-wide collection. Scripts run without a <command>
103 normally use -a by default, while scripts run with a <command>
104 normally don't - this option allows the latter to be run in
105 system-wide mode.
106
Shawn Bohrer646420f2010-11-30 19:57:22 -0600107-i::
108--input=::
Robert Richterefad1412011-12-07 10:02:54 +0100109 Input file name. (default: perf.data unless stdin is a fifo)
Shawn Bohrer646420f2010-11-30 19:57:22 -0600110
111-d::
112--debug-mode::
113 Do various checks like samples ordering and lost events.
Tom Zanussid3c4f792010-11-10 08:19:35 -0600114
David Ahern745f43e2011-03-09 22:23:26 -0700115-f::
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300116--fields::
David Ahern745f43e2011-03-09 22:23:26 -0700117 Comma separated list of fields to print. Options are:
Jiri Olsa535aeaa2014-08-25 16:45:42 +0200118 comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff, srcline, period.
David Ahern7cec0922011-05-30 13:08:23 -0600119 Field list can be prepended with the type, trace, sw or hw,
David Ahern1424dc92011-03-09 22:23:28 -0700120 to indicate to which event type the field list applies.
David Ahern787bef12011-05-27 14:28:43 -0600121 e.g., -f sw:comm,tid,time,ip,sym and -f trace:time,cpu,trace
David Ahernc0230b22011-03-09 22:23:27 -0700122
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300123 perf script -f <fields>
124
125 is equivalent to:
126
127 perf script -f trace:<fields> -f sw:<fields> -f hw:<fields>
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300128
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300129 i.e., the specified fields apply to all event types if the type string
130 is not given.
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300131
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300132 The arguments are processed in the order received. A later usage can
133 reset a prior request. e.g.:
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300134
David Ahern787bef12011-05-27 14:28:43 -0600135 -f trace: -f comm,tid,time,ip,sym
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300136
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300137 The first -f suppresses trace events (field list is ""), but then the
David Ahern787bef12011-05-27 14:28:43 -0600138 second invocation sets the fields to comm,tid,time,ip,sym. In this case a
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300139 warning is given to the user:
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300140
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300141 "Overriding previous field request for all events."
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300142
Masanari Iida96355f22014-09-10 00:18:50 +0900143 Alternatively, consider the order:
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300144
David Ahern787bef12011-05-27 14:28:43 -0600145 -f comm,tid,time,ip,sym -f trace:
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300146
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300147 The first -f sets the fields for all events and the second -f
148 suppresses trace events. The user is given a warning message about
149 the override, and the result of the above is that only S/W and H/W
150 events are displayed with the given fields.
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300151
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300152 For the 'wildcard' option if a user selected field is invalid for an
153 event type, a message is displayed to the user that the option is
154 ignored for that type. For example:
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300155
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300156 $ perf script -f comm,tid,trace
157 'trace' not valid for hardware events. Ignoring.
158 'trace' not valid for software events. Ignoring.
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300159
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300160 Alternatively, if the type is given an invalid field is specified it
161 is an error. For example:
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300162
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300163 perf script -v -f sw:comm,tid,trace
164 'trace' not valid for software events.
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300165
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300166 At this point usage is displayed, and perf-script exits.
Arnaldo Carvalho de Melo48000a12014-12-17 17:24:45 -0300167
Arnaldo Carvalho de Melo176fcc52011-03-30 15:30:43 -0300168 Finally, a user may not set fields to none for all event types.
169 i.e., -f "" is not allowed.
170
David Ahernc0230b22011-03-09 22:23:27 -0700171-k::
172--vmlinux=<file>::
173 vmlinux pathname
174
175--kallsyms=<file>::
176 kallsyms pathname
177
178--symfs=<directory>::
179 Look for files with symbols relative to this directory.
180
181-G::
182--hide-call-graph::
183 When printing symbols do not display call chain.
David Ahern745f43e2011-03-09 22:23:26 -0700184
David Ahernc8e66722011-11-13 11:30:08 -0700185-C::
Anton Blanchard5d67be92011-07-04 21:57:50 +1000186--cpu:: Only report samples for the list of CPUs provided. Multiple CPUs can
187 be provided as a comma-separated list with no space: 0,1. Ranges of
188 CPUs are specified with -: 0-2. Default is to report samples on all
189 CPUs.
190
David Aherne7984b72011-11-21 10:02:52 -0700191-c::
192--comms=::
193 Only display events for these comms. CSV that understands
194 file://filename entries.
195
David Aherne03eaa42015-03-24 09:52:41 -0600196--pid=::
197 Only show events for given process ID (comma separated list).
198
199--tid=::
200 Only show events for given thread ID (comma separated list).
201
Stephane Eranianfbe96f22011-09-30 15:40:40 +0200202-I::
203--show-info::
204 Display extended information about the perf.data file. This adds
205 information which may be very large and thus may clutter the display.
206 It currently includes: cpu and numa topology of the host system.
207 It can only be used with the perf script report mode.
208
Akihiro Nagai0bc8d202012-01-30 13:43:20 +0900209--show-kernel-path::
210 Try to resolve the path of [kernel.kallsyms]
211
Namhyung Kimad7ebb92013-11-26 17:51:12 +0900212--show-task-events
213 Display task related events (e.g. FORK, COMM, EXIT).
214
Namhyung Kimba1ddf42013-11-26 17:54:26 +0900215--show-mmap-events
216 Display mmap related events (e.g. MMAP, MMAP2).
217
Jiri Olsae90debd2013-12-09 11:02:50 +0100218--header
219 Show perf.data header.
220
221--header-only
222 Show only perf.data header.
223
Ingo Molnar0a02ad92009-09-11 12:12:54 +0200224SEE ALSO
225--------
Ingo Molnar133dc4c2010-11-16 18:45:39 +0100226linkperf:perf-record[1], linkperf:perf-script-perl[1],
227linkperf:perf-script-python[1]