perf:无法合成 bpf 事件

Posted

技术标签:

【中文标题】perf:无法合成 bpf 事件【英文标题】:perf: Couldn't synthesize bpf events 【发布时间】:2021-02-03 09:35:48 【问题描述】:

我正在尝试让 perf 工具在我们的一种 linux 设置中运行,该设置没有/不能有 linux 源。 所以,我在另一台机器上下载了 linux 代码并编译了 perf (cd tools/perf; make)。 我将 perf 二进制文件复制到了我的目标机器上。 但是,在开始录制时,它说“无法合成 bpf 事件”。

root> perf record -a -g --call-graph dwarf -p 836
Warning:
PID/TID switch overriding SYSTEM
Couldn't synthesize bpf events.
[ perf record: Woken up 1 times to write data ]
Failed to read max cpus, using default of 4096
[ perf record: Captured and wrote 0.057 MB perf.data ]

在我们的目标机器上运行的 Linux 版本:5.4.66-rt38-intel-pk-preempt-rt

我用来编译 perf 的代码:https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git/log/?h=v5.4-rt

因为我得到这个“无法合成 bpf 事件”,我想我没有在性能报告中得到用户空间堆栈。 我应该怎么做才能摆脱这个错误来使用 perf 获取正在运行的进程的用户空间堆栈?请指教!

【问题讨论】:

【参考方案1】:

CONFIG_BPF_SYSCALL 未在内核配置中启用。 启用后,我可以看到“无法合成 bpf”消失了。 将其标记为已回答。

【讨论】:

以上是关于perf:无法合成 bpf 事件的主要内容,如果未能解决你的问题,请参考以下文章

运行 UI 测试时,Fastlane 扫描“无法合成事件”,适用于 Xcode

无法从BPF跳转至EXCEL

为啥 bpf 代码无法访问 cpumap_enqueue_ctx 的前 8 个字节?

BPF环形缓冲区

如何通过kprobe将BPF程序附加到内核函数?

无法解析模块“perf_hooks”