Skip to content

Commit de46d52

Browse files
committed
perf evsel: Handle ENOMEM for perf_event_max_stack + PERF_SAMPLE_CALLCHAIN
When the kernel allows tweaking perf_event_max_stack and the event being setup has PERF_SAMPLE_CALLCHAIN in its perf_event_attr.sample_type, tell the user that tweaking /proc/sys/kernel/perf_event_max_stack may solve the problem. Before: # echo 32000 > /proc/sys/kernel/perf_event_max_stack # perf record -g usleep 1 Error: The sys_perf_event_open() syscall returned with 12 (Cannot allocate memory) for event (cycles:ppp). /bin/dmesg may provide additional information. No CONFIG_PERF_EVENTS=y kernel support configured? # After: # echo 64000 > /proc/sys/kernel/perf_event_max_stack # perf record -g usleep 1 Error: Not enough memory to setup event with callchain. Hint: Try tweaking /proc/sys/kernel/perf_event_max_stack Hint: Current value: 64000 # Suggested-by: David Ahern <[email protected]> Cc: Adrian Hunter <[email protected]> Cc: Brendan Gregg <[email protected]> Cc: Frederic Weisbecker <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Milian Wolff <[email protected]> Cc: Namhyung Kim <[email protected]> Cc: Wang Nan <[email protected]> Link: http://lkml.kernel.org/n/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
1 parent 1a71476 commit de46d52

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

tools/perf/util/evsel.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2325,6 +2325,14 @@ int perf_evsel__open_strerror(struct perf_evsel *evsel, struct target *target,
23252325
"Probably the maximum number of open file descriptors has been reached.\n"
23262326
"Hint: Try again after reducing the number of events.\n"
23272327
"Hint: Try increasing the limit with 'ulimit -n <limit>'");
2328+
case ENOMEM:
2329+
if ((evsel->attr.sample_type & PERF_SAMPLE_CALLCHAIN) != 0 &&
2330+
access("/proc/sys/kernel/perf_event_max_stack", F_OK) == 0)
2331+
return scnprintf(msg, size,
2332+
"Not enough memory to setup event with callchain.\n"
2333+
"Hint: Try tweaking /proc/sys/kernel/perf_event_max_stack\n"
2334+
"Hint: Current value: %d", sysctl_perf_event_max_stack);
2335+
break;
23282336
case ENODEV:
23292337
if (target->cpu_list)
23302338
return scnprintf(msg, size, "%s",

0 commit comments

Comments
 (0)