我是否需要root(管理员)权限才能运行用户空间“性能”工具?(在Linux内核中启用了perf事件)


25

我需要以perf系统管理员(root)身份运行用户空间工具,还是可以以普通用户身份运行它(或至少某些子命令)?


2
由于权限不足而无法执行所需工作的Unix程序通常会在无法执行工作时抛出错误。运行它,看看!
Caleb

1
我在问这个问题,以决定是否值得尝试(作为普通用户,在$ HOME中)安装perf工具的用户空间部分(/是很简单的)。
JakubNarębski2011年

Ubuntu perf中的FYI 已linux-tools打包,因此在其中安装perf非常简单。
JakubNarębski2013年

1
@JakubNarębski:除非它不是您自己的计算机,并且管理员不愿安装软件包。
马丁·乌丁

Answers:


33

perf没有root用户的情况下可以做什么取决于sysctl设置kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2:您无法进行任何测量。该perf实用程序可能仍然是有用的分析现有的记录用perf lsperf reportperf timechartperf trace
  • kernel.perf_event_paranoid= 1:您可以使用perf stat或跟踪命令perf record,并获取内核分析数据。
  • kernel.perf_event_paranoid= 0:您可以使用perf stat或跟踪命令perf record,并获取CPU事件数据。
  • kernel.perf_event_paranoid= -1:您可以原始访问内核跟踪点(具体来说,您可以mmap通过创建的文件perf_event_open,我不知道其中的含义)。

1
真好 cat /proc/sys/kernel/perf_event_paranoid返回1,因此看来我至少可以进行一些测量(顺便说一句。“内核分析数据”和“ CPU事件数据”之间有什么区别?参考就足够了)
JakubNarębski2011年

2
@Jakub:据我了解,内核事件使您可以看到对各种内核函数的调用。CPU事件是CPU中的计数器,它告诉您内存中某个特定位置被击中了多少次。我从没用过它们,所以我不能再告诉您更多有关它们的信息。LWN上有很多关于该主题的文章,并且还在不断发展。
吉尔(Gilles)'所以

4
使用paranoid = 2时,您仍然可以在用户空间中分析自己的代码(例如,perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}'将显示准确的用户空间周期和指令计数,甚至可以获取计数uops_issued.any 等),但是您无法获得代码计数在系统调用/中断期间运行。因此,报告的CPU频率(周期/时间)至少比实际的要低一些,因为它花费在内核上的时间更长。另请参见实际上对x86 perf施加了什么限制perf_event_paranoid == 1?
彼得·科德斯

“ CPU事件”是指对整个内核中的所有内容进行概要分析,而不是按进程/线程进行概要分析。即偏执= 1或更高阻止你剖析其他用户的代码和1只允许你配置文件内核代码调用由您自己的流程(系统调用)
彼得·科德斯
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.