Messages in this thread Patch in this message | | | From | kan.liang@intel ... | Subject | [PATCH RFC 09/10] perf,tools: show counter read result in studio | Date | Tue, 22 Sep 2015 10:13:42 -0400 |
| |
From: Kan Liang <kan.liang@intel.com>
There is no sampling for counter read event, so only show its value.
Here is an example,
$perf record -e '{cycles,instructions}:C' --counter-read-interval 10 -a sleep 5 [ perf record: Woken up 500 times to write data ] [ perf record: Captured and wrote 1.760 MB perf.data (5474 samples) ]
$perf report --group --stdio
# To display the perf.data header info, please use --header/--header-only options. # # # Total Lost Samples: 0 # # Samples: 5K of event 'anon group { cycles, instructions }' # Event count (approx.): 2632480450 # instructions: 823008971 # # Overhead Command Shared Object Symbol # ................ ............ .................. ........................................... # 69.02% 0.00% perf [kernel.vmlinux] [k] smp_call_function_single 11.66% 0.00% swapper [kernel.vmlinux] [k] acpi_idle_do_entry
Signed-off-by: Kan Liang <kan.liang@intel.com> --- tools/perf/builtin-report.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 31818bc..33fda4b 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -334,12 +334,22 @@ static size_t hists__fprintf_nr_sample_events(struct hists *hists, struct report char buf[512]; size_t size = sizeof(buf); int socked_id = hists->socket_filter; + int i, idx = 1; + struct perf_env *env = evsel->evlist->env; + u64 *counter_val = zalloc(evsel->nr_members * sizeof(u64)); if (symbol_conf.filter_relative) { nr_samples = hists->stats.nr_non_filtered_samples; nr_events = hists->stats.total_non_filtered_period; } + if (hists->stats.counter_val != NULL) { + for (i = 0; i < env->nr_cpus_online; i++) { + if ((socked_id < 0) || (env->cpu[i].socket_id == socked_id)) + counter_val[0] += hists->stats.counter_val[i]; + } + } + if (perf_evsel__is_group_event(evsel)) { struct perf_evsel *pos; @@ -356,6 +366,14 @@ static size_t hists__fprintf_nr_sample_events(struct hists *hists, struct report nr_samples += pos_hists->stats.nr_events[PERF_RECORD_SAMPLE]; nr_events += pos_hists->stats.total_period; } + + if (pos_hists->stats.counter_val != NULL) { + for (i = 0; i < env->nr_cpus_online; i++) { + if ((socked_id < 0) || (env->cpu[i].socket_id == socked_id)) + counter_val[idx] += pos_hists->stats.counter_val[i]; + } + } + idx++; } } @@ -378,6 +396,22 @@ static size_t hists__fprintf_nr_sample_events(struct hists *hists, struct report if (socked_id > -1) ret += fprintf(fp, "\n# Processor Socket: %d", socked_id); + if (hists->stats.counter_val != NULL) + ret += fprintf(fp, "\n# %s: %" PRIu64, evsel->name, counter_val[0]); + + if (perf_evsel__is_group_event(evsel)) { + struct perf_evsel *pos; + + idx = 1; + for_each_group_member(pos, evsel) { + const struct hists *pos_hists = evsel__hists(pos); + + if (pos_hists->stats.counter_val != NULL) + ret += fprintf(fp, "\n# %s: %" PRIu64, pos->name, counter_val[idx]); + idx++; + } + } + free(counter_val); return ret + fprintf(fp, "\n#\n"); } @@ -397,7 +431,8 @@ static int perf_evlist__tty_browse_hists(struct perf_evlist *evlist, continue; hists__fprintf_nr_sample_events(hists, rep, evname, stdout); - hists__fprintf(hists, true, 0, 0, rep->min_percent, stdout); + if (pos->prev_raw_counts == NULL) + hists__fprintf(hists, true, 0, 0, rep->min_percent, stdout); fprintf(stdout, "\n\n"); } -- 1.8.3.1
| |