All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@redhat.com>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Song Liu <songliubraving@fb.com>,
	Andrii Nakryiko <andriin@fb.com>,
	Kajol Jain <kjain@linux.ibm.com>, Andi Kleen <ak@linux.intel.com>,
	John Garry <john.garry@huawei.com>,
	Jin Yao <yao.jin@linux.intel.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	Cong Wang <xiyou.wangcong@gmail.com>,
	Kim Phillips <kim.phillips@amd.com>, Paul Clarke <pc@us.ibm.com>,
	Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	bpf@vger.kernel.org, linux-perf-users@vger.kernel.org,
	Vince Weaver <vincent.weaver@maine.edu>,
	Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH 3/7] perf metricgroup: Delay events string creation
Date: Wed, 20 May 2020 15:14:12 +0200	[thread overview]
Message-ID: <20200520131412.GK157452@krava> (raw)
In-Reply-To: <20200520072814.128267-4-irogers@google.com>

On Wed, May 20, 2020 at 12:28:10AM -0700, Ian Rogers wrote:
> Currently event groups are placed into groups_list at the same time as
> the events string containing the events is built. Separate these two
> operations and build the groups_list first, then the event string from
> the groups_list. This adds an ability to reorder the groups_list that
> will be used in a later patch.
> 
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/util/metricgroup.c | 38 +++++++++++++++++++++++------------
>  1 file changed, 25 insertions(+), 13 deletions(-)
> 
> diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
> index 7a43ee0a2e40..afd960d03a77 100644
> --- a/tools/perf/util/metricgroup.c
> +++ b/tools/perf/util/metricgroup.c
> @@ -90,6 +90,7 @@ struct egroup {
>  	const char *metric_expr;
>  	const char *metric_unit;
>  	int runtime;
> +	bool has_constraint;
>  };
>  
>  static struct evsel *find_evsel_group(struct evlist *perf_evlist,
> @@ -485,8 +486,8 @@ int __weak arch_get_runtimeparam(void)
>  	return 1;
>  }
>  
> -static int __metricgroup__add_metric(struct strbuf *events,
> -		struct list_head *group_list, struct pmu_event *pe, int runtime)
> +static int __metricgroup__add_metric(struct list_head *group_list,
> +				     struct pmu_event *pe, int runtime)
>  {
>  	struct egroup *eg;
>  
> @@ -499,6 +500,7 @@ static int __metricgroup__add_metric(struct strbuf *events,
>  	eg->metric_expr = pe->metric_expr;
>  	eg->metric_unit = pe->unit;
>  	eg->runtime = runtime;
> +	eg->has_constraint = metricgroup__has_constraint(pe);
>  
>  	if (expr__find_other(pe->metric_expr, NULL, &eg->pctx, runtime) < 0) {
>  		expr__ctx_clear(&eg->pctx);
> @@ -506,14 +508,6 @@ static int __metricgroup__add_metric(struct strbuf *events,
>  		return -EINVAL;
>  	}
>  
> -	if (events->len > 0)
> -		strbuf_addf(events, ",");
> -
> -	if (metricgroup__has_constraint(pe))
> -		metricgroup__add_metric_non_group(events, &eg->pctx);
> -	else
> -		metricgroup__add_metric_weak_group(events, &eg->pctx);
> -
>  	list_add_tail(&eg->nd, group_list);
>  
>  	return 0;
> @@ -524,6 +518,7 @@ static int metricgroup__add_metric(const char *metric, struct strbuf *events,
>  {
>  	struct pmu_events_map *map = perf_pmu__find_map(NULL);
>  	struct pmu_event *pe;
> +	struct egroup *eg;
>  	int i, ret = -EINVAL;
>  
>  	if (!map)
> @@ -542,7 +537,8 @@ static int metricgroup__add_metric(const char *metric, struct strbuf *events,
>  			pr_debug("metric expr %s for %s\n", pe->metric_expr, pe->metric_name);
>  
>  			if (!strstr(pe->metric_expr, "?")) {
> -				ret = __metricgroup__add_metric(events, group_list, pe, 1);
> +				ret = __metricgroup__add_metric(group_list,
> +								pe, 1);
>  			} else {
>  				int j, count;
>  
> @@ -553,13 +549,29 @@ static int metricgroup__add_metric(const char *metric, struct strbuf *events,
>  				 * those events to group_list.
>  				 */
>  
> -				for (j = 0; j < count; j++)
> -					ret = __metricgroup__add_metric(events, group_list, pe, j);
> +				for (j = 0; j < count; j++) {
> +					ret = __metricgroup__add_metric(
> +						group_list, pe, j);
> +				}
>  			}
>  			if (ret == -ENOMEM)
>  				break;
>  		}
>  	}
> +	if (!ret) {

could you please do instead:

	if (ret)
		return ret;

so the code below cuts down one indent level and you
don't need to split up the lines

thanks,
jirka

> +		list_for_each_entry(eg, group_list, nd) {
> +			if (events->len > 0)
> +				strbuf_addf(events, ",");
> +
> +			if (eg->has_constraint) {
> +				metricgroup__add_metric_non_group(events,
> +								  &eg->pctx);
> +			} else {
> +				metricgroup__add_metric_weak_group(events,
> +								   &eg->pctx);
> +			}
> +		}
> +	}
>  	return ret;
>  }
>  
> -- 
> 2.26.2.761.g0e0b3e54be-goog
> 


WARNING: multiple messages have this Message-ID (diff)
From: Jiri Olsa <jolsa@redhat.com>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Song Liu <songliubraving@fb.com>,
	Andrii Nakryiko <andriin@fb.com>,
	Kajol Jain <kjain@linux.ibm.com>, Andi Kleen <ak@linux.intel.com>,
	John Garry <john.garry@huawei.com>,
	Jin Yao <yao.jin@linux.intel.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	Cong Wang <xiyou.wangcong@gmail.com>,
	Kim Phillips <kim.phillips@amd.com>, Paul Clarke <pc@us.ibm.com>,
	Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	bpf@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH 3/7] perf metricgroup: Delay events string creation
Date: Wed, 20 May 2020 15:14:12 +0200	[thread overview]
Message-ID: <20200520131412.GK157452@krava> (raw)
In-Reply-To: <20200520072814.128267-4-irogers@google.com>

On Wed, May 20, 2020 at 12:28:10AM -0700, Ian Rogers wrote:
> Currently event groups are placed into groups_list at the same time as
> the events string containing the events is built. Separate these two
> operations and build the groups_list first, then the event string from
> the groups_list. This adds an ability to reorder the groups_list that
> will be used in a later patch.
> 
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/util/metricgroup.c | 38 +++++++++++++++++++++++------------
>  1 file changed, 25 insertions(+), 13 deletions(-)
> 
> diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
> index 7a43ee0a2e40..afd960d03a77 100644
> --- a/tools/perf/util/metricgroup.c
> +++ b/tools/perf/util/metricgroup.c
> @@ -90,6 +90,7 @@ struct egroup {
>  	const char *metric_expr;
>  	const char *metric_unit;
>  	int runtime;
> +	bool has_constraint;
>  };
>  
>  static struct evsel *find_evsel_group(struct evlist *perf_evlist,
> @@ -485,8 +486,8 @@ int __weak arch_get_runtimeparam(void)
>  	return 1;
>  }
>  
> -static int __metricgroup__add_metric(struct strbuf *events,
> -		struct list_head *group_list, struct pmu_event *pe, int runtime)
> +static int __metricgroup__add_metric(struct list_head *group_list,
> +				     struct pmu_event *pe, int runtime)
>  {
>  	struct egroup *eg;
>  
> @@ -499,6 +500,7 @@ static int __metricgroup__add_metric(struct strbuf *events,
>  	eg->metric_expr = pe->metric_expr;
>  	eg->metric_unit = pe->unit;
>  	eg->runtime = runtime;
> +	eg->has_constraint = metricgroup__has_constraint(pe);
>  
>  	if (expr__find_other(pe->metric_expr, NULL, &eg->pctx, runtime) < 0) {
>  		expr__ctx_clear(&eg->pctx);
> @@ -506,14 +508,6 @@ static int __metricgroup__add_metric(struct strbuf *events,
>  		return -EINVAL;
>  	}
>  
> -	if (events->len > 0)
> -		strbuf_addf(events, ",");
> -
> -	if (metricgroup__has_constraint(pe))
> -		metricgroup__add_metric_non_group(events, &eg->pctx);
> -	else
> -		metricgroup__add_metric_weak_group(events, &eg->pctx);
> -
>  	list_add_tail(&eg->nd, group_list);
>  
>  	return 0;
> @@ -524,6 +518,7 @@ static int metricgroup__add_metric(const char *metric, struct strbuf *events,
>  {
>  	struct pmu_events_map *map = perf_pmu__find_map(NULL);
>  	struct pmu_event *pe;
> +	struct egroup *eg;
>  	int i, ret = -EINVAL;
>  
>  	if (!map)
> @@ -542,7 +537,8 @@ static int metricgroup__add_metric(const char *metric, struct strbuf *events,
>  			pr_debug("metric expr %s for %s\n", pe->metric_expr, pe->metric_name);
>  
>  			if (!strstr(pe->metric_expr, "?")) {
> -				ret = __metricgroup__add_metric(events, group_list, pe, 1);
> +				ret = __metricgroup__add_metric(group_list,
> +								pe, 1);
>  			} else {
>  				int j, count;
>  
> @@ -553,13 +549,29 @@ static int metricgroup__add_metric(const char *metric, struct strbuf *events,
>  				 * those events to group_list.
>  				 */
>  
> -				for (j = 0; j < count; j++)
> -					ret = __metricgroup__add_metric(events, group_list, pe, j);
> +				for (j = 0; j < count; j++) {
> +					ret = __metricgroup__add_metric(
> +						group_list, pe, j);
> +				}
>  			}
>  			if (ret == -ENOMEM)
>  				break;
>  		}
>  	}
> +	if (!ret) {

could you please do instead:

	if (ret)
		return ret;

so the code below cuts down one indent level and you
don't need to split up the lines

thanks,
jirka

> +		list_for_each_entry(eg, group_list, nd) {
> +			if (events->len > 0)
> +				strbuf_addf(events, ",");
> +
> +			if (eg->has_constraint) {
> +				metricgroup__add_metric_non_group(events,
> +								  &eg->pctx);
> +			} else {
> +				metricgroup__add_metric_weak_group(events,
> +								   &eg->pctx);
> +			}
> +		}
> +	}
>  	return ret;
>  }
>  
> -- 
> 2.26.2.761.g0e0b3e54be-goog
> 

  reply	other threads:[~2020-05-20 13:14 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-20  7:28 [PATCH 0/7] Share events between metrics Ian Rogers
2020-05-20  7:28 ` [PATCH 1/7] perf metricgroup: Change evlist_used to a bitmap Ian Rogers
2020-05-20 13:14   ` Jiri Olsa
2020-05-20 13:14     ` Jiri Olsa
2020-05-20 13:35     ` Arnaldo Carvalho de Melo
2020-05-20 13:35       ` Arnaldo Carvalho de Melo
2020-05-20  7:28 ` [PATCH 2/7] perf metricgroup: Always place duration_time last Ian Rogers
2020-05-20  7:28 ` [PATCH 3/7] perf metricgroup: Delay events string creation Ian Rogers
2020-05-20 13:14   ` Jiri Olsa [this message]
2020-05-20 13:14     ` Jiri Olsa
2020-05-20 18:22     ` Ian Rogers
2020-05-20 18:22       ` Ian Rogers
2020-05-20 20:34       ` Arnaldo Carvalho de Melo
2020-05-20 20:34         ` Arnaldo Carvalho de Melo
2020-05-20 22:10         ` Jiri Olsa
2020-05-20 22:10           ` Jiri Olsa
2020-05-20  7:28 ` [PATCH 4/7] perf metricgroup: Order event groups by size Ian Rogers
2020-05-20  7:28 ` [PATCH 5/7] perf metricgroup: Remove duped metric group events Ian Rogers
2020-05-20 13:48   ` Jiri Olsa
2020-05-20 13:48     ` Jiri Olsa
2020-05-20 16:50     ` Ian Rogers
2020-05-20 16:50       ` Ian Rogers
2020-05-20 22:09       ` Jiri Olsa
2020-05-20 22:09         ` Jiri Olsa
2020-05-20 22:42         ` Ian Rogers
2020-05-20 22:42           ` Ian Rogers
2020-05-21 10:54           ` Jiri Olsa
2020-05-21 10:54             ` Jiri Olsa
2020-05-21 17:26             ` Ian Rogers
2020-05-21 17:26               ` Ian Rogers
2020-05-21 17:28               ` Arnaldo Carvalho de Melo
2020-05-21 17:28                 ` Arnaldo Carvalho de Melo
2020-05-20  7:28 ` [PATCH 6/7] perf metricgroup: Add options to not group or merge Ian Rogers
2020-05-20  7:28 ` [PATCH 7/7] perf metricgroup: Remove unnecessary ',' from events Ian Rogers
2020-05-20 13:13 ` [PATCH 0/7] Share events between metrics Jiri Olsa
2020-05-20 13:13   ` Jiri Olsa
2020-05-20 14:50   ` Ian Rogers
2020-05-20 14:50     ` Ian Rogers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200520131412.GK157452@krava \
    --to=jolsa@redhat.com \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=andriin@fb.com \
    --cc=bpf@vger.kernel.org \
    --cc=eranian@google.com \
    --cc=irogers@google.com \
    --cc=john.garry@huawei.com \
    --cc=kan.liang@linux.intel.com \
    --cc=kim.phillips@amd.com \
    --cc=kjain@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pc@us.ibm.com \
    --cc=peterz@infradead.org \
    --cc=songliubraving@fb.com \
    --cc=srikar@linux.vnet.ibm.com \
    --cc=vincent.weaver@maine.edu \
    --cc=xiyou.wangcong@gmail.com \
    --cc=yao.jin@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.