Re: [PATCH 13/16] perf tools: Move leader-sampling configuration

From: Arnaldo Carvalho de Melo
Date: Thu Apr 16 2020 - 11:30:08 EST


Em Wed, Apr 01, 2020 at 01:16:10PM +0300, Adrian Hunter escreveu:
> Move leader-sampling configuration in preparation for adding support for
> leader sampling with AUX area events.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> ---
> tools/perf/util/evsel.c | 19 -------------------
> tools/perf/util/record.c | 29 +++++++++++++++++++++++++++++
> 2 files changed, 29 insertions(+), 19 deletions(-)
>
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index d4ab073c9fe7..8ddcb95396ac 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -1022,25 +1022,6 @@ void perf_evsel__config(struct evsel *evsel, struct record_opts *opts,
> }
> }
>
> - /*
> - * Disable sampling for all group members other
> - * than leader in case leader 'leads' the sampling.
> - */
> - if ((leader != evsel) && leader->sample_read) {
> - attr->freq = 0;
> - attr->sample_freq = 0;
> - attr->sample_period = 0;
> - attr->write_backward = 0;
> -
> - /*
> - * We don't get sample for slave events, we make them
> - * when delivering group leader sample. Set the slave
> - * event to follow the master sample_type to ease up
> - * report.
> - */
> - attr->sample_type = leader->core.attr.sample_type;
> - }
> -
> if (opts->no_samples)
> attr->sample_freq = 0;
>
> diff --git a/tools/perf/util/record.c b/tools/perf/util/record.c
> index 7def66168503..ce383fc1bbbc 100644
> --- a/tools/perf/util/record.c
> +++ b/tools/perf/util/record.c
> @@ -167,6 +167,31 @@ bool perf_can_aux_sample(void)
> return true;
> }
>
> +static void perf_evsel__config_leader_sampling(struct evsel *evsel)
> +{
> + struct perf_event_attr *attr = &evsel->core.attr;
> + struct evsel *leader = evsel->leader;
> +
> + /*
> + * Disable sampling for all group members other
> + * than leader in case leader 'leads' the sampling.
> + */
> + if (leader != evsel && leader->sample_read) {
> + attr->freq = 0;
> + attr->sample_freq = 0;
> + attr->sample_period = 0;
> + attr->write_backward = 0;
> +
> + /*
> + * We don't get sample for slave events, we make them
> + * when delivering group leader sample. Set the slave
> + * event to follow the master sample_type to ease up
> + * report.
> + */
> + attr->sample_type = leader->core.attr.sample_type;
> + }
> +}
> +
> void perf_evlist__config(struct evlist *evlist, struct record_opts *opts,
> struct callchain_param *callchain)
> {
> @@ -193,6 +218,10 @@ void perf_evlist__config(struct evlist *evlist, struct record_opts *opts,
> evsel->core.attr.comm_exec = 1;
> }
>
> + /* Configure leader sampling here now that the sample type is known */
> + evlist__for_each_entry(evlist, evsel)
> + perf_evsel__config_leader_sampling(evsel, evlist);
> +
> if (opts->full_auxtrace) {
> /*
> * Need to be able to synthesize and parse selected events with

INSTALL trace_plugins
util/record.c: In function âperf_evlist__configâ:
util/record.c:223:3: error: too many arguments to function âperf_evsel__config_leader_samplingâ
223 | perf_evsel__config_leader_sampling(evsel, evlist);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
util/record.c:170:13: note: declared here
170 | static void perf_evsel__config_leader_sampling(struct evsel *evsel)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mv: cannot stat '/tmp/build/perf/util/.record.o.tmp': No such file or directory
make[4]: *** [/home/acme/git/perf/tools/build/Makefile.build:96: /tmp/build/perf/util/record.o] Error 1


----------

I'm removing that evlist arg from here and fixing up the fallout in the
following patches :-)

- Arnaldo