]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
libperf cpumap: Grow array of read CPUs in smaller increments
authorIan Rogers <irogers@google.com>
Fri, 6 Dec 2024 04:40:35 +0000 (20:40 -0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 9 Dec 2024 20:52:41 +0000 (17:52 -0300)
Instead of growing the array by 2048, grow by the larger of the current
range or 16.

As ranges are typical for things like the online CPUs this will mean a
single allocation happens.

While uncore CPU maps will grow 16 at a time which is a value that is
generous except say on large servers.

Reviewed-by: Leo Yan <leo.yan@arm.com>
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ben Gainey <ben.gainey@arm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Kyle Meyer <kyle.meyer@hpe.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20241206044035.1062032-9-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/lib/perf/cpumap.c

index 36f6579b3006348b7a7aa273883686f82106a607..fcc47214062aa462f5f85895d2347480acd45c88 100644 (file)
@@ -213,7 +213,7 @@ struct perf_cpu_map *perf_cpu_map__new(const char *cpu_list)
                                        goto invalid;
 
                        if (nr_cpus == max_entries) {
-                               max_entries += MAX_NR_CPUS;
+                               max_entries += max(end_cpu - start_cpu + 1, 16UL);
                                tmp = realloc(tmp_cpus, max_entries * sizeof(struct perf_cpu));
                                if (tmp == NULL)
                                        goto invalid;
@@ -227,14 +227,15 @@ struct perf_cpu_map *perf_cpu_map__new(const char *cpu_list)
                cpu_list = p;
        }
 
-       if (nr_cpus > 0)
+       if (nr_cpus > 0) {
                cpus = cpu_map__trim_new(nr_cpus, tmp_cpus);
-       else if (*cpu_list != '\0') {
+       else if (*cpu_list != '\0') {
                pr_warning("Unexpected characters at end of cpu list ('%s'), using online CPUs.",
                           cpu_list);
                cpus = perf_cpu_map__new_online_cpus();
-       } else
+       } else {
                cpus = perf_cpu_map__new_any_cpu();
+       }
 invalid:
        free(tmp_cpus);
 out: