Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754851AbbGXVEV (ORCPT ); Fri, 24 Jul 2015 17:04:21 -0400 Received: from mga14.intel.com ([192.55.52.115]:22443 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754623AbbGXVDe (ORCPT ); Fri, 24 Jul 2015 17:03:34 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,540,1432623600"; d="scan'208";a="612361981" From: kan.liang@intel.com To: a.p.zijlstra@chello.nl, acme@kernel.org Cc: luto@kernel.org, mingo@redhat.com, eranian@google.com, ak@linux.intel.com, mark.rutland@arm.com, adrian.hunter@intel.com, jolsa@kernel.org, namhyung@kernel.org, linux-kernel@vger.kernel.org, Kan Liang Subject: [PATCH V2 4/6] perf,tools: save misc sample read value in struct perf_sample Date: Fri, 24 Jul 2015 09:48:30 -0400 Message-Id: <1437745712-16649-5-git-send-email-kan.liang@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1437745712-16649-1-git-send-email-kan.liang@intel.com> References: <1437745712-16649-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 Content-Length: 2987 Lines: 105 From: Kan Liang Save group read results from cycles/ref-cycles/TSC/ASTATE/MSTATE in struct perf_sample. The following sample process function can easily use them to caculate freq/CPU%/CORE_BUSY% and add them in hists. Signed-off-by: Kan Liang --- tools/perf/util/event.h | 11 +++++++++++ tools/perf/util/session.c | 16 ++++++++++++++++ tools/perf/util/session.h | 10 ---------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index c53f363..f7aabe3 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h @@ -176,6 +176,16 @@ enum { PERF_IP_FLAG_TRACE_BEGIN |\ PERF_IP_FLAG_TRACE_END) +enum perf_freq_perf_index { + FREQ_PERF_TSC = 0, + FREQ_PERF_APERF = 1, + FREQ_PERF_MPERF = 2, + FREQ_PERF_CYCLES = 3, + FREQ_PERF_REF_CYCLES = 4, + + FREQ_PERF_MAX +}; + struct perf_sample { u64 ip; u32 pid, tid; @@ -191,6 +201,7 @@ struct perf_sample { u64 data_src; u32 flags; u16 insn_len; + u64 freq_perf_data[FREQ_PERF_MAX]; void *raw_data; struct ip_callchain *callchain; struct branch_stack *branch_stack; diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 7f628d9..7da36b1 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -998,6 +998,8 @@ static int deliver_sample_value(struct perf_evlist *evlist, struct machine *machine) { struct perf_sample_id *sid = perf_evlist__id2sid(evlist, v->id); + struct perf_evsel *evsel; + u64 nr = 0; if (sid) { sample->id = v->id; @@ -1010,6 +1012,20 @@ static int deliver_sample_value(struct perf_evlist *evlist, return 0; } + if (perf_evsel__is_group_leader(sid->evsel)) { + evsel = sid->evsel; + SET_FREQ_PERF_VALUE(evsel, sample->freq_perf_data, + sample->read.group.values[nr].value); + evlist__for_each_continue(evlist, evsel) { + if ((evsel->leader != sid->evsel) || + (++nr >= sample->read.group.nr)) + break; + + SET_FREQ_PERF_VALUE(evsel, sample->freq_perf_data, + sample->read.group.values[nr].value); + } + } + return tool->sample(tool, event, sample, sid->evsel, machine); } diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h index db218ba..ee23872 100644 --- a/tools/perf/util/session.h +++ b/tools/perf/util/session.h @@ -47,16 +47,6 @@ struct perf_session { #define PERF_MSR_APERF 1 #define PERF_MSR_MPERF 2 -enum perf_freq_perf_index { - FREQ_PERF_TSC = 0, - FREQ_PERF_APERF = 1, - FREQ_PERF_MPERF = 2, - FREQ_PERF_CYCLES = 3, - FREQ_PERF_REF_CYCLES = 4, - - FREQ_PERF_MAX -}; - #define SET_FREQ_PERF_VALUE(event, array, value) \ { \ if (event->attr.type == msr_pmu_type) { \ -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/