Em Thu, Apr 02, 2020 at 11:42:05AM +0300, Alexey Budankov escreveu: > This patch set introduces CAP_PERFMON capability designed to secure > system performance monitoring and observability operations so that > CAP_PERFMON would assist CAP_SYS_ADMIN capability in its governing role > for performance monitoring and observability subsystems of the kernel. So, what am I doing wrong? [perf@five ~]$ type perf perf is hashed (/home/perf/bin/perf) [perf@five ~]$ [perf@five ~]$ ls -lahF /home/perf/bin/perf -rwxr-x---. 1 root perf_users 24M Apr 7 10:34 /home/perf/bin/perf* [perf@five ~]$ [perf@five ~]$ getcap /home/perf/bin/perf [perf@five ~]$ perf top --stdio Error: You may not have permission to collect system-wide stats. Consider tweaking /proc/sys/kernel/perf_event_paranoid, which controls use of the performance events system by unprivileged users (without CAP_PERFMON or CAP_SYS_ADMIN). The current value is 2: -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_PERFMON or CAP_SYS_ADMIN Disallow raw tracepoint access by users without CAP_SYS_PERFMON or CAP_SYS_ADMIN >= 1: Disallow CPU event access by users without CAP_PERFMON or CAP_SYS_ADMIN >= 2: Disallow kernel profiling by users without CAP_PERFMON or CAP_SYS_ADMIN To make this setting permanent, edit /etc/sysctl.conf too, e.g.: kernel.perf_event_paranoid = -1 [perf@five ~]$ Ok, the message says I need to have CAP_PERFMON, lets do it, using an unpatched libcap that doesn't know about it but we can use 38, CAP_PERFMON value instead, and I tested this with a patched libcap as well, same results: As root: [root@five bin]# setcap "38,cap_sys_ptrace,cap_syslog=ep" perf [root@five bin]# Back to the 'perf' user in the 'perf_users' group, ok, so now 'perf record -a' works for system wide sampling of cycles:u, i.e. only userspace samples, but 'perf top' is failing: [perf@five ~]$ type perf perf is hashed (/home/perf/bin/perf) [perf@five ~]$ getcap /home/perf/bin/perf /home/perf/bin/perf = cap_sys_ptrace,cap_syslog,38+ep [perf@five ~]$ groups perf perf_users [perf@five ~]$ id uid=1002(perf) gid=1002(perf) groups=1002(perf),1003(perf_users) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [perf@five ~]$ perf top --stdio Error: Failed to mmap with 1 (Operation not permitted) [perf@five ~]$ perf record -a ^C[ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 1.177 MB perf.data (1552 samples) ] [perf@five ~]$ perf evlist cycles:u [perf@five ~]$ - Arnaldo