2009-04-20 21:58:01 +08:00
|
|
|
perf-record(1)
|
2009-05-30 18:38:51 +08:00
|
|
|
==============
|
2009-04-20 21:58:01 +08:00
|
|
|
|
|
|
|
NAME
|
|
|
|
----
|
2009-05-27 15:33:18 +08:00
|
|
|
perf-record - Run a command and record its profile into perf.data
|
2009-04-20 21:58:01 +08:00
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
--------
|
|
|
|
[verse]
|
|
|
|
'perf record' [-e <EVENT> | --event=EVENT] [-l] [-a] <command>
|
2009-05-28 22:25:34 +08:00
|
|
|
'perf record' [-e <EVENT> | --event=EVENT] [-l] [-a] -- <command> [<options>]
|
2009-04-20 21:58:01 +08:00
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
-----------
|
|
|
|
This command runs a command and gathers a performance counter profile
|
2009-05-27 15:33:18 +08:00
|
|
|
from it, into perf.data - without displaying anything.
|
2009-04-20 21:58:01 +08:00
|
|
|
|
|
|
|
This file can then be inspected later on, using 'perf report'.
|
|
|
|
|
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
-------
|
|
|
|
<command>...::
|
|
|
|
Any command you can specify in a shell.
|
|
|
|
|
|
|
|
-e::
|
|
|
|
--event=::
|
2009-11-23 22:42:35 +08:00
|
|
|
Select the PMU event. Selection can be:
|
2009-04-20 21:58:01 +08:00
|
|
|
|
2009-11-23 22:42:35 +08:00
|
|
|
- a symbolic event name (use 'perf list' to list all events)
|
|
|
|
|
|
|
|
- a raw PMU event (eventsel+umask) in the form of rNNN where NNN is a
|
|
|
|
hexadecimal event descriptor.
|
|
|
|
|
|
|
|
- a hardware breakpoint event in the form of '\mem:addr[:access]'
|
|
|
|
where addr is the address in memory you want to break in.
|
|
|
|
Access is the memory access type (read, write, execute) it can
|
|
|
|
be passed as follows: '\mem:addr[:[r][w][x]]'.
|
|
|
|
If you want to profile read-write accesses in 0x1000, just set
|
|
|
|
'mem:0x1000:rw'.
|
2010-12-01 09:57:16 +08:00
|
|
|
|
|
|
|
--filter=<filter>::
|
|
|
|
Event filter.
|
|
|
|
|
2009-04-20 21:58:01 +08:00
|
|
|
-a::
|
2010-12-01 09:57:16 +08:00
|
|
|
--all-cpus::
|
|
|
|
System-wide collection from all CPUs.
|
2009-04-20 21:58:01 +08:00
|
|
|
|
|
|
|
-l::
|
2009-08-05 21:04:53 +08:00
|
|
|
Scale counter values.
|
|
|
|
|
|
|
|
-p::
|
|
|
|
--pid=::
|
2010-12-01 09:57:16 +08:00
|
|
|
Record events on existing process ID.
|
|
|
|
|
|
|
|
-t::
|
|
|
|
--tid=::
|
|
|
|
Record events on existing thread ID.
|
2009-08-05 21:04:53 +08:00
|
|
|
|
|
|
|
-r::
|
|
|
|
--realtime=::
|
|
|
|
Collect data with this RT SCHED_FIFO priority.
|
perf record: Add "nodelay" mode, disabled by default
Sometimes there is a need to use perf in "live-log" mode. The problem
is, for seldom events, actual info output is largely delayed because
perf-record reads sample data in whole pages.
So for such scenarious, add flag for perf-record to go in "nodelay"
mode. To track e.g. what's going on in icmp_rcv while ping is running
Use it with something like this:
(1) $ perf probe -L icmp_rcv | grep -U8 '^ *43\>'
goto error;
}
38 if (!pskb_pull(skb, sizeof(*icmph)))
goto error;
icmph = icmp_hdr(skb);
43 ICMPMSGIN_INC_STATS_BH(net, icmph->type);
/*
* 18 is the highest 'known' ICMP type. Anything else is a mystery
*
* RFC 1122: 3.2.2 Unknown ICMP messages types MUST be silently
* discarded.
*/
50 if (icmph->type > NR_ICMP_TYPES)
goto error;
$ perf probe icmp_rcv:43 'type=icmph->type'
(2) $ cat trace-icmp.py
[...]
def trace_begin():
print "in trace_begin"
def trace_end():
print "in trace_end"
def probe__icmp_rcv(event_name, context, common_cpu,
common_secs, common_nsecs, common_pid, common_comm,
__probe_ip, type):
print_header(event_name, common_cpu, common_secs, common_nsecs,
common_pid, common_comm)
print "__probe_ip=%u, type=%u\n" % \
(__probe_ip, type),
[...]
(3) $ perf record -a -D -e probe:icmp_rcv -o - | \
perf script -i - -s trace-icmp.py
Thanks to Peter Zijlstra for pointing how to do it.
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>, Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
LKML-Reference: <20110112140613.GA11698@tugrik.mns.mnsspb.ru>
Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2011-01-12 22:59:36 +08:00
|
|
|
-D::
|
|
|
|
--no-delay::
|
|
|
|
Collect data without buffering.
|
2009-08-05 21:04:53 +08:00
|
|
|
-A::
|
|
|
|
--append::
|
|
|
|
Append to the output file to do incremental profiling.
|
|
|
|
|
|
|
|
-f::
|
|
|
|
--force::
|
2010-04-15 01:42:07 +08:00
|
|
|
Overwrite existing data file. (deprecated)
|
2009-08-05 21:04:53 +08:00
|
|
|
|
|
|
|
-c::
|
|
|
|
--count=::
|
|
|
|
Event period to sample.
|
|
|
|
|
|
|
|
-o::
|
|
|
|
--output=::
|
|
|
|
Output file name.
|
|
|
|
|
|
|
|
-i::
|
2010-05-12 16:40:01 +08:00
|
|
|
--no-inherit::
|
|
|
|
Child tasks do not inherit counters.
|
2009-08-05 21:04:53 +08:00
|
|
|
-F::
|
|
|
|
--freq=::
|
|
|
|
Profile at this frequency.
|
|
|
|
|
|
|
|
-m::
|
|
|
|
--mmap-pages=::
|
|
|
|
Number of mmap data pages.
|
|
|
|
|
|
|
|
-g::
|
|
|
|
--call-graph::
|
|
|
|
Do call-graph (stack chain/backtrace) recording.
|
|
|
|
|
2010-10-27 01:20:09 +08:00
|
|
|
-q::
|
|
|
|
--quiet::
|
|
|
|
Don't print any message, useful for scripting.
|
|
|
|
|
2009-08-05 21:04:53 +08:00
|
|
|
-v::
|
|
|
|
--verbose::
|
|
|
|
Be more verbose (show counter open errors, etc).
|
|
|
|
|
|
|
|
-s::
|
|
|
|
--stat::
|
|
|
|
Per thread counts.
|
|
|
|
|
|
|
|
-d::
|
|
|
|
--data::
|
|
|
|
Sample addresses.
|
|
|
|
|
2010-12-02 20:25:28 +08:00
|
|
|
-T::
|
|
|
|
--timestamp::
|
|
|
|
Sample timestamps. Use it with 'perf report -D' to see the timestamps,
|
|
|
|
for instance.
|
|
|
|
|
2009-08-05 21:04:53 +08:00
|
|
|
-n::
|
|
|
|
--no-samples::
|
|
|
|
Don't sample.
|
2009-04-20 21:58:01 +08:00
|
|
|
|
2009-08-31 09:32:03 +08:00
|
|
|
-R::
|
|
|
|
--raw-samples::
|
2010-04-15 02:05:17 +08:00
|
|
|
Collect raw sample records from all opened counters (default for tracepoint counters).
|
2009-08-31 09:32:03 +08:00
|
|
|
|
2010-05-28 18:00:01 +08:00
|
|
|
-C::
|
|
|
|
--cpu::
|
2010-12-01 09:57:16 +08:00
|
|
|
Collect samples only on the list of CPUs provided. Multiple CPUs can be provided as a
|
|
|
|
comma-separated list with no space: 0,1. Ranges of CPUs are specified with -: 0-2.
|
2010-05-28 18:00:01 +08:00
|
|
|
In per-thread mode with inheritance mode on (default), samples are captured only when
|
|
|
|
the thread executes on the designated CPUs. Default is to monitor all CPUs.
|
|
|
|
|
2010-06-17 17:39:01 +08:00
|
|
|
-N::
|
|
|
|
--no-buildid-cache::
|
|
|
|
Do not update the builid cache. This saves some overhead in situations
|
|
|
|
where the information in the perf.data file (which includes buildids)
|
|
|
|
is sufficient.
|
|
|
|
|
2009-04-20 21:58:01 +08:00
|
|
|
SEE ALSO
|
|
|
|
--------
|
2009-06-06 20:56:33 +08:00
|
|
|
linkperf:perf-stat[1], linkperf:perf-list[1]
|