Back to home page

OSCL-LXR

 
 

    


0001 perf-script(1)
0002 =============
0003 
0004 NAME
0005 ----
0006 perf-script - Read perf.data (created by perf record) and display trace output
0007 
0008 SYNOPSIS
0009 --------
0010 [verse]
0011 'perf script' [<options>]
0012 'perf script' [<options>] record <script> [<record-options>] <command>
0013 'perf script' [<options>] report <script> [script-args]
0014 'perf script' [<options>] <script> <required-script-args> [<record-options>] <command>
0015 'perf script' [<options>] <top-script> [script-args]
0016 
0017 DESCRIPTION
0018 -----------
0019 This command reads the input file and displays the trace recorded.
0020 
0021 There are several variants of perf script:
0022 
0023   'perf script' to see a detailed trace of the workload that was
0024   recorded.
0025 
0026   You can also run a set of pre-canned scripts that aggregate and
0027   summarize the raw trace data in various ways (the list of scripts is
0028   available via 'perf script -l').  The following variants allow you to
0029   record and run those scripts:
0030 
0031   'perf script record <script> <command>' to record the events required
0032   for 'perf script report'.  <script> is the name displayed in the
0033   output of 'perf script --list' i.e. the actual script name minus any
0034   language extension.  If <command> is not specified, the events are
0035   recorded using the -a (system-wide) 'perf record' option.
0036 
0037   'perf script report <script> [args]' to run and display the results
0038   of <script>.  <script> is the name displayed in the output of 'perf
0039   script --list' i.e. the actual script name minus any language
0040   extension.  The perf.data output from a previous run of 'perf script
0041   record <script>' is used and should be present for this command to
0042   succeed.  [args] refers to the (mainly optional) args expected by
0043   the script.
0044 
0045   'perf script <script> <required-script-args> <command>' to both
0046   record the events required for <script> and to run the <script>
0047   using 'live-mode' i.e. without writing anything to disk.  <script>
0048   is the name displayed in the output of 'perf script --list' i.e. the
0049   actual script name minus any language extension.  If <command> is
0050   not specified, the events are recorded using the -a (system-wide)
0051   'perf record' option.  If <script> has any required args, they
0052   should be specified before <command>.  This mode doesn't allow for
0053   optional script args to be specified; if optional script args are
0054   desired, they can be specified using separate 'perf script record'
0055   and 'perf script report' commands, with the stdout of the record step
0056   piped to the stdin of the report script, using the '-o -' and '-i -'
0057   options of the corresponding commands.
0058 
0059   'perf script <top-script>' to both record the events required for
0060   <top-script> and to run the <top-script> using 'live-mode'
0061   i.e. without writing anything to disk.  <top-script> is the name
0062   displayed in the output of 'perf script --list' i.e. the actual
0063   script name minus any language extension; a <top-script> is defined
0064   as any script name ending with the string 'top'.
0065 
0066   [<record-options>] can be passed to the record steps of 'perf script
0067   record' and 'live-mode' variants; this isn't possible however for
0068   <top-script> 'live-mode' or 'perf script report' variants.
0069 
0070   See the 'SEE ALSO' section for links to language-specific
0071   information on how to write and run your own trace scripts.
0072 
0073 OPTIONS
0074 -------
0075 <command>...::
0076         Any command you can specify in a shell.
0077 
0078 -D::
0079 --dump-raw-trace=::
0080         Display verbose dump of the trace data.
0081 
0082 --dump-unsorted-raw-trace=::
0083         Same as --dump-raw-trace but not sorted in time order.
0084 
0085 -L::
0086 --Latency=::
0087         Show latency attributes (irqs/preemption disabled, etc).
0088 
0089 -l::
0090 --list=::
0091         Display a list of available trace scripts.
0092 
0093 -s ['lang']::
0094 --script=::
0095         Process trace data with the given script ([lang]:script[.ext]).
0096         If the string 'lang' is specified in place of a script name, a
0097         list of supported languages will be displayed instead.
0098 
0099 -g::
0100 --gen-script=::
0101         Generate perf-script.[ext] starter script for given language,
0102         using current perf.data.
0103 
0104 --dlfilter=<file>::
0105         Filter sample events using the given shared object file.
0106         Refer linkperf:perf-dlfilter[1]
0107 
0108 --dlarg=<arg>::
0109         Pass 'arg' as an argument to the dlfilter. --dlarg may be repeated
0110         to add more arguments.
0111 
0112 --list-dlfilters::
0113         Display a list of available dlfilters. Use with option -v (must come
0114         before option --list-dlfilters) to show long descriptions.
0115 
0116 -a::
0117         Force system-wide collection.  Scripts run without a <command>
0118         normally use -a by default, while scripts run with a <command>
0119         normally don't - this option allows the latter to be run in
0120         system-wide mode.
0121 
0122 -i::
0123 --input=::
0124         Input file name. (default: perf.data unless stdin is a fifo)
0125 
0126 -d::
0127 --debug-mode::
0128         Do various checks like samples ordering and lost events.
0129 
0130 -F::
0131 --fields::
0132         Comma separated list of fields to print. Options are:
0133         comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff,
0134         srcline, period, iregs, uregs, brstack, brstacksym, flags, bpf-output,
0135         brstackinsn, brstackinsnlen, brstackoff, callindent, insn, insnlen, synth,
0136         phys_addr, metric, misc, srccode, ipc, data_page_size, code_page_size, ins_lat,
0137         machine_pid, vcpu.
0138         Field list can be prepended with the type, trace, sw or hw,
0139         to indicate to which event type the field list applies.
0140         e.g., -F sw:comm,tid,time,ip,sym  and -F trace:time,cpu,trace
0141 
0142                 perf script -F <fields>
0143 
0144         is equivalent to:
0145 
0146                 perf script -F trace:<fields> -F sw:<fields> -F hw:<fields>
0147 
0148         i.e., the specified fields apply to all event types if the type string
0149         is not given.
0150 
0151         In addition to overriding fields, it is also possible to add or remove
0152         fields from the defaults. For example
0153 
0154                 -F -cpu,+insn
0155 
0156         removes the cpu field and adds the insn field. Adding/removing fields
0157         cannot be mixed with normal overriding.
0158 
0159         The arguments are processed in the order received. A later usage can
0160         reset a prior request. e.g.:
0161 
0162                 -F trace: -F comm,tid,time,ip,sym
0163 
0164         The first -F suppresses trace events (field list is ""), but then the
0165         second invocation sets the fields to comm,tid,time,ip,sym. In this case a
0166         warning is given to the user:
0167 
0168                 "Overriding previous field request for all events."
0169 
0170         Alternatively, consider the order:
0171 
0172                 -F comm,tid,time,ip,sym -F trace:
0173 
0174         The first -F sets the fields for all events and the second -F
0175         suppresses trace events. The user is given a warning message about
0176         the override, and the result of the above is that only S/W and H/W
0177         events are displayed with the given fields.
0178 
0179         It's possible tp add/remove fields only for specific event type:
0180 
0181                 -Fsw:-cpu,-period
0182 
0183         removes cpu and period from software events.
0184 
0185         For the 'wildcard' option if a user selected field is invalid for an
0186         event type, a message is displayed to the user that the option is
0187         ignored for that type. For example:
0188 
0189                 $ perf script -F comm,tid,trace
0190                 'trace' not valid for hardware events. Ignoring.
0191                 'trace' not valid for software events. Ignoring.
0192 
0193         Alternatively, if the type is given an invalid field is specified it
0194         is an error. For example:
0195 
0196         perf script -v -F sw:comm,tid,trace
0197         'trace' not valid for software events.
0198 
0199         At this point usage is displayed, and perf-script exits.
0200 
0201         The flags field is synthesized and may have a value when Instruction
0202         Trace decoding. The flags are "bcrosyiABExghDt" which stand for branch,
0203         call, return, conditional, system, asynchronous, interrupt,
0204         transaction abort, trace begin, trace end, in transaction, VM-Entry,
0205         VM-Exit, interrupt disabled and interrupt disable toggle respectively.
0206         Known combinations of flags are printed more nicely e.g.
0207         "call" for "bc", "return" for "br", "jcc" for "bo", "jmp" for "b",
0208         "int" for "bci", "iret" for "bri", "syscall" for "bcs", "sysret" for "brs",
0209         "async" for "by", "hw int" for "bcyi", "tx abrt" for "bA", "tr strt" for "bB",
0210         "tr end" for "bE", "vmentry" for "bcg", "vmexit" for "bch".
0211         However the "x", "D" and "t" flags will be displayed separately in those
0212         cases e.g. "jcc     (xD)" for a condition branch within a transaction
0213         with interrupts disabled. Note, interrupts becoming disabled is "t",
0214         whereas interrupts becoming enabled is "Dt".
0215 
0216         The callindent field is synthesized and may have a value when
0217         Instruction Trace decoding. For calls and returns, it will display the
0218         name of the symbol indented with spaces to reflect the stack depth.
0219 
0220         When doing instruction trace decoding insn and insnlen give the
0221         instruction bytes and the instruction length of the current
0222         instruction.
0223 
0224         The synth field is used by synthesized events which may be created when
0225         Instruction Trace decoding.
0226 
0227         The ipc (instructions per cycle) field is synthesized and may have a value when
0228         Instruction Trace decoding.
0229 
0230         The machine_pid and vcpu fields are derived from data resulting from using
0231         perf inject to insert a perf.data file recorded inside a virtual machine into
0232         a perf.data file recorded on the host at the same time.
0233 
0234         Finally, a user may not set fields to none for all event types.
0235         i.e., -F "" is not allowed.
0236 
0237         The brstack output includes branch related information with raw addresses using the
0238         /v/v/v/v/cycles syntax in the following order:
0239         FROM: branch source instruction
0240         TO  : branch target instruction
0241         M/P/-: M=branch target mispredicted or branch direction was mispredicted, P=target predicted or direction predicted, -=not supported
0242         X/- : X=branch inside a transactional region, -=not in transaction region or not supported
0243         A/- : A=TSX abort entry, -=not aborted region or not supported
0244         cycles
0245 
0246         The brstacksym is identical to brstack, except that the FROM and TO addresses are printed in a symbolic form if possible.
0247 
0248         When brstackinsn is specified the full assembler sequences of branch sequences for each sample
0249         is printed. This is the full execution path leading to the sample. This is only supported when the
0250         sample was recorded with perf record -b or -j any.
0251 
0252         Use brstackinsnlen to print the brstackinsn lenght. For example, you
0253         can’t know the next sequential instruction after an unconditional branch unless
0254         you calculate that based on its length.
0255 
0256         The brstackoff field will print an offset into a specific dso/binary.
0257 
0258         With the metric option perf script can compute metrics for
0259         sampling periods, similar to perf stat. This requires
0260         specifying a group with multiple events defining metrics with the :S option
0261         for perf record. perf will sample on the first event, and
0262         print computed metrics for all the events in the group. Please note
0263         that the metric computed is averaged over the whole sampling
0264         period (since the last sample), not just for the sample point.
0265 
0266         For sample events it's possible to display misc field with -F +misc option,
0267         following letters are displayed for each bit:
0268 
0269           PERF_RECORD_MISC_KERNEL               K
0270           PERF_RECORD_MISC_USER                 U
0271           PERF_RECORD_MISC_HYPERVISOR           H
0272           PERF_RECORD_MISC_GUEST_KERNEL         G
0273           PERF_RECORD_MISC_GUEST_USER           g
0274           PERF_RECORD_MISC_MMAP_DATA*           M
0275           PERF_RECORD_MISC_COMM_EXEC            E
0276           PERF_RECORD_MISC_SWITCH_OUT           S
0277           PERF_RECORD_MISC_SWITCH_OUT_PREEMPT   Sp
0278 
0279           $ perf script -F +misc ...
0280            sched-messaging  1414 K     28690.636582:       4590 cycles ...
0281            sched-messaging  1407 U     28690.636600:     325620 cycles ...
0282            sched-messaging  1414 K     28690.636608:      19473 cycles ...
0283           misc field ___________/
0284 
0285 -k::
0286 --vmlinux=<file>::
0287         vmlinux pathname
0288 
0289 --kallsyms=<file>::
0290         kallsyms pathname
0291 
0292 --symfs=<directory>::
0293         Look for files with symbols relative to this directory.
0294 
0295 -G::
0296 --hide-call-graph::
0297         When printing symbols do not display call chain.
0298 
0299 --stop-bt::
0300         Stop display of callgraph at these symbols
0301 
0302 -C::
0303 --cpu:: Only report samples for the list of CPUs provided. Multiple CPUs can
0304         be provided as a comma-separated list with no space: 0,1. Ranges of
0305         CPUs are specified with -: 0-2. Default is to report samples on all
0306         CPUs.
0307 
0308 -c::
0309 --comms=::
0310         Only display events for these comms. CSV that understands
0311         file://filename entries.
0312 
0313 --pid=::
0314         Only show events for given process ID (comma separated list).
0315 
0316 --tid=::
0317         Only show events for given thread ID (comma separated list).
0318 
0319 -I::
0320 --show-info::
0321         Display extended information about the perf.data file. This adds
0322         information which may be very large and thus may clutter the display.
0323         It currently includes: cpu and numa topology of the host system.
0324         It can only be used with the perf script report mode.
0325 
0326 --show-kernel-path::
0327         Try to resolve the path of [kernel.kallsyms]
0328 
0329 --show-task-events
0330         Display task related events (e.g. FORK, COMM, EXIT).
0331 
0332 --show-mmap-events
0333         Display mmap related events (e.g. MMAP, MMAP2).
0334 
0335 --show-namespace-events
0336         Display namespace events i.e. events of type PERF_RECORD_NAMESPACES.
0337 
0338 --show-switch-events
0339         Display context switch events i.e. events of type PERF_RECORD_SWITCH or
0340         PERF_RECORD_SWITCH_CPU_WIDE.
0341 
0342 --show-lost-events
0343         Display lost events i.e. events of type PERF_RECORD_LOST.
0344 
0345 --show-round-events
0346         Display finished round events i.e. events of type PERF_RECORD_FINISHED_ROUND.
0347 
0348 --show-bpf-events
0349         Display bpf events i.e. events of type PERF_RECORD_KSYMBOL and PERF_RECORD_BPF_EVENT.
0350 
0351 --show-cgroup-events
0352         Display cgroup events i.e. events of type PERF_RECORD_CGROUP.
0353 
0354 --show-text-poke-events
0355         Display text poke events i.e. events of type PERF_RECORD_TEXT_POKE and
0356         PERF_RECORD_KSYMBOL.
0357 
0358 --demangle::
0359         Demangle symbol names to human readable form. It's enabled by default,
0360         disable with --no-demangle.
0361 
0362 --demangle-kernel::
0363         Demangle kernel symbol names to human readable form (for C++ kernels).
0364 
0365 --header
0366         Show perf.data header.
0367 
0368 --header-only
0369         Show only perf.data header.
0370 
0371 --itrace::
0372         Options for decoding instruction tracing data. The options are:
0373 
0374 include::itrace.txt[]
0375 
0376         To disable decoding entirely, use --no-itrace.
0377 
0378 --full-source-path::
0379         Show the full path for source files for srcline output.
0380 
0381 --max-stack::
0382         Set the stack depth limit when parsing the callchain, anything
0383         beyond the specified depth will be ignored. This is a trade-off
0384         between information loss and faster processing especially for
0385         workloads that can have a very long callchain stack.
0386         Note that when using the --itrace option the synthesized callchain size
0387         will override this value if the synthesized callchain size is bigger.
0388 
0389         Default: 127
0390 
0391 --ns::
0392         Use 9 decimal places when displaying time (i.e. show the nanoseconds)
0393 
0394 -f::
0395 --force::
0396         Don't do ownership validation.
0397 
0398 --time::
0399         Only analyze samples within given time window: <start>,<stop>. Times
0400         have the format seconds.nanoseconds. If start is not given (i.e. time
0401         string is ',x.y') then analysis starts at the beginning of the file. If
0402         stop time is not given (i.e. time string is 'x.y,') then analysis goes
0403         to end of file. Multiple ranges can be separated by spaces, which
0404         requires the argument to be quoted e.g. --time "1234.567,1234.789 1235,"
0405 
0406         Also support time percent with multiple time ranges. Time string is
0407         'a%/n,b%/m,...' or 'a%-b%,c%-%d,...'.
0408 
0409         For example:
0410         Select the second 10% time slice:
0411         perf script --time 10%/2
0412 
0413         Select from 0% to 10% time slice:
0414         perf script --time 0%-10%
0415 
0416         Select the first and second 10% time slices:
0417         perf script --time 10%/1,10%/2
0418 
0419         Select from 0% to 10% and 30% to 40% slices:
0420         perf script --time 0%-10%,30%-40%
0421 
0422 --max-blocks::
0423         Set the maximum number of program blocks to print with brstackinsn for
0424         each sample.
0425 
0426 --reltime::
0427         Print time stamps relative to trace start.
0428 
0429 --deltatime::
0430         Print time stamps relative to previous event.
0431 
0432 --per-event-dump::
0433         Create per event files with a "perf.data.EVENT.dump" name instead of
0434         printing to stdout, useful, for instance, for generating flamegraphs.
0435 
0436 --inline::
0437         If a callgraph address belongs to an inlined function, the inline stack
0438         will be printed. Each entry has function name and file/line. Enabled by
0439         default, disable with --no-inline.
0440 
0441 --insn-trace::
0442         Show instruction stream for intel_pt traces. Combine with --xed to
0443         show disassembly.
0444 
0445 --xed::
0446         Run xed disassembler on output. Requires installing the xed disassembler.
0447 
0448 -S::
0449 --symbols=symbol[,symbol...]::
0450         Only consider the listed symbols. Symbols are typically a name
0451         but they may also be hexadecimal address.
0452 
0453         The hexadecimal address may be the start address of a symbol or
0454         any other address to filter the trace records
0455 
0456         For example, to select the symbol noploop or the address 0x4007a0:
0457         perf script --symbols=noploop,0x4007a0
0458 
0459         Support filtering trace records by symbol name, start address of
0460         symbol, any hexadecimal address and address range.
0461 
0462         The comparison order is:
0463 
0464         1. symbol name comparison
0465         2. symbol start address comparison.
0466         3. any hexadecimal address comparison.
0467         4. address range comparison (see --addr-range).
0468 
0469 --addr-range::
0470        Use with -S or --symbols to list traced records within address range.
0471 
0472        For example, to list the traced records within the address range
0473        [0x4007a0, 0x0x4007a9]:
0474        perf script -S 0x4007a0 --addr-range 10
0475 
0476 --dsos=::
0477         Only consider symbols in these DSOs.
0478 
0479 --call-trace::
0480         Show call stream for intel_pt traces. The CPUs are interleaved, but
0481         can be filtered with -C.
0482 
0483 --call-ret-trace::
0484         Show call and return stream for intel_pt traces.
0485 
0486 --graph-function::
0487         For itrace only show specified functions and their callees for
0488         itrace. Multiple functions can be separated by comma.
0489 
0490 --switch-on EVENT_NAME::
0491         Only consider events after this event is found.
0492 
0493 --switch-off EVENT_NAME::
0494         Stop considering events after this event is found.
0495 
0496 --show-on-off-events::
0497         Show the --switch-on/off events too.
0498 
0499 --stitch-lbr::
0500         Show callgraph with stitched LBRs, which may have more complete
0501         callgraph. The perf.data file must have been obtained using
0502         perf record --call-graph lbr.
0503         Disabled by default. In common cases with call stack overflows,
0504         it can recreate better call stacks than the default lbr call stack
0505         output. But this approach is not full proof. There can be cases
0506         where it creates incorrect call stacks from incorrect matches.
0507         The known limitations include exception handing such as
0508         setjmp/longjmp will have calls/returns not match.
0509 
0510 :GMEXAMPLECMD: script
0511 :GMEXAMPLESUBCMD:
0512 include::guest-files.txt[]
0513 
0514 SEE ALSO
0515 --------
0516 linkperf:perf-record[1], linkperf:perf-script-perl[1],
0517 linkperf:perf-script-python[1], linkperf:perf-intel-pt[1],
0518 linkperf:perf-dlfilter[1]