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:
parent
0561499326
commit
f5e7150cd9
|
@ -986,26 +986,34 @@ static int perf_evlist__mmap_per_thread(struct perf_evlist *evlist,
|
|||
return -1;
|
||||
}
|
||||
|
||||
unsigned long perf_event_mlock_kb_in_pages(void)
|
||||
{
|
||||
unsigned long pages;
|
||||
int max;
|
||||
|
||||
if (sysctl__read_int("kernel/perf_event_mlock_kb", &max) < 0) {
|
||||
/*
|
||||
* Pick a once upon a time good value, i.e. things look
|
||||
* strange since we can't read a sysctl value, but lets not
|
||||
* die yet...
|
||||
*/
|
||||
max = 512;
|
||||
} else {
|
||||
max -= (page_size / 1024);
|
||||
}
|
||||
|
||||
pages = (max * 1024) / page_size;
|
||||
if (!is_power_of_2(pages))
|
||||
pages = rounddown_pow_of_two(pages);
|
||||
|
||||
return pages;
|
||||
}
|
||||
|
||||
static size_t perf_evlist__mmap_size(unsigned long pages)
|
||||
{
|
||||
if (pages == UINT_MAX) {
|
||||
int max;
|
||||
|
||||
if (sysctl__read_int("kernel/perf_event_mlock_kb", &max) < 0) {
|
||||
/*
|
||||
* Pick a once upon a time good value, i.e. things look
|
||||
* strange since we can't read a sysctl value, but lets not
|
||||
* die yet...
|
||||
*/
|
||||
max = 512;
|
||||
} else {
|
||||
max -= (page_size / 1024);
|
||||
}
|
||||
|
||||
pages = (max * 1024) / page_size;
|
||||
if (!is_power_of_2(pages))
|
||||
pages = rounddown_pow_of_two(pages);
|
||||
} else if (!is_power_of_2(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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue