问题标签 [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.
python - EBPF 访问固定表
如果在我的 python bcc 程序中我将信息存储在固定地图中,我如何从单独的 python 程序访问它?
所以我从参考指南中得到了这张固定地图:
我已经尝试像普通表一样访问它,但我得到了一个 raise key 错误。没有任何文档,但我发现这个我不太了解的示例https://github.com/iovisor/bcc/blame/master/examples/cpp/UseExternalMap.cc
ebpf - 尝试运行 BPF 程序时缺少右括号和引号
我的代码不断收到这个丢失的终止字符错误。我的目标是逐字打印字符串。这是代码。
这是我不断遇到的终止错误。我确信引号很好,但我不确定此时我的错误在哪里。
xt>
c - BPF map 查找元素个数
如何找到BPF映射中的元素数量?我在密件抄送参考指南中找不到任何有用的信息。
ebpf - 尝试分隔字符串并使用密件抄送打印时注册错误
我想将一些字符串分开并一一打印出来,但由于这些错误,这似乎几乎是不可能的。尝试将 const char str[] 更改为 const char *str 似乎只是给我带来了操作码 00 错误。看来我正朝着正确的方向前进,但只需要帮助将这些行一一打印出来。这是在在线编译器上运行的代码,以查看其输出的样子String Parser online IDE
这是我看到的错误,尝试使用指针而不是 char 数组只会给我带来操作码 00 错误。尝试 #pragma unroll 似乎也不能真正解决问题。我想知道是否有解决这个问题的方法,我只是没有看到。一个值得注意的错误在这里接近尾声:R4 bitwise operator |= on pointer prohibited
linux-kernel - 有人能解释一下 biolatency tool (bcc) 测量的确切延迟是多少吗?
是吗:
- 虚拟文件系统调用块 IO 层到它向块设备驱动程序提交请求之间的时间?
- 从向块 io 层提交请求到从磁盘为请求提供服务的时间之间的时间?
ebpf - bpf_attach_kprobe() 可以指定要附加的函数的内核模块名称吗?
我有一个案例,相同的函数出现在不同的内核模块中,在 /proc/kallsyms 中,例如,
address1 t 函数 [module1] address2 t 函数 [module2]
两个模块都加载在同一台机器上。然后我想用 ebpf 跟踪函数。
bpftrace kprobe 无法指定模块名称。
bpftrace -lv 'kprobe:function'
确实列出了 2 个探测器,但如果我运行 'bpftrace -e 'kprobe:function {...}'
它只连接 1 个探头。似乎它只附上了找到的第一个......
查看bcc 中的 libbpf.c, perf 事件 open syscall 似乎只接受函数名作为字符串,而不接受模块名或地址本身
在最新的 linux 内核 src 代码中,kprobe trace似乎具有支持函数名称和地址以及模块的数据结构,但实现时没有考虑模块。
实际上,Dtrace fbt 探针具有格式 provider:module:function,但是与 Dtrace 语法非常相似的 bpftrace 在 kprobe/kretprobe 提供程序中没有模块信息。
是因为 bcc 和内核 ebpf 不支持模块名称吗?
bpf - 将字符串发送到 BPF Map Space 并打印出来
我有一个小 txt 文件,我想在这里写给 BPF。这是我的 BPF 的 python 代码的样子,但我现在无法打印出任何东西。我一直以加载程序失败告终:带有一堆寄存器错误的无效参数。截至目前,我的字符串基本上说你好,世界,嗨
这是Python代码:
我在这个 pastebin 中链接了错误,因为它太长了: BPF 错误
一个值得注意的错误是提到检测到无限循环,这是我需要检查的。
python - 如何通过 pid 获取 task_struct
我正在尝试在密件抄送程序中通过 pid 获取 task_struct,我使用find_task_by_vpid
但它得到一个错误:
这是我的代码:
谁能告诉我如何解决问题或找到另一种获取 task_struct 的方法?
bpf - 将字符串发送回 BPF 代码并返回用户空间时是否存在字符串大小限制?
我在这里通过 BPF Char Array 通过我的 BPF 代码发送这句话:
jmommyijsadifjasdijfa,你好,世界
当我打印出我的输出时,我似乎只得到这个输出
杰莫米伊
我似乎达到了某种字符串大小限制。有没有办法超过这个字符串大小限制并打印整个字符串?
这是我的 BPF 代码的样子:
这是我的 py 文件:
bpf - 尝试计算 BPF 中字符串中正确的字符数
我正在尝试计算 BPF 中传入的指针字符串,但我留下了这个我无法理解的非常长的错误。我基本上是在尝试在 BPF 中重新创建 strlen 来计算我传入的字符串 * 的大小。错误中有趣的区域可以在这里看到:
R1 最小值超出处理的允许内存范围 2353 insns(限制 1000000) max_states_per_insn 1 total_states 242 peak_states 242 mark_read 2
关于如何解决其他问题的任何想法?
这是我写的代码:
这是我在主 BPF 函数中调用的辅助函数。