问题标签 [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 投票
0 回答
39 浏览

linux - 是否可以在自动化脚本中运行 bcc/bpftrace 工具?

我通过在一个选项卡上运行 bcc 或 bpftrace 单行命令并在另一个选项卡上运行工作负载来测量操作系统开销。工作负载完成后,我按 ctrl+c 停止该工具。如何通过脚本在各种工作负载上进行尝试?

0 投票
1 回答
77 浏览

bpf - 比较 BPF 中的字符串时出现错误的地址错误

我在这里运行了一个示例程序,以查看子字符串是否与字符串匹配,然后将它们打印出来。到目前为止,由于地址错误,我无法运行该程序。我想知道是否有办法解决这个问题?我附上了整个代码,但我的问题主要与 isSubstring 有关。

我的python代码在这里:

编辑:忘记添加错误:它真的很长,可以在这里找到:https ://pastebin.com/a7E9L230

我认为错误中最有趣的部分在它提到的底部附近:

8193跳的顺序太复杂了。

再往下一点提到:错误的地址。

0 投票
0 回答
50 浏览

bpf - 增加我的 struct char 数组的大小限制以传递更大的字符串

我正在将字符串从用户空间传递到我的 BPF 代码,并且想知道是否有可能超出我的 char 结构数组可能的大小限制。是否可以将我的行一一放入 Map 并绕过堆栈大小限制?我通过 Python 传递字符串的方式在这里:

基本上逐行打印我的 CSV 中的任何内容并将其放入我的 BPF Map 中。我的 C 代码在这里:

输入任意值时仍然存在大小限制,我想看看我能推多远。

0 投票
1 回答
61 浏览

bcc-bpf - c++中的冒号函数和$变量?

我对 c++ 还是有点陌生​​,我无法理解这段代码在做什么:

我认为其中的“BEGIN”部分是定义一个宏,但我不完全确定。我真正感到困惑的是

这是在做什么?这似乎是一个函数声明,但在这种情况下,单冒号是什么意思?这是某种初始化列表,但对于函数?是否将 ip4 和 ip6 都设置为该功能?

另外,美元符号变量名有什么意义吗?还是它们只是声明变量的有效方式?

这是密件抄送工具中 udpconnect.bt 的代码。我正在尝试将其转换为 python。

0 投票
0 回答
19 浏览

linux-kernel - 记录有关用户进程执行的块 IO 写入的信息

我正在尝试收集一些与块设备上的某些目标进程执行的写入相关的块层信息。具体来说,我想找到:(1)需要写入的起始扇区,(2)写入的扇区数和(3)写入的时间。

我编写了一个基本的bcc-pythonblock_rq_complete脚本来通过探测事件来收集所需的信息。脚本如下:

当我运行这个脚本时,我发现大多数调用block_rq_complete实际上是由交换器执行的。我知道很多这些调用可能是为了写脏缓存。如果进程没有显式调用fsync,进程的 pid 可能永远不会真正出现在事件中,并且进程的相应写入将由交换器写入。

有没有办法捕获专门为(或代表)我想要的进程执行的写入?有没有办法从交换者中筛选出大量事件?例如,即使我正在向终端写入内容或clear在终端上使用,事件也会出现(令人惊讶的是,它们发生在 SSD 上,使用主要和次要数字标识)。

我将非常感谢任何帮助。谢谢!

0 投票
0 回答
96 浏览

linux - 如何使用内核 4.4 在 bpftrace 中打印字符串

我想用来str()打印字符串参数。但是它给出了一个错误:invalid func unknown#45.

我稍微查了一下。我发现这str()是使用BPF_FUNC_probe_read_str辅助功能。并且这个辅助函数是在内核版本 4.11 中添加的。

在内核版本 4.4 中是否有方便的方法打印字符串参数?

0 投票
0 回答
100 浏览

android - Android中的eBPF程序

如何在 Android 中编译 eBPF 程序?我需要使用adeb和bcc 来编译bpf 程序吗?我对 eBPF Android文档上的 Android 文档感到非常困惑。谢谢!

0 投票
0 回答
43 浏览

go - 主包中的 CGO 调用与模块中的 CGO 调用有什么区别?

我编写了一个 BPF 程序,我可以使用 gobpf 安装它,即使用他们的 bcc 工具。虽然这在主包中可以正常工作,但一旦我将其移动到包中以将其作为模块导入,它就会中断。

澄清一下:它适用于 中的所有代码package main,但是一旦我重命名包并将其移至main()它,cmd/command.go它就会停止工作,并go run抱怨它找不到包含的 lib ( bcc/proto.h)。gcc顺便说一句,这与我在文件上运行时总是遇到的错误相同,.c但没有任何迹象表明我想使用 BPF(这部分gobpf对我有用,直到我将其调用移至模块......)。

我意识到这是一个非常具体的问题,位于 Go、CGo、C 和 C++ 处理方式、BPF 和 bcc 之间的一个奇怪的地方,但我在这里不知所措。

如果有帮助,您可以在此处查看我的代码https://github.com/bwNetFlow/bpfdump 。bcc除了go run做它的事情之外,它还需要安装。基本上:

  • HEAD工作的模块化版本 ( go run cmd/dump.go)
  • HEAD~是我最初的实验,它确实有效(go run bpfdump.go)(作为用户,你会得到一个权限错误,这很好,因为它已经编译过了)。

PS:我认为这可能与这个(相当有创意?)构造有关bcc/proto.hhttps ://github.com/iovisor/bcc/blob/master/src/cc/exported_files.cc

0 投票
0 回答
12 浏览

ebpf - BCC ringbuffer.submit 开销很大

bcc(eBPF 前端)中是否有一种方法可以将事件分批发送到用户空间,而不是像那样逐个事件发送事件ringbuffer.submit()?我想减少使用该函数的频率,ringbuffer.submit()当跟踪事件的速率变得重要时,该函数的开销会变得很大。

0 投票
0 回答
57 浏览

linux-kernel - 无法从 ebpf kprobe 正确读取争论

我写了一个简单的 ebpf 程序(使用 libbpf),我在其中挂钩了sendtosyscall

libbpf 版本:

密件抄送版本:

我运行了一个简单的 curl 请求来检查钩子并得到以下信息:

我不明白我应该如何阅读sendtolibbpf 中 syscal 的参数。BCC 钩子和 libbpf 钩子之间的 ctx 结构是相同的(至少在地址方面)。

你看到我做错了什么吗?我错过了什么吗?任何帮助都感激不尽!