perf evlist: Improve the strerror_mmap method
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: e965bea1ad1a8062b306f7fcc5c3e05dc5213b7c Gitweb: http://git.kernel.org/tip/e965bea1ad1a8062b306f7fcc5c3e05dc5213b7c Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Fri, 12 Dec 2014 16:25:33 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 16 Dec 2014 13:38:26 -0300
perf evlist: Improve the strerror_mmap method
Considering the per user locked pages limit, improve the message when a user uses multiple simultaneous perf mmap calls:
When the request is more than the current maximum:
[acme@ssdandy linux]$ trace -m 128 usleep 1
Error: Operation not permitted.
Hint: Check /proc/sys/kernel/perf_event_mlock_kb (516 kB) setting. Hint: Tried using 516 kB. Hint: Try 'sudo sh -c "echo 1032 > /proc/sys/kernel/perf_event_mlock_kb"', or Hint: Try using a smaller -m/--mmap-pages value.
[acme@ssdandy linux]$
And when the limit is less than that:
[acme@ssdandy linux]$ trace -m 512 usleep 1
Error: Operation not permitted.
Hint: Check /proc/sys/kernel/perf_event_mlock_kb (2056 kB) setting. Hint: Tried using 2052 kB. Hint: Try using a smaller -m/--mmap-pages value.
[acme@ssdandy linux]$
Cc Adrian Hunter <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc David Ahern <[email protected]>
Cc Don Zickus <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Mike Galbraith <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Stephane Eranian <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/evlist.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
tools/perf/util/evlist.c +13 -4
@@ -1487,16 +1487,25 @@ int perf_evlist__strerror_open(struct perf_evlist *evlist __maybe_unused,int perf_evlist__strerror_mmap (struct perf_evlist *evlist,int err,char *buf,size_t size) {char sbuf[STRERR_BUFSIZE ], *emsg =strerror_r (err, sbuf,sizeof (sbuf)); -int pages_attempted = evlist->mmap_len /1024 , pages_max_per_user; +int pages_attempted = evlist->mmap_len /1024 , pages_max_per_user, printed =0 ;switch (err) {case EPERM :sysctl__read_int ("kernel/perf_event_mlock_kb" , &pages_max_per_user); -scnprintf (buf, size,"Error:\t%s.\n" + printed +=scnprintf (buf + printed, size - printed, +"Error:\t%s.\n" "Hint:\tCheck /proc/sys/kernel/perf_event_mlock_kb (%d kB) setting.\n" -"Hint:\tTried using %zd kB.\n" -"Hint:\tTry using a smaller -m/--mmap-pages value." , +"Hint:\tTried using %zd kB.\n" , emsg, pages_max_per_user, pages_attempted); + +if (pages_attempted >= pages_max_per_user) { + printed +=scnprintf (buf + printed, size - printed, +"Hint:\tTry 'sudo sh -c \"echo %d > /proc/sys/kernel/perf_event_mlock_kb\"', or\n" , + pages_max_per_user + pages_attempted); + } + + printed +=scnprintf (buf + printed, size - printed, +"Hint:\tTry using a smaller -m/--mmap-pages value." );break ;default :scnprintf (buf, size,"%s" , emsg);