2022-10-10 05:38:14

by Namhyung Kim

[permalink] [raw]
Subject: [PATCH 05/19] perf stat: Add cpu aggr id for no aggregation mode

Likewise, add an aggr_id for cpu for none aggregation mode. This is not
used actually yet but later code will use to unify the aggregation code.

No functional change intended.

Signed-off-by: Namhyung Kim <[email protected]>
---
tools/perf/builtin-stat.c | 48 +++++++++++++++++++++++++++++++++++----
1 file changed, 43 insertions(+), 5 deletions(-)

diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 144bb3a657f2..b00ef20aef5b 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -1339,6 +1339,12 @@ static struct aggr_cpu_id perf_stat__get_global(struct perf_stat_config *config
return id;
}

+static struct aggr_cpu_id perf_stat__get_cpu(struct perf_stat_config *config __maybe_unused,
+ struct perf_cpu cpu)
+{
+ return aggr_cpu_id__cpu(cpu, /*data=*/NULL);
+}
+
static struct aggr_cpu_id perf_stat__get_aggr(struct perf_stat_config *config,
aggr_get_id_t get_id, struct perf_cpu cpu)
{
@@ -1381,6 +1387,12 @@ static struct aggr_cpu_id perf_stat__get_global_cached(struct perf_stat_config *
return perf_stat__get_aggr(config, perf_stat__get_global, cpu);
}

+static struct aggr_cpu_id perf_stat__get_cpu_cached(struct perf_stat_config *config,
+ struct perf_cpu cpu)
+{
+ return perf_stat__get_aggr(config, perf_stat__get_cpu, cpu);
+}
+
static bool term_percore_set(void)
{
struct evsel *counter;
@@ -1407,8 +1419,7 @@ static aggr_cpu_id_get_t aggr_mode__get_aggr(enum aggr_mode aggr_mode)
case AGGR_NONE:
if (term_percore_set())
return aggr_cpu_id__core;
-
- return NULL;
+ return aggr_cpu_id__cpu;;
case AGGR_GLOBAL:
return aggr_cpu_id__global;
case AGGR_THREAD:
@@ -1431,10 +1442,9 @@ static aggr_get_id_t aggr_mode__get_id(enum aggr_mode aggr_mode)
case AGGR_NODE:
return perf_stat__get_node_cached;
case AGGR_NONE:
- if (term_percore_set()) {
+ if (term_percore_set())
return perf_stat__get_core_cached;
- }
- return NULL;
+ return perf_stat__get_cpu_cached;
case AGGR_GLOBAL:
return perf_stat__get_global_cached;
case AGGR_THREAD:
@@ -1544,6 +1554,26 @@ static struct aggr_cpu_id perf_env__get_core_aggr_by_cpu(struct perf_cpu cpu, vo
return id;
}

+static struct aggr_cpu_id perf_env__get_cpu_aggr_by_cpu(struct perf_cpu cpu, void *data)
+{
+ struct perf_env *env = data;
+ struct aggr_cpu_id id = aggr_cpu_id__empty();
+
+ if (cpu.cpu != -1) {
+ /*
+ * core_id is relative to socket and die,
+ * we need a global id. So we set
+ * socket, die id and core id
+ */
+ id.socket = env->cpu[cpu.cpu].socket_id;
+ id.die = env->cpu[cpu.cpu].die_id;
+ id.core = env->cpu[cpu.cpu].core_id;
+ id.cpu = cpu;
+ }
+
+ return id;
+}
+
static struct aggr_cpu_id perf_env__get_node_aggr_by_cpu(struct perf_cpu cpu, void *data)
{
struct aggr_cpu_id id = aggr_cpu_id__empty();
@@ -1579,6 +1609,12 @@ static struct aggr_cpu_id perf_stat__get_core_file(struct perf_stat_config *conf
return perf_env__get_core_aggr_by_cpu(cpu, &perf_stat.session->header.env);
}

+static struct aggr_cpu_id perf_stat__get_cpu_file(struct perf_stat_config *config __maybe_unused,
+ struct perf_cpu cpu)
+{
+ return perf_env__get_cpu_aggr_by_cpu(cpu, &perf_stat.session->header.env);
+}
+
static struct aggr_cpu_id perf_stat__get_node_file(struct perf_stat_config *config __maybe_unused,
struct perf_cpu cpu)
{
@@ -1605,6 +1641,7 @@ static aggr_cpu_id_get_t aggr_mode__get_aggr_file(enum aggr_mode aggr_mode)
case AGGR_GLOBAL:
return perf_env__get_global_aggr_by_cpu;
case AGGR_NONE:
+ return perf_env__get_cpu_aggr_by_cpu;
case AGGR_THREAD:
case AGGR_UNSET:
case AGGR_MAX:
@@ -1627,6 +1664,7 @@ static aggr_get_id_t aggr_mode__get_id_file(enum aggr_mode aggr_mode)
case AGGR_GLOBAL:
return perf_stat__get_global_file;
case AGGR_NONE:
+ return perf_stat__get_cpu_file;
case AGGR_THREAD:
case AGGR_UNSET:
case AGGR_MAX:
--
2.38.0.rc1.362.ged0d419d3c-goog


2022-10-10 23:05:33

by Ian Rogers

[permalink] [raw]
Subject: Re: [PATCH 05/19] perf stat: Add cpu aggr id for no aggregation mode

On Sun, Oct 9, 2022 at 10:36 PM Namhyung Kim <[email protected]> wrote:
>
> Likewise, add an aggr_id for cpu for none aggregation mode. This is not
> used actually yet but later code will use to unify the aggregation code.
>
> No functional change intended.
>
> Signed-off-by: Namhyung Kim <[email protected]>
> ---
> tools/perf/builtin-stat.c | 48 +++++++++++++++++++++++++++++++++++----
> 1 file changed, 43 insertions(+), 5 deletions(-)
>
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index 144bb3a657f2..b00ef20aef5b 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -1339,6 +1339,12 @@ static struct aggr_cpu_id perf_stat__get_global(struct perf_stat_config *config
> return id;
> }
>
> +static struct aggr_cpu_id perf_stat__get_cpu(struct perf_stat_config *config __maybe_unused,
> + struct perf_cpu cpu)
> +{
> + return aggr_cpu_id__cpu(cpu, /*data=*/NULL);
> +}
> +
> static struct aggr_cpu_id perf_stat__get_aggr(struct perf_stat_config *config,
> aggr_get_id_t get_id, struct perf_cpu cpu)
> {
> @@ -1381,6 +1387,12 @@ static struct aggr_cpu_id perf_stat__get_global_cached(struct perf_stat_config *
> return perf_stat__get_aggr(config, perf_stat__get_global, cpu);
> }
>
> +static struct aggr_cpu_id perf_stat__get_cpu_cached(struct perf_stat_config *config,
> + struct perf_cpu cpu)
> +{
> + return perf_stat__get_aggr(config, perf_stat__get_cpu, cpu);
> +}
> +

There's an existing issue with this code that it is under documented -
in particular, cached?

Acked-by: Ian Rogers <[email protected]>

Thanks,
Ian

> static bool term_percore_set(void)
> {
> struct evsel *counter;
> @@ -1407,8 +1419,7 @@ static aggr_cpu_id_get_t aggr_mode__get_aggr(enum aggr_mode aggr_mode)
> case AGGR_NONE:
> if (term_percore_set())
> return aggr_cpu_id__core;
> -
> - return NULL;
> + return aggr_cpu_id__cpu;;
> case AGGR_GLOBAL:
> return aggr_cpu_id__global;
> case AGGR_THREAD:
> @@ -1431,10 +1442,9 @@ static aggr_get_id_t aggr_mode__get_id(enum aggr_mode aggr_mode)
> case AGGR_NODE:
> return perf_stat__get_node_cached;
> case AGGR_NONE:
> - if (term_percore_set()) {
> + if (term_percore_set())
> return perf_stat__get_core_cached;
> - }
> - return NULL;
> + return perf_stat__get_cpu_cached;
> case AGGR_GLOBAL:
> return perf_stat__get_global_cached;
> case AGGR_THREAD:
> @@ -1544,6 +1554,26 @@ static struct aggr_cpu_id perf_env__get_core_aggr_by_cpu(struct perf_cpu cpu, vo
> return id;
> }
>
> +static struct aggr_cpu_id perf_env__get_cpu_aggr_by_cpu(struct perf_cpu cpu, void *data)
> +{
> + struct perf_env *env = data;
> + struct aggr_cpu_id id = aggr_cpu_id__empty();
> +
> + if (cpu.cpu != -1) {
> + /*
> + * core_id is relative to socket and die,
> + * we need a global id. So we set
> + * socket, die id and core id
> + */
> + id.socket = env->cpu[cpu.cpu].socket_id;
> + id.die = env->cpu[cpu.cpu].die_id;
> + id.core = env->cpu[cpu.cpu].core_id;
> + id.cpu = cpu;
> + }
> +
> + return id;
> +}
> +
> static struct aggr_cpu_id perf_env__get_node_aggr_by_cpu(struct perf_cpu cpu, void *data)
> {
> struct aggr_cpu_id id = aggr_cpu_id__empty();
> @@ -1579,6 +1609,12 @@ static struct aggr_cpu_id perf_stat__get_core_file(struct perf_stat_config *conf
> return perf_env__get_core_aggr_by_cpu(cpu, &perf_stat.session->header.env);
> }
>
> +static struct aggr_cpu_id perf_stat__get_cpu_file(struct perf_stat_config *config __maybe_unused,
> + struct perf_cpu cpu)
> +{
> + return perf_env__get_cpu_aggr_by_cpu(cpu, &perf_stat.session->header.env);
> +}
> +
> static struct aggr_cpu_id perf_stat__get_node_file(struct perf_stat_config *config __maybe_unused,
> struct perf_cpu cpu)
> {
> @@ -1605,6 +1641,7 @@ static aggr_cpu_id_get_t aggr_mode__get_aggr_file(enum aggr_mode aggr_mode)
> case AGGR_GLOBAL:
> return perf_env__get_global_aggr_by_cpu;
> case AGGR_NONE:
> + return perf_env__get_cpu_aggr_by_cpu;
> case AGGR_THREAD:
> case AGGR_UNSET:
> case AGGR_MAX:
> @@ -1627,6 +1664,7 @@ static aggr_get_id_t aggr_mode__get_id_file(enum aggr_mode aggr_mode)
> case AGGR_GLOBAL:
> return perf_stat__get_global_file;
> case AGGR_NONE:
> + return perf_stat__get_cpu_file;
> case AGGR_THREAD:
> case AGGR_UNSET:
> case AGGR_MAX:
> --
> 2.38.0.rc1.362.ged0d419d3c-goog
>

2022-10-12 11:11:28

by Jiri Olsa

[permalink] [raw]
Subject: Re: [PATCH 05/19] perf stat: Add cpu aggr id for no aggregation mode

On Sun, Oct 09, 2022 at 10:35:46PM -0700, Namhyung Kim wrote:
> Likewise, add an aggr_id for cpu for none aggregation mode. This is not
> used actually yet but later code will use to unify the aggregation code.
>
> No functional change intended.
>
> Signed-off-by: Namhyung Kim <[email protected]>
> ---
> tools/perf/builtin-stat.c | 48 +++++++++++++++++++++++++++++++++++----
> 1 file changed, 43 insertions(+), 5 deletions(-)
>
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index 144bb3a657f2..b00ef20aef5b 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -1339,6 +1339,12 @@ static struct aggr_cpu_id perf_stat__get_global(struct perf_stat_config *config
> return id;
> }
>
> +static struct aggr_cpu_id perf_stat__get_cpu(struct perf_stat_config *config __maybe_unused,
> + struct perf_cpu cpu)
> +{
> + return aggr_cpu_id__cpu(cpu, /*data=*/NULL);
> +}
> +
> static struct aggr_cpu_id perf_stat__get_aggr(struct perf_stat_config *config,
> aggr_get_id_t get_id, struct perf_cpu cpu)
> {
> @@ -1381,6 +1387,12 @@ static struct aggr_cpu_id perf_stat__get_global_cached(struct perf_stat_config *
> return perf_stat__get_aggr(config, perf_stat__get_global, cpu);
> }
>
> +static struct aggr_cpu_id perf_stat__get_cpu_cached(struct perf_stat_config *config,
> + struct perf_cpu cpu)
> +{
> + return perf_stat__get_aggr(config, perf_stat__get_cpu, cpu);
> +}
> +
> static bool term_percore_set(void)
> {
> struct evsel *counter;
> @@ -1407,8 +1419,7 @@ static aggr_cpu_id_get_t aggr_mode__get_aggr(enum aggr_mode aggr_mode)
> case AGGR_NONE:
> if (term_percore_set())
> return aggr_cpu_id__core;
> -
> - return NULL;
> + return aggr_cpu_id__cpu;;

nit, double ;; ;-)

jirka

2022-10-12 17:23:12

by Namhyung Kim

[permalink] [raw]
Subject: Re: [PATCH 05/19] perf stat: Add cpu aggr id for no aggregation mode

On Wed, Oct 12, 2022 at 3:40 AM Jiri Olsa <[email protected]> wrote:
>
> On Sun, Oct 09, 2022 at 10:35:46PM -0700, Namhyung Kim wrote:
> > Likewise, add an aggr_id for cpu for none aggregation mode. This is not
> > used actually yet but later code will use to unify the aggregation code.
> >
> > No functional change intended.
> >
> > Signed-off-by: Namhyung Kim <[email protected]>
> > ---
> > tools/perf/builtin-stat.c | 48 +++++++++++++++++++++++++++++++++++----
> > 1 file changed, 43 insertions(+), 5 deletions(-)
> >
> > diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> > index 144bb3a657f2..b00ef20aef5b 100644
> > --- a/tools/perf/builtin-stat.c
> > +++ b/tools/perf/builtin-stat.c
> > @@ -1339,6 +1339,12 @@ static struct aggr_cpu_id perf_stat__get_global(struct perf_stat_config *config
> > return id;
> > }
> >
> > +static struct aggr_cpu_id perf_stat__get_cpu(struct perf_stat_config *config __maybe_unused,
> > + struct perf_cpu cpu)
> > +{
> > + return aggr_cpu_id__cpu(cpu, /*data=*/NULL);
> > +}
> > +
> > static struct aggr_cpu_id perf_stat__get_aggr(struct perf_stat_config *config,
> > aggr_get_id_t get_id, struct perf_cpu cpu)
> > {
> > @@ -1381,6 +1387,12 @@ static struct aggr_cpu_id perf_stat__get_global_cached(struct perf_stat_config *
> > return perf_stat__get_aggr(config, perf_stat__get_global, cpu);
> > }
> >
> > +static struct aggr_cpu_id perf_stat__get_cpu_cached(struct perf_stat_config *config,
> > + struct perf_cpu cpu)
> > +{
> > + return perf_stat__get_aggr(config, perf_stat__get_cpu, cpu);
> > +}
> > +
> > static bool term_percore_set(void)
> > {
> > struct evsel *counter;
> > @@ -1407,8 +1419,7 @@ static aggr_cpu_id_get_t aggr_mode__get_aggr(enum aggr_mode aggr_mode)
> > case AGGR_NONE:
> > if (term_percore_set())
> > return aggr_cpu_id__core;
> > -
> > - return NULL;
> > + return aggr_cpu_id__cpu;;
>
> nit, double ;; ;-)

Good eye :) I'll remove it.

Thanks,
Namhyung