如何解决perf_event_open 权限被拒绝,除了使用 sudo 或更改 perf_event_paranoid 文件之外,还有其他方法吗?
我能找到的有关该主题的唯一信息是此链接:perf_event_open always returns -1,根据我的理解,它建议使用 CONfig_HW_PERF_EVENTS 进行配置,但我仍然遇到同样的问题。
我正在实施一个受 perf_event_open
手册页启发的程序:
static long
perf_event_open(struct perf_event_attr *hw_event,pid_t pid,int cpu,int group_fd,unsigned long flags)
{
int ret;
ret= syscall(__NR_perf_event_open,hw_event,pid,cpu,group_fd,flags);
return ret;
}
struct perf_event_attr pe;
int pid = fork();
if (pid > 0 ) {
memset(&pe,sizeof(pe));
pe.type = PERF_TYPE_HARDWARE;
pe.size = sizeof(pe);
pe.config = PERF_COUNT_HW_cpu_CYCLES;
pe.disabled = 0;
pe.exclude_kernel = 0;
pe.exclude_hv = 0;
fd = perf_event_open(&pe,-1,0);
if (fd == -1) {
perror(0);
exit(EXIT_FAILURE);
}
}
我总是得到 fd 的 -1 返回值,而 perror 表示权限被拒绝。
当然我可以使用 sudo 来解决这个问题,但是还有其他方法可以允许执行 perf_event_open 的权限吗?
PS:我不想更改 perf_event_paranoid 文件,这会使程序在设置为 -1 时工作;我假设它会在 2。
解决方法
RETURN VALUE section of the Linux perf_event_open()
system call 部分说明:
...
EACCES Returned when the requested event requires CAP_PERFMON
(since Linux 5.8) or CAP_SYS_ADMIN permissions (or a more
permissive perf_event paranoid setting). Some common
cases where an unprivileged process may encounter this
error: attaching to a process owned by a different user;
monitoring all processes on a given CPU (i.e.,specifying
the pid argument as -1); and not setting exclude_kernel
when the paranoid setting requires it.
...
EPERM Returned on many (but not all) architectures when an
unsupported exclude_hv,exclude_idle,exclude_user,or
exclude_kernel setting is specified.
It can also happen,as with EACCES,when the requested
event requires CAP_PERFMON (since Linux 5.8) or
CAP_SYS_ADMIN permissions (or a more permissive perf_event
paranoid setting). This includes setting a breakpoint on
a kernel address,and (since Linux 3.13) setting a kernel
function-trace tracepoint.
根据发布的示例代码,鉴于您对偏执设置的声明,值 pe.exclude_kernel = 0;
或 pe.exclude_hv = 0;
可能会导致权限问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。