연주 메모리 녹음루트가 아닌 사용자로는 작업할 수 없습니다.

연주 메모리 녹음루트가 아닌 사용자로는 작업할 수 없습니다.

/proc/sys/kernel/perf_event_paranoid-1루트가 아닌 사용자로서 perf mem 레코드를 로 설정했는데도 작동하지 않습니다 CAP_SYS_ADMIN./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로 실행하면 권한 오류가 발생하지 않는다는 것입니다. 이 경우에는 작동하는 것 같습니다.
(다시 말하지만 이것은 루트가 아닌 사용자입니다)

strace -f -e perf_event_open perf mem record id

실행하면 perf --debug verbose=2 perf mem record idperf_event_open 시스템 호출이 오류 번호 13(EACCES)을 반환하는 것으로 표시됩니다.

perf_event_open 매뉴얼 페이지는 다음과 같이 말합니다:

EACCES 요청된 이벤트에 CAP_SYS_ADMIN 권한(또는 보다 완화된 perf_event_paranoid 설정)이 필요할 때 반환됩니다.
권한이 없는 프로세스에서 이 오류가 발생할 수 있는 일반적인 상황은 다음과 같습니다: 다른 사용자가 소유한 프로세스에 연결,
특정 CPU의 모든 프로세스 모니터링(예: pid 매개변수를 -1로 지정)
및 편집증 설정이 필요할 때 Except_kernel을 설정하지 않음 그것.

CentOS 7.6 입니다.

관련 정보