Aya,第一个在 Rust 中创建 eBPF 控制器的库

Linus Torvalds 以及许多开发人员 内核和不同的发行版 表达了他们对 Rust 的喜爱 甚至不止一次出现了在 Linux 内核上以这种编程语言实现驱动程序的问题。

而在这方面,已经发布了各种作品,其中 我们已经在博客上提到过 我们可以提到,例如, 实验 成功 来自一组替代的实用程序,coreutils,用 Rust 重写 (这包括诸如 sort、cat、chmod、chown、chroot、cp、date、dd、echo、hostname、id、ln 和 ls 等实用程序)。

鉴于此,Linus Torvalds 并没有完全表达他的观点来支持这个倡议,而是表达了反对的观点(你可以查阅详情 在以下链接中。)

尽管受到了 Linus 的严厉批评, 作品 关于实施 内核中的 Rust 并没有停止前进 而最近 提出了 Aya 库的第一个版本,它允许您在 Rust 中创建 eBPF 驱动程序,这些驱动程序在 Linux 内核中的特殊 JIT 虚拟机中运行。

与其他 EBPF 开发工具不同, Aya 不使用 libbpf 和 BCC 编译器,但 提供自己的 Rust 实现 它使用 libc drawer 包直接访问内核系统调用。 构建 Aya 不需要 C 语言工具或内核头文件。

对于那些谁 不知道 eBPF,他们应该知道这是一个字节码解释器 内置于 Linux 内核中,允许您创建网络操作处理程序、监视系统操作、拦截系统调用、控制访问、定时处理事件、计算操作的频率和时间,以及使用 kprobes / uprobes / tracepoint 进行跟踪。

由于 JIT 编译,字节码被即时翻译成机器指令 并以本机代码的性能运行。 XDP 提供了一种在网络驱动程序级别运行 BPF 程序的方法,可以直接访问 DMA 数据包缓冲区,允许您为高网络负载条件构建高性能驱动程序。

关于绫

在提到的主要功能中 从 Aya 我们可以发现 支持 BTF (BPF 类型格式),它在 BPF 伪代码中提供类型信息,用于检查和比较当前内核提供的类型。 使用 BTF 可以创建通用的 eBPF 驱动程序,无需使用不同版本的 Linux 内核重新编译它们即可使用。

以及 支持 bpf 到 bpf 调用, 全局变量和初始值设定项,它允许通过类比使用 aya 作为执行时间的传统程序来为 eBPF 设计程序,考虑到 eBPF 中的工作取消功能。

另一方面,它还具有 支持内部内核类型, 包括常规数组、哈希映射、堆栈、队列、堆栈跟踪以及套接字和性能跟踪的结构。

有能力创建各种类型的eBTF程序,包括用于过滤和流量管理的程序、cgroup 和各种套接字驱动程序、XDP 程序以及对非阻塞东京模式和 async-std 中的异步请求处理的平台支持。
快速编译,不受内核编译或内核头文件的束缚。

重要的是要提到 该项目仍被认为是实验性的,因为 API 尚未稳定 并继续发展。 此外,并非所有设想的功能都尚未实现。

到今年年底,开发人员希望将 Aya 的功能与 libbpf 相提并论 并于 2022 年 XNUMX 月形成第一个稳定版本。 还计划将 Aya 为 Linux 内核编写 Rust 代码所需的部分与用于加载、附加和与 eBPF 程序交互的用户空间组件结合起来。

最后 如果你有兴趣了解更多 关于它,你可以 检查以下链接中的详细信息。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。