Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754097AbbGWTCS (ORCPT ); Thu, 23 Jul 2015 15:02:18 -0400 Received: from mga14.intel.com ([192.55.52.115]:8226 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753757AbbGWTCM (ORCPT ); Thu, 23 Jul 2015 15:02:12 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,532,1432623600"; d="scan'208";a="768436467" From: Kan Liang 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 3/5] perf,tools: save misc sample read value in struct perf_sample Date: Thu, 23 Jul 2015 07:46:28 -0400 Message-Id: <1437651990-62019-4-git-send-email-kan.liang@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1437651990-62019-1-git-send-email-kan.liang@intel.com> References: <1437651990-62019-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: 2948 Lines: 103 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 6dd20b5..939dfed 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -999,6 +999,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; @@ -1011,6 +1013,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 df2094d..8c3cae8 100644 --- a/tools/perf/util/session.h +++ b/tools/perf/util/session.h @@ -46,16 +46,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/