Linux perf 工具运行问题

Posted

技术标签:

【中文标题】Linux perf 工具运行问题【英文标题】:Linux perf tool run issues 【发布时间】:2017-07-25 23:20:42 【问题描述】:

我正在使用 perf 工具对我的一个项目进行基准测试。我面临的问题是我在我的机器上运行 perf 工具会自动运行,一切正常。 但是,我正在尝试在自动化服务器中运行 perf 以使其成为我签入过程的一部分,但我从自动化服务器收到以下错误

WARNING: Kernel address maps (/proc/kallsyms,modules) are restricted,
check /proc/sys/kernel/kptr_restrict.

Samples in kernel functions may not be resolved if a suitable vmlinux
file is not found in the buildid cache or in the vmlinux path.

Samples in kernel modules won't be resolved at all.
If some relocation was applied (e.g. kexec) symbols may be misresolved
even with a suitable vmlinux or kallsyms file.

Error:

Permission error - are you root?

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

fp: Terminated

我尝试将 /proc/sys/kernel/perf_event_paranoid 更改为 -1 和 0,但仍然看到相同的问题。 有人见过这个吗?为什么我需要以 root 身份运行命令?我可以在没有 sudo 的情况下在我的机器上运行它。

顺便说一句,命令是这样的:

perf record -m 32 -F 99 -p xxxx -a -g --call-graph fp

【问题讨论】:

【参考方案1】:

您不能使用-a(完整系统分析)和来自非root用户的示例内核:http://man7.org/linux/man-pages/man1/perf-record.1.html

尝试在没有-a 选项的情况下运行它,并将事件限制为:u 后缀的用户空间事件:

perf record -m 32 -F 99 -p $PID -g --call-graph fp -e cycles:u

或者在没有 PMU 直通的情况下为虚拟化平台使用软件事件

perf record -m 32 -F 99 -p $PID -g --call-graph fp -e cpu-clock:u

【讨论】:

以上是关于Linux perf 工具运行问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 linux perf 工具进行代码理解

从源代码/从头开始编译 linux perf 工具及其依赖的内核模块

perf:无法合成 bpf 事件

Linux中CPU性能分析工具perf简单使用(亲测可用)

Perf -- Linux下的系统性能调优工具,第 1 部分

如何在 Linux 中通过 perf 工具捕获 L3 缓存命中和未命中