Rust 因其安全特性和优秀的 C 互操作性(Interoperability),成为流行的系统编程语言。在 eBPF 的上下文中,安全特性不重要。因为程序通常需要读取内核内存,该操作被认为是不安全的。Rust 结合 Aya 所提供的是快速、高效的开发体验:
用于项目脚手架、构建、测试和调试的 Cargo
带 CO-RE(Compile-Once,Run-Everywhere)支持的 Rust 内核头文件绑定的生成
在用户空间和 eBPF 程序间共享代码
快速的编译时间
没有对 LLVM、BCC 或 libbpf 的运行时依赖
运行 eBPF 程序的 eBPF 虚拟机是受限制的运行时环境:
栈空间仅为 512 字节(如果使用尾调用,那么为 256 字节)。
没有访问堆空间的权限,数据必须被写到映射(maps)中。
即便使用 C 编写的应用程序也被限制为语言功能的子集,在 Rust 中,Aya 也有类似的限制:
不使用标准库,使用 core
代替。
不能使用 core::fmt
以及依赖它的特性,例如 Display
和 Debug
。
因为没有堆,所以不能使用