perf tools: Make the mmap length autotuning more robust
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 1be300f4cc1ddf975f158b4ab2f880854b29306b Gitweb: http://git.kernel.org/tip/1be300f4cc1ddf975f158b4ab2f880854b29306b Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Tue, 16 Dec 2014 12:19:00 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 17 Dec 2014 11:58:14 -0300
perf tools: Make the mmap length autotuning more robust
If /proc/sys/kernel/perf_event_mlock_kb is not (power of 2 + PAGE_SIZE_in_kb) and we let the perf tools do mmap length autosizing based on that, then, for non-CAP_IPC_LOCK users when /proc/sys/kernel/perf_event_paranoid is > -1, then we get an -EINVAL that ends up in:
[acme@ssdandy linux]$ trace usleep 1
Invalid argument
[acme@ssdandy linux]$ perf record usleep 1
failed to mmap with 22 (Invalid argument)
After this fix:
[acme@ssdandy linux]$ trace usleep 1
<SNIP>
0.806 ( 0.006 ms): munmap(addr: 0x7f7e4740a000, len: 66467) = 0
0.869 ( 0.002 ms): brk( ) = 0x7bb000 0.873 ( 0.003 ms): brk(brk: 0x7dc000 ) = 0x7dc000 0.877 ( 0.001 ms): brk( ) = 0x7dc000 0.953 ( 0.058 ms): nanosleep(rqtp: 0x7fff26ab9420 ) = 0
0.959 ( 0.000 ms): exit_group(
[acme@ssdandy linux]$ perf record usleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.017 MB perf.data (~759 samples) ] [acme@ssdandy linux]$
--- tools/perf/util/evlist.c | 2 ++ 1 file changed, 2 insertions(+)
tools/perf/util/evlist.c +2 -0
@@ -909,6 +909,8 @@ static size_t perf_evlist__mmap_size(unsigned long pages) } pages = (max *1024 ) / page_size; +if (!is_power_of_2 (pages)) + pages =rounddown_pow_of_two (pages); }else if (!is_power_of_2 (pages))return 0 ;