性能内存记录不能以非 root 用户身份工作

性能内存记录不能以非 root 用户身份工作

/proc/sys/kernel/perf_event_paranoid作为非 root 用户,即使我已设置为-1并设置CAP_SYS_ADMIN为 on,perf mem record 也不起作用/usr/bin/perf

getcap /usr/bin/perf  
/usr/bin/perf = cap_sys_admin+ep

cat /proc/sys/kernel/perf_event_paranoid  
-1
bash$ perf mem record id  
Error:
You may not have permission to collect stats.

Consider tweaking /proc/sys/kernel/perf_event_paranoid, which controls use of the performance events system by unprivileged users (without CAP_SYS_ADMIN).

The current value is -1:  
  -1: Allow use of (almost) all events by all users  
      Ignore mlock limit after perf_event_mlock_kb without CAP_IPC_LOCK.  
 >= 0: Disallow ftrace function tracepoint by users without CAP_SYS_ADMIN  
      Disallow raw tracepoint acess by users without CAP_SYS_ADMIN  
 >= 1: Disallow CPU event access by users without CAP_SYS_ADMIN  
 >= 2: Disallow kernel profiling by users without CAP_SYS_ADMIN  

To make this setting permanent, edit /etc/sysctl.conf too, e.g.:
       
        kernel.perf_event_paranoid = -1

我不明白为什么这不起作用。

奇怪的是,如果我用 strace 运行它,我不会收到权限错误。在这种情况下似乎有效。
(同样,这是作为非 root 用户)

strace -f -e perf_event_open perf mem record id

运行perf --debug verbose=2 perf mem record id显示 perf_event_open 系统调用返回 errno 13 (EACCES)

perf_event_open 手册页显示:

EACCES 当请求的事件需要 CAP_SYS_ADMIN 权限(或更宽松的 perf_event_paranoid 设置)时返回。
非特权进程可能会遇到此错误的一些常见情况:附加到不同用户拥有的进程;
监视给定 CPU 上的所有进程(即将 pid 参数指定为 -1);
并且当偏执设置需要时不设置 except_kernel 。

这是 CentOS 7.6。

相关内容