perf tools: Increase MAX_NR_CPUS and MAX_CACHES [Linux 4.9.187]

This Linux kernel change "perf tools: Increase MAX_NR_CPUS and MAX_CACHES" is included in the Linux 4.9.187 release. This change is authored by Kyle Meyer <kyle.meyer [at] hpe.com> on Thu Jun 20 14:36:30 2019 -0500. The commit for this change in Linux stable tree is cb993d3 (patch) which is from upstream commit 9f94c7f. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream 9f94c7f.

perf tools: Increase MAX_NR_CPUS and MAX_CACHES

[ Upstream commit 9f94c7f947e919c343b30f080285af53d0fa9902 ]

Attempting to profile 1024 or more CPUs with perf causes two errors:

  perf record -a
  [ perf record: Woken up X times to write data ]
  way too many cpu caches..
  [ perf record: Captured and wrote X MB perf.data (X samples) ]

  perf report -C 1024
  Error: failed to set  cpu bitmap
  Requested CPU 1024 too large. Consider raising MAX_NR_CPUS

  Increasing MAX_NR_CPUS from 1024 to 2048 and redefining MAX_CACHES as
  MAX_NR_CPUS * 4 returns normal functionality to perf:

  perf record -a
  [ perf record: Woken up X times to write data ]
  [ perf record: Captured and wrote X MB perf.data (X samples) ]

  perf report -C 1024
  ...

Signed-off-by: Kyle Meyer <kyle.meyer@hpe.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20190620193630.154025-1-meyerk@stormcage.eag.rdlabs.hpecorp.net
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>

There are 4 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 tools/perf/perf.h        | 2 +-
 tools/perf/util/header.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/perf.h b/tools/perf/perf.h
index 8f8d895..3b9d561 100644
--- a/tools/perf/perf.h
+++ b/tools/perf/perf.h
@@ -23,7 +23,7 @@ static inline unsigned long long rdclock(void)
 }

 #ifndef MAX_NR_CPUS
-#define MAX_NR_CPUS            1024
+#define MAX_NR_CPUS            2048
 #endif

 extern const char *input_name;
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index de9b369..2831481 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -1008,7 +1008,7 @@ static int build_caches(struct cpu_cache_level caches[], u32 size, u32 *cntp)
    return 0;
 }

-#define MAX_CACHES 2000
+#define MAX_CACHES (MAX_NR_CPUS * 4)

 static int write_cache(int fd, struct perf_header *h __maybe_unused,
              struct perf_evlist *evlist __maybe_unused)

Leave a Reply

Your email address will not be published. Required fields are marked *