perf evsel: Handle ENOMEM for perf_event_max_stack + PERF_SAMPLE_CALLCHAIN
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: de46d5268c4ec5c5b473c96fbf56ece188a6ba85 Gitweb: http://git.kernel.org/tip/de46d5268c4ec5c5b473c96fbf56ece188a6ba85 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Wed, 27 Apr 2016 17:51:45 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 28 Apr 2016 09:58:58 -0300
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]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/evsel.c | 8 ++++++++ 1 file changed, 8 insertions(+)
tools/perf/util/evsel.c +8 -0
@@ -2325,6 +2325,14 @@ int perf_evsel__open_strerror(struct perf_evsel *evsel, struct target *target,"Probably the maximum number of open file descriptors has been reached.\n" "Hint: Try again after reducing the number of events.\n" "Hint: Try increasing the limit with 'ulimit -n <limit>'"); +case ENOMEM : +if ((evsel->attr.sample_type &PERF_SAMPLE_CALLCHAIN ) !=0 && +access ("/proc/sys/kernel/perf_event_max_stack" ,F_OK ) ==0 ) +return scnprintf (msg, size, +"Not enough memory to setup event with callchain.\n" +"Hint: Try tweaking /proc/sys/kernel/perf_event_max_stack\n" +"Hint: Current value: %d" , sysctl_perf_event_max_stack); +break ;case ENODEV :if (target->cpu_list) return scnprintf(msg, size, "%s",