perf evlist: Expose perf_event_mlock_kb_in_pages() helper

When the user doesn't set --mmap-pages, perf_evlist__mmap() will do it
by reading the maximum possible for a non-root user from the
/proc/sys/kernel/perf_event_mlock_kb file.

Expose that function so that 'perf trace' can, for root users, to bump
mmap-pages to a higher value for root, based on the contents of this
proc file.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Milian Wolff <milian.wolff@kdab.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-xay69plylwibpb3l4isrpl1k@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Arnaldo Carvalho de Melo 2016-04-15 17:46:31 -03:00
parent 0561499326
commit f5e7150cd9
2 changed files with 28 additions and 18 deletions

View File

@ -986,9 +986,9 @@ static int perf_evlist__mmap_per_thread(struct perf_evlist *evlist,
return -1;
}
static size_t perf_evlist__mmap_size(unsigned long pages)
unsigned long perf_event_mlock_kb_in_pages(void)
{
if (pages == UINT_MAX) {
unsigned long pages;
int max;
if (sysctl__read_int("kernel/perf_event_mlock_kb", &max) < 0) {
@ -1005,7 +1005,15 @@ 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 pages;
}
static size_t perf_evlist__mmap_size(unsigned long pages)
{
if (pages == UINT_MAX)
pages = perf_event_mlock_kb_in_pages();
else if (!is_power_of_2(pages))
return 0;
return (pages + 1) * page_size;

View File

@ -158,6 +158,8 @@ int perf_evlist__parse_mmap_pages(const struct option *opt,
const char *str,
int unset);
unsigned long perf_event_mlock_kb_in_pages(void);
int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages,
bool overwrite, unsigned int auxtrace_pages,
bool auxtrace_overwrite);