From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935062AbbIVVdN (ORCPT ); Tue, 22 Sep 2015 17:33:13 -0400 Received: from mga11.intel.com ([192.55.52.93]:23374 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934889AbbIVVaI (ORCPT ); Tue, 22 Sep 2015 17:30:08 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,574,1437462000"; d="scan'208";a="810764287" From: kan.liang@intel.com To: acme@kernel.org Cc: jolsa@kernel.org, a.p.zijlstra@chello.nl, mingo@redhat.com, namhyung@kernel.org, ak@linux.intel.com, linux-kernel@vger.kernel.org, Kan Liang Subject: [PATCH RFC 09/10] perf,tools: show counter read result in studio Date: Tue, 22 Sep 2015 10:13:42 -0400 Message-Id: <1442931223-51708-10-git-send-email-kan.liang@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1442931223-51708-1-git-send-email-kan.liang@intel.com> References: <1442931223-51708-1-git-send-email-kan.liang@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kan Liang 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 --- 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