From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754409AbbFAXAd (ORCPT ); Mon, 1 Jun 2015 19:00:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36598 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754336AbbFAXAT (ORCPT ); Mon, 1 Jun 2015 19:00:19 -0400 From: Jiri Olsa To: Arnaldo Carvalho de Melo Cc: lkml , Peter Zijlstra , Paul Mackerras , David Ahern , Namhyung Kim , Ingo Molnar , Andi Kleen , Stephane Eranian Subject: [PATCH 2/9] perf stat: Replace transaction event check with nameid Date: Tue, 2 Jun 2015 00:59:56 +0200 Message-Id: <1433199603-20082-3-git-send-email-jolsa@kernel.org> In-Reply-To: <1433199603-20082-1-git-send-email-jolsa@kernel.org> References: <1433199603-20082-1-git-send-email-jolsa@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Using nameids to check for transaction events, instead of current possition based way. Link: http://lkml.kernel.org/n/tip-ewc81hslqwhaljvlock51zyv@git.kernel.org Signed-off-by: Jiri Olsa --- tools/perf/builtin-stat.c | 55 ++++++----------------------------------------- tools/perf/util/evsel.c | 6 +++++- tools/perf/util/evsel.h | 4 ++++ 3 files changed, 16 insertions(+), 49 deletions(-) diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index fd577f725d23..1f9269419b01 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -96,17 +96,6 @@ static const char * const transaction_limited_attrs[] = { "}" }; -/* must match transaction_attrs and the beginning limited_attrs */ -enum { - T_TASK_CLOCK, - T_INSTRUCTIONS, - T_CYCLES, - T_CYCLES_IN_TX, - T_TRANSACTION_START, - T_ELISION_START, - T_CYCLES_IN_TX_CP, -}; - static struct perf_evlist *evsel_list; static struct target target = { @@ -354,29 +343,6 @@ static inline int nsec_counter(struct perf_evsel *evsel) return 0; } -static struct perf_evsel *nth_evsel(int n) -{ - static struct perf_evsel **array; - static int array_len; - struct perf_evsel *ev; - int j; - - /* Assumes this only called when evsel_list does not change anymore. */ - if (!array) { - evlist__for_each(evsel_list, ev) - array_len++; - array = malloc(array_len * sizeof(void *)); - if (!array) - exit(ENOMEM); - j = 0; - evlist__for_each(evsel_list, ev) - array[j++] = ev; - } - if (n < array_len) - return array[n]; - return NULL; -} - /* * Update various tracking values we maintain to print * more semantic information such as miss/hit ratios, @@ -391,14 +357,11 @@ static void update_shadow_stats(struct perf_evsel *counter, u64 *count, update_stats(&runtime_nsecs_stats[cpu], count[0]); else if (perf_evsel__match(counter, HARDWARE, HW_CPU_CYCLES)) update_stats(&runtime_cycles_stats[ctx][cpu], count[0]); - else if (transaction_run && - perf_evsel__cmp(counter, nth_evsel(T_CYCLES_IN_TX))) + else if (transaction_run && perf_evsel__is(counter, CYCLES_IN_TX)) update_stats(&runtime_transaction_stats[ctx][cpu], count[0]); - else if (transaction_run && - perf_evsel__cmp(counter, nth_evsel(T_TRANSACTION_START))) + else if (transaction_run && perf_evsel__is(counter, TRANSACTION_START)) update_stats(&runtime_transaction_stats[ctx][cpu], count[0]); - else if (transaction_run && - perf_evsel__cmp(counter, nth_evsel(T_ELISION_START))) + else if (transaction_run && perf_evsel__is(counter, ELISION_START)) update_stats(&runtime_elision_stats[ctx][cpu], count[0]); else if (perf_evsel__match(counter, HARDWARE, HW_STALLED_CYCLES_FRONTEND)) update_stats(&runtime_stalled_cycles_front_stats[ctx][cpu], count[0]); @@ -1209,15 +1172,13 @@ static void abs_printout(int id, int nr, struct perf_evsel *evsel, double avg) } else { fprintf(output, " "); } - } else if (transaction_run && - perf_evsel__cmp(evsel, nth_evsel(T_CYCLES_IN_TX))) { + } else if (transaction_run && perf_evsel__is(evsel, CYCLES_IN_TX)) { total = avg_stats(&runtime_cycles_stats[ctx][cpu]); if (total) fprintf(output, " # %5.2f%% transactional cycles ", 100.0 * (avg / total)); - } else if (transaction_run && - perf_evsel__cmp(evsel, nth_evsel(T_CYCLES_IN_TX_CP))) { + } else if (transaction_run && perf_evsel__is(evsel, CYCLES_IN_TX_CP)) { total = avg_stats(&runtime_cycles_stats[ctx][cpu]); total2 = avg_stats(&runtime_cycles_in_tx_stats[ctx][cpu]); if (total2 < avg) @@ -1226,8 +1187,7 @@ static void abs_printout(int id, int nr, struct perf_evsel *evsel, double avg) fprintf(output, " # %5.2f%% aborted cycles ", 100.0 * ((total2-avg) / total)); - } else if (transaction_run && - perf_evsel__cmp(evsel, nth_evsel(T_TRANSACTION_START)) && + } else if (transaction_run && perf_evsel__is(evsel, TRANSACTION_START) && avg > 0 && runtime_cycles_in_tx_stats[ctx][cpu].n != 0) { total = avg_stats(&runtime_cycles_in_tx_stats[ctx][cpu]); @@ -1236,8 +1196,7 @@ static void abs_printout(int id, int nr, struct perf_evsel *evsel, double avg) ratio = total / avg; fprintf(output, " # %8.0f cycles / transaction ", ratio); - } else if (transaction_run && - perf_evsel__cmp(evsel, nth_evsel(T_ELISION_START)) && + } else if (transaction_run && perf_evsel__is(evsel, ELISION_START) && avg > 0 && runtime_cycles_in_tx_stats[ctx][cpu].n != 0) { total = avg_stats(&runtime_cycles_in_tx_stats[ctx][cpu]); diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 9e057319933d..13a033f5e99e 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -82,7 +82,11 @@ set_methods: #define ID(id, name) [PERF_EVSEL_NAMEID__##id] = #name static const char *nameid_str[PERF_EVSEL_NAMEID__MAX] = { - ID(NONE, x), + ID(NONE, x), + ID(CYCLES_IN_TX, cpu/cycles-t/), + ID(TRANSACTION_START, cpu/tx-start/), + ID(ELISION_START, cpu/el-start/), + ID(CYCLES_IN_TX_CP, cpu/cycles-ct/), }; #undef ID diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index f89f34f1a7a1..3110bc34790e 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -48,6 +48,10 @@ struct cgroup_sel; enum perf_evsel_nameid { PERF_EVSEL_NAMEID__NONE = 0, + PERF_EVSEL_NAMEID__CYCLES_IN_TX, + PERF_EVSEL_NAMEID__TRANSACTION_START, + PERF_EVSEL_NAMEID__ELISION_START, + PERF_EVSEL_NAMEID__CYCLES_IN_TX_CP, PERF_EVSEL_NAMEID__MAX, }; -- 1.9.3