Re: [PATCH 05/19] perf stat: Add cpu aggr id for no aggregation mode
From: Ian Rogers
Date: Mon Oct 10 2022 - 18:50:07 EST
On Sun, Oct 9, 2022 at 10:36 PM Namhyung Kim <namhyung@xxxxxxxxxx> 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 <namhyung@xxxxxxxxxx>
> ---
> 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 <irogers@xxxxxxxxxx>
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
>