问题标签 [bcc-bpf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
712 浏览

linux-kernel - 如何构建和部署 BPF BCC C++ 应用程序?

有很多适用于 python 开发人员的文档,但是作为一个对 BCC/BPF 非常陌生的 C++ 开发人员,我发现很难确定从哪里开始构建和部署基于 BCC 的 C++ 应用程序。

我从哪说起呢?我查看了这些示例,但它们没有提供任何关于如何打包 BCC C++ 应用程序以部署在各种 Linux 发行版上的想法。

我该怎么做呢?有什么问题/担忧?

0 投票
1 回答
1200 浏览

linux-kernel - 如何在 Ubuntu 20.04 上编译 BCC?

我正在尝试在 Ubuntu 20.04 上编译 BCC BPF 框架( https://github.com/iovisor/bcc )。我遵循了 18.04 的所有说明,但是当然;他们失败了。

我遇到的问题似乎与clang有关

如何在 Ubuntu 20.04 上进行 BCC 编译?

0 投票
0 回答
51 浏览

ebpf - BCC中的偏移量是什么意思

我一直在使用 BCC 来分析我的代码。作为其中的一部分,我正在查看使用 sym() 函数时获得的偏移量,该函数从地址和 pid 获取函数名称,并可选择显示偏移量。

使用 profile.py 工具进行分析时,我得到了以下结果:

我稍微调整了输出以读取以 10 为基数而不是 16 的偏移量。

我不明白在这种情况下偏移量是什么意思,文档读作“从符号开头的指令偏移量”,但我无法将输出中的偏移量与任何文件(源、asm、elf)匹配。如何读取 count1e8 偏移量 54?

最终目标是将此偏移量追溯到 ASM 指令或产生该指令的源文件行。

0 投票
1 回答
654 浏览

linux-kernel - 如何在 eBPF 程序中获取任务的 cgroup 路径?

我一直在尝试使用 Brendan Gregg 的tcptop BCC 工具来了解有关 eBPF 程序如何工作的更多信息。我试图让它打印任务的 CGROUP 路径。

凭借我对 Linux 系统编程的生疏知识,我认为我可以使用 from 的函数linux/cgroup.h,特别是task_cgroup_path() 看起来很有希望,因为我可以将电流task_struct *(从 获得bpf_get_current_task())传递给它。我正在使用带有4.19.59内核的 CentOS7 机器。

但是,当我尝试执行修改后的 tcptop 时,验证程序失败并last insn is not an exit or jmp显示错误消息。我试图理解为什么会这样。

这是修改的差异tcptoppatch

这是验证器的输出

0 投票
0 回答
485 浏览

bcc-bpf - 无法运行 bcc-tools 分析器

我正在尝试运行密件抄送工具的“profile.py”,并遇到以下错误:

linux 头文件位于 /lib/modules 的正常位置下。这是在内核版本 4.19.88 下运行的。

任何指针将不胜感激。

0 投票
1 回答
194 浏览

bpf - 如何将符号文件加载到 BCC 分析器

使用密件抄送工具的配置文件,我在 C 程序的配置文件输出中得到的主要是“[未知]”。当然,这是意料之中的,因为未加载程序符号。但是,我不确定如何正确加载符号,以便“配置文件”程序可以获取它。我已经使用启用调试的“-g”构建了我的程序,但是如何将调试符号加载到“配置文件”?

0 投票
0 回答
583 浏览

linux-kernel - 如何使用 eBPF 修改用户空间内存?

我正在尝试编写一个示例代码,看看它是如何实际工作的。

正如这里所说并在这里讨论过

如果一切正确,输出应该是:

我在密件抄送中写了一个示例,如下所示:

的内容foo1应该改变,但它没有发生。

我曾尝试打印fname甚至buf使用bpf_trace_printk(),但我的屏幕上什么也没有。

知道为什么内容没有改变吗?

更新-1

正如@Queole 所建议的那样

.它起作用了..所以我们必须给予(char *) PT_REGS_PARM2(ctx)而不是(char *) PT_REGS_PARM1(ctx)。我得到了输出,但有点奇怪。经过一些 3-4 cat foo1,内容正在发生变化。

这种行为的原因是什么?

0 投票
1 回答
85 浏览

tcp - tcp_retransmit_skb 的 kprobe。而不是 tcp_retransmit_skb @tcp_states,我想 kprobe __napi_schedule

在 BPF Performance Tools 一书中,有一个 tcp_retransmit_skb 的 kprobe 实现。我想做同样的事情,但不是 tcp_retransmit_skb @tcp_states,我想kprobe_napi_schedule 并合并 'include/linux/netdevice.h' 的枚举 NAPI_STATE *。上面有我的实现:

当我尝试运行它时,它在我的“状态是”的 printf 中什么也没有显示。

输出是:

0 投票
1 回答
733 浏览

linux - 列出和使用自定义 Linux 内核跟踪点

我按照https://www.kernel.org/doc/Documentation/trace/tracepoints.txt上的教程在内核核心中创建了一个自定义跟踪点(即不在可加载模块中)。

但是,我没有看到perf listtplist(来自密件抄送工具)的输出中列出的跟踪点。

所以,我不知道如何使用跟踪点。

问题:如何使跟踪点出现在perf list/tplist输出中?

谢谢。

0 投票
2 回答
1698 浏览

bpf - 密件抄送:ImportError 无法导入名称 BPF

尝试运行示例时出现以下错误hello_world.py

我从源代码(链接)安装了密件抄送。我还安装了两个 python bcc 绑定包,python-bccpython3-bcc没有运气。

我正在运行 Ubuntu 18.04和内核版本4.15.0-117-generic

我在这里想念什么?