diff options
author | Jiri Olsa <jolsa@kernel.org> | 2015-11-05 15:40:51 +0100 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-12-17 16:00:22 -0300 |
commit | 5a6ea81b8f9ce2736759d256ac4d63be65751199 (patch) | |
tree | b821a45a82a2d8ca69e1015ce5a9506af602a7f4 /tools | |
parent | 664c98d4e1c2ff60627d78d4c8ae81cd2df13783 (diff) |
perf stat record: Write stat events on record
Writing stat events on 'perf stat record' at the time we read counter
values from kernel.
Committer note:
After the patch:
$ perf stat record usleep 1
Performance counter stats for 'usleep 1':
0.598006 task-clock (msec) # 0.484 CPUs utilized
1 context-switches # 0.002 M/sec
0 cpu-migrations # 0.000 K/sec
52 page-faults # 0.087 M/sec
882,744 cycles # 1.476 GHz
581,416 stalled-cycles-frontend # 65.86% frontend cycles idle
<not supported> stalled-cycles-backend
636,479 instructions # 0.72 insns per cycle
# 0.91 stalled cycles per insn
129,334 branches # 216.275 M/sec
7,512 branch-misses # 5.81% of all branches
0.001235157 seconds time elapsed
$ oldperf evlist
task-clock
context-switches
cpu-migrations
page-faults
cycles
stalled-cycles-frontend
stalled-cycles-backend
instructions
branches
branch-misses
$ oldperf report --stdio
Error:
The perf.data file has no samples!
# To display the perf.data header info, please use --header/--header-only options.
#
$ perf report -D | grep PERF_RECORD
0x5b0 [0x28]: PERF_RECORD_THREAD_MAP nr: 1 thread: 5504
0x5d8 [0x12]: PERF_RECORD_CPU_MAP nr: 1 cpu: 65535
0x5ea [0x40]: PERF_RECORD_STAT_CONFIG
0x62a [0x30]: PERF_RECORD_STAT
0x65a [0x30]: PERF_RECORD_STAT
0x68a [0x30]: PERF_RECORD_STAT
0x6ba [0x30]: PERF_RECORD_STAT
0x6ea [0x30]: PERF_RECORD_STAT
0x71a [0x30]: PERF_RECORD_STAT
0x74a [0x30]: PERF_RECORD_STAT
0x77a [0x30]: PERF_RECORD_STAT
0x7aa [0x30]: PERF_RECORD_STAT
-1 -1 0x7da [0x40]: PERF_RECORD_MMAP -1/0: [0xffffffff81000000(0x1f000000) @ 0xffffffff81000000]: x [kernel.kallsyms]_text
$
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Kan Liang <kan.liang@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1446734469-11352-8-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/builtin-stat.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 8a2f9ce677e7..32aa2ea1c553 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -231,6 +231,18 @@ static int process_synthesized_event(struct perf_tool *tool __maybe_unused, return 0; } +#define SID(e, x, y) xyarray__entry(e->sample_id, x, y) + +static int +perf_evsel__write_stat_event(struct perf_evsel *counter, u32 cpu, u32 thread, + struct perf_counts_values *count) +{ + struct perf_sample_id *sid = SID(counter, cpu, thread); + + return perf_event__synthesize_stat(NULL, cpu, thread, sid->id, count, + process_synthesized_event, NULL); +} + /* * Read out the results of a single counter: * do not aggregate counts across CPUs in system-wide mode @@ -254,6 +266,13 @@ static int read_counter(struct perf_evsel *counter) count = perf_counts(counter->counts, cpu, thread); if (perf_evsel__read(counter, cpu, thread, count)) return -1; + + if (STAT_RECORD) { + if (perf_evsel__write_stat_event(counter, cpu, thread, count)) { + pr_err("failed to write stat event\n"); + return -1; + } + } } } |