Thread (8 messages) 8 messages, 5 authors, 2021-12-10

Re: [PATCH] perf cs-etm: Remove duplicate and incorrect aux size checks

From: James Clark <hidden>
Date: 2021-12-09 14:16:48
Also in: linux-arm-kernel, lkml


On 09/12/2021 13:44, Leo Yan wrote:
On Wed, Dec 08, 2021 at 02:08:04PM +0000, James Clark wrote:
quoted
On 08/12/2021 13:17, Leo Yan wrote:
quoted
Hi James,

On Wed, Dec 08, 2021 at 11:54:35AM +0000, James Clark wrote:
quoted
There are two checks, one is for size when running without admin, but
this one is covered by the driver and reported on in more detail here
(builtin-record.c):

  pr_err("Permission error mapping pages.\n"
         "Consider increasing "
         "/proc/sys/kernel/perf_event_mlock_kb,\n"
         "or try again with a smaller value of -m/--mmap_pages.\n"
         "(current value: %u,%u)\n",
I looked into the kernel code and found:

  sysctl_perf_event_mlock = 512 + (PAGE_SIZE / 1024);  // 512KB + 1 page

If the system have multiple cores, let's say 8 cores, then kernel even
can relax the limitaion with:

  user_lock_limit *= num_online_cpus();

So means the memory lock limitation is:

  (512KB + 1 page) * 8 = 4MB + 8 pages.

Seems to me, it's much relax than the user space's limitaion 128KB.
And let's imagine for Arm server, the permitted buffer size can be a
huge value (e.g. for a system with 128 cores).

Could you confirm if this is right?
Yes that seems to be the case. And the commit message for that addition
states the reasoning:

  perf_counter: Increase mmap limit
  
  In a default 'perf top' run the tool will create a counter for
  each online CPU. With enough CPUs this will eventually exhaust
  the default limit.

  So scale it up with the number of online CPUs.

To me that makes sense. Normally the memory installed also scales with the
number of cores.

Are you saying that we should look into modifying that scaling factor in
perf_mmap()? Or that we should still add something to userspace for
coresight to limit user supplied buffer sizes?
I don't think we should modify the scaling factor in perf_mmap(), the
logic is not only used by AUX buffer, it's shared by normal event
ring buffer.
quoted
I think it makes sense to allow the user to specify any value that will work,
it's up to them.
Understand, I verified this patch with below steps:

root@debian:~# echo 0 > /proc/sys/kernel/perf_event_paranoid

leoy@debian:~$ perf record -e cs_etm// -m 4M,8M -o perf_test.data -- sleep 1
Permission error mapping pages.
Consider increasing /proc/sys/kernel/perf_event_mlock_kb,
or try again with a smaller value of -m/--mmap_pages.
(current value: 1024,2048)

leoy@debian:~$ perf record -e cs_etm// -m 4M,4M -o perf_test.data -- sleep 1
Couldn't synthesize bpf events.
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.607 MB perf_test.data ]

So this patch looks good for me:

Reviewed-by: Leo Yan <redacted>
Thanks Leo!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help