无根权限运行性能


27

我正在使用该perf工具的4.1内核和4.1版进行debian测试。在此版本中,他们似乎添加了某种保护措施,以防止普通用户从该工具收集数据。因此,perf以普通用户身份运行会出现以下错误:

perf stat ls
Error:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
 -1 - Not paranoid at all
  0 - Disallow raw tracepoint access for unpriv
  1 - Disallow cpu events for unpriv
  2 - Disallow kernel profiling for unpriv

perf_event_paranoid在我的安装中包含3。不幸的是,即使是root用户,我也无法更改该文件。如何允许我自己的用户在perf没有sudo权限的情况下使用?

我有一个我想对其进行基准测试的应用程序,该应用程序不需要root,也不想以root用户身份对其进行基准测试。


perf stat -e cycles:u工作吗?perf_event_paranoid在2016 lwn.net/Articles/696216 “不允许perf_event_open()”中添加了“ 3”值,并在“ Android和Debian”中启用了此值(也是lkml.org/lkml/2016/1/11/587 bugs.launchpad。净/错误/ 1612790 debian.org/security/2017/dsa-3791
osgx

1
@osgx:对于偏执狂级别3的我,您的建议不起作用,我仍然不被允许使用。
马丁·乌丁

Answers:


41

/proc可写文件通常通过在文件中回显一个值来进行更改。你应该试试:

sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'

下面的文件/proc/sys/还具有sysctl命令,以方便访问,因此您可以执行以下操作:

sudo sysctl -w kernel.perf_event_paranoid=1

(尽管-wfor write似乎是可选的)。为了确保在启动时完成此操作,请/etc/sysctl.d/99-mysettings.conf使用以下行创建您自己的文件:

kernel.perf_event_paranoid=1

选择将不会覆盖现有文件的文件名/run/sysctl.d//usr/lib/sysctl.d/。参见man sysctl.d


12
要持续到重新引导:sudo sh -c 'echo kernel.perf_event_paranoid=1 > /etc/sysctl.d/local.conf'
马尔西奥

1
在评论中添加评论,请
Leos313

1
@ Leos313完成。感谢您的提醒。
meuh

@Márcio:您想附加local.conf,而不是截断。或写入/etc/sysctl.d/perf.conf
彼得·科德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.