- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经看到了 ebpf 的用户空间版本 (运行时、汇编器、反汇编器)正在开发中( uBPF 、 rbpf )。
为什么用户空间版本的 eBPF 很有趣?
这些替代方案是否与 eBPF 程序类型(网络、可观察性和安全性)关注相同的目标?
最佳答案
eBPF 的主要优点之一是它在内核中运行代码。可观察性、内核数据聚合、早期数据包处理:这一切都发生在内核空间。所以这个问题听起来很合理:为什么要创建 uBPF 或 rbpf?
我认为它们主要是作为原型(prototype)创建的。 uBPF 在 eBPF 的历史中很早就被引入,并且可能是用户空间中 eBPF 解释器和 x86_64 JIT 的概念验证实现。我编写了 rbpf,它强烈基于 uBPF,我的主要目标是更加熟悉两件事:eBPF 和 Rust。很少事后考虑:)。
我一直很好奇人们可以用它做什么。说实话,用户并不多。 rbpf 的最大用户可能是来自 Solana 的人,他们实现了一些 blockchain tool with smart contracts run in the eBPF machine .我过去遇到的另一个用例是调试一些 eBPF 字节码,因为在用户空间解释器中很容易出现断点(相比之下,目前常规内核 eBPF 的运行时调试非常有限)。
uBPF 取得了更大的成功,并被用作 DPDK 等其他项目的基础 a filtering library或 Oko, an extension to Open vSwitch (都关于高性能网络处理)。 [2021 年 8 月编辑] 最近,它被选为 the implementation of eBPF for Windows 的 eBPF 运行时(引用: announcement 、 my analysis )。
如您所见,拥有这些用户空间 eBPF 机器的兴趣完全取决于您用它做什么。它们可用于运行 eBPF 程序,它们本身没有特定的重点,但如果您有用例,它们可以提供帮助。在这方面,uBPF 和 rbpf 的特殊性之一是它们的许可证(Apache、MIT):它们不受 GPL 保护,这意味着您可以将它们重用于更多项目,包括专有项目。来自内核的代码不是这种情况。
那些用户空间 eBPF 机器的一大限制还在于,它们在内核中发生的事情方面往往已经过时了,而内核中的事情发展很快。他们没有可靠的验证程序,因此您无法断言程序的安全性或安全性。他们几乎不支持 eBPF 映射,如果根本不支持函数调用或 BTF,甚至不支持最新的 eBPF 指令。其中一些可以添加,但这需要一些工程工作和时间。 [2021 年 8 月编辑] uBPF 现在得到了很多事件,因为微软为其 eBPF 实现做出了贡献。他们还使用用户空间验证器,PREVAIL .
关于linux-kernel - 为什么用户空间版本的 eBPF 很有趣?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65904948/
我正在学习 eBPF,并且我知道我可以将我的 eBPF 程序附加到 kprobes、uprobes、tracepoint 等。我看到/sys/kernel/debug/tracing/events/下
bpf 中的每个程序部分都必须具有唯一的名称吗?程序?例如,这个程序用 llvm-5.0 编译得很好。 : ... SEC("sockops") int bpf1(struct bpf_sock_op
当我将 xdp 与 eBPF 结合使用时,我想我可以使用 ip link 来设置模式。 例如, ip link set dev eno1 xdpoffload obj xdp.o sec .text
我发现对于每种类型的 ebpf 程序,该程序都有不同的输入(上下文)。例如,在 BPF_PROG_TYPE_SOCKET_FILTER 程序中,指向 struct __sk_buff 的指针作为参数传
我正在查看 ebpf 验证程序代码,但无法理解以下宏: #define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER) #define o
当我将 xdp 与 eBPF 结合使用时,我想我可以使用 ip link 来设置模式。 例如, ip link set dev eno1 xdpoffload obj xdp.o sec .text
我发现对于每种类型的 ebpf 程序,该程序都有不同的输入(上下文)。例如,在 BPF_PROG_TYPE_SOCKET_FILTER 程序中,指向 struct __sk_buff 的指针作为参数传
我正在扩展一个程序,它接受跟踪函数的参数并打印它。数字参数和短字符串一切正常。但目前尚不清楚如何处理比 eBPF 中堆栈大小(限制为 512 字节)长的长字符串。 在下面的例子中,字符串的长度限制为8
我正在玩 gobpf,但在计算跟踪用户空间函数的持续时间时遇到了问题。我使用 bpf_ktime_get_ns() 读取时间,然后尝试计算增量,但得到了巨大的数字,尽管跟踪函数只休眠了 1 秒。 这是
为了模拟某些行为,我想将探测器附加到系统调用并在传递某些参数时修改返回值。或者,在函数成为进程之前修改函数的参数也足够了。 这可以用 BPF 实现吗? 最佳答案 在内核探测 (kprobes) 中,e
我正在阅读有关 kprobes BPF 程序类型的信息,我想知道是否有可能不仅拦截函数调用以进行跟踪或收集一些低级信息(寄存器、堆栈等) ,但替换调用并执行而不是实际函数? kprobe 是否提供此功
eBPF 已成为轻松快速监控流程的重要工具。但是,我无法找到如何计算探针本身对性能的影响。我敢肯定,如果我 Hook 每个系统调用并在 map 中推送一些信息,肯定会有一些影响,没有什么是免费的,但是
我想使用 EBPF 并在打开的系统调用上放置一个探测器,因此当用户想要打开某个文件时,我将检查其名称,如果它是目标名称,我将阻止它打开。唯一的问题是我不知道如何真正实现这个目标。 此外,如果您能指定某
我想用堆栈中的地址过滤我的 ebpf,例如,如果堆栈跟踪包含 _do_fork 的地址,则写入映射。 我看到了这个https://www.kernel.org/doc/html/latest/bpf/
所以我有一个简单的eBPF代码: 我的.h: #ifndef __MY_COMMON_H__ #define __MY_COMMON_H__ #include struct foo {
我已经看到了 ebpf 的用户空间版本 (运行时、汇编器、反汇编器)正在开发中( uBPF 、 rbpf )。 为什么用户空间版本的 eBPF 很有趣? 这些替代方案是否与 eBPF 程序类型(网络、
是否可以在不同的程序类型之间共享 ebpf 映射。我需要在 tc-bpf 程序和 cgroup bpf 程序之间共享一个映射。如果映射被固定到充当全局命名空间的文件系统,这应该是可能的。但是,我没有得
所以我正在 eBPF 上开发一些东西。 我需要使用 unistd.h header ,因为我想使用 sleep 函数。 但是,当我输入时,我意识到 #include 这些 header 不会被包含在
我运行最新的 debian 测试(使用内核 4.19)。 在我的系统上找不到助手(但它们存在于标题中,Qt 跳转到它们) #include "bpf/bpf.h" int main (){
我想从 eBPF 程序中的任务结构中检索 sessionid。我的 eBPF 程序中有以下代码: struct task_struct *task; u32 sessionid; task =
我是一名优秀的程序员,十分优秀!