From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752803AbdLAOKF (ORCPT ); Fri, 1 Dec 2017 09:10:05 -0500 Received: from mail.kernel.org ([198.145.29.99]:48492 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751311AbdLAOKE (ORCPT ); Fri, 1 Dec 2017 09:10:04 -0500 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D75A22187C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=acme@kernel.org Date: Fri, 1 Dec 2017 11:10:01 -0300 From: Arnaldo Carvalho de Melo To: Jin Yao Cc: jolsa@kernel.org, peterz@infradead.org, mingo@redhat.com, alexander.shishkin@linux.intel.com, Linux-kernel@vger.kernel.org, ak@linux.intel.com, kan.liang@intel.com, yao.jin@intel.com Subject: Re: [PATCH v5 03/12] perf util: Extend rbtree to support shadow stats Message-ID: <20171201141001.GW3298@kernel.org> References: <1512125856-22056-1-git-send-email-yao.jin@linux.intel.com> <1512125856-22056-4-git-send-email-yao.jin@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1512125856-22056-4-git-send-email-yao.jin@linux.intel.com> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.9.1 (2017-09-22) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Fri, Dec 01, 2017 at 06:57:27PM +0800, Jin Yao escreveu: > Previously the rbtree was used to link generic metrics. Try to make the one line subject more descriptive, I'm changing it to: perf stat: Extend rbtree to support per-thread shadow stats - Arnaldo > This patches adds new ctx/type/stat into rbtree keys because we > will use this rbtree to maintain shadow metrics to replace original > a couple of static arrays for supporting per-thread shadow stats. > > Signed-off-by: Jin Yao > --- > tools/perf/util/stat-shadow.c | 27 +++++++++++++++++++++++++++ > 1 file changed, 27 insertions(+) > > diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c > index 5853901..c53b80d 100644 > --- a/tools/perf/util/stat-shadow.c > +++ b/tools/perf/util/stat-shadow.c > @@ -45,7 +45,10 @@ struct stats walltime_nsecs_stats; > struct saved_value { > struct rb_node rb_node; > struct perf_evsel *evsel; > + enum stat_type type; > + int ctx; > int cpu; > + struct runtime_stat *stat; > struct stats stats; > }; > > @@ -58,6 +61,30 @@ static int saved_value_cmp(struct rb_node *rb_node, const void *entry) > > if (a->cpu != b->cpu) > return a->cpu - b->cpu; > + > + /* > + * Previously the rbtree was used to link generic metrics. > + * The keys were evsel/cpu. Now the rbtree is extended to support > + * per-thread shadow stats. For shadow stats case, the keys > + * are cpu/type/ctx/stat (evsel is NULL). For generic metrics > + * case, the keys are still evsel/cpu (type/ctx/stat are 0 or NULL). > + */ > + if (a->type != b->type) > + return a->type - b->type; > + > + if (a->ctx != b->ctx) > + return a->ctx - b->ctx; > + > + if (a->evsel == NULL && b->evsel == NULL) { > + if (a->stat == b->stat) > + return 0; > + > + if ((char *)a->stat < (char *)b->stat) > + return -1; > + > + return 1; > + } > + > if (a->evsel == b->evsel) > return 0; > if ((char *)a->evsel < (char *)b->evsel) > -- > 2.7.4