2个不稳定版本
0.2.0 | 2023年4月27日 |
---|---|
0.1.0 | 2023年3月8日 |
#323 in WebAssembly
1MB
1.5K SLoC
基于libbpf和wasmtime的wasm-bpf项目Rust WebAssembly-eBPF运行时。
📦 Wasm-bpf:eBPF的Wasm库和工具链
Wasm-bpf
是一个由CO-RE(编译一次-到处运行)libbpf驱动的WebAssembly eBPF库、工具链和运行时。它可以帮助您几乎零修改地将几乎所有的eBPF程序或用例转换为Wasm,并通过Wasm沙盒在不同的平台上运行。
简介
WebAssembly
(Wasm)是一种可移植的执行代码的二进制格式。代码在内存安全的(对宿主)沙盒中以几乎本机的速度执行,具有明确定义的资源约束,并提供了与嵌入宿主环境(例如代理)通信的API。The wasm-bpf
项目将Wasm和eBPF技术相结合,以增强eBPF应用程序的性能和可编程性。
使用wasm-bpf
,用户可以将用户定义的或社区贡献的Wasm-eBPF代码作为插件
动态加载并安全执行在他们的软件产品中,例如可观察性平台或服务代理。这使高效且可扩展的数据收集成为可能,同时也允许对数据进行高级处理和分析。
它还允许开发者使用熟悉的语言,如C/C++
、Rust
、Go
以及30多种其他编程语言编写eBPF程序,并轻松地将它们部署到不同的Linux发行版上。此外,云服务提供商可以利用wasm-bpf为他们的客户提供安全且高性能的环境,以便在云环境中开发和部署eBPF应用程序。
功能
通用目的
:提供从eBPF到Wasm的大部分功能,从环形缓冲区或性能缓冲区进行轮询
,通过maps
在内核
eBPF和用户空间
Wasm之间进行双向通信,动态加载
、附加
或卸载
等。支持大量eBPF程序类型和映射类型。高性能
:复杂数据类型无序列化
开销,使用共享内存
以避免主机和Wasm之间的复制开销。易于使用
:提供类似于libbpf-bootstrap的类似开发体验,自动生成Wasm-eBPF骨架头文件和类型定义以供绑定使用。使用C
、C++
、Rust
和Go
编写eBPF程序,并编译成Wasm。超轻量级
:最小运行时仅占1.5 MB
的二进制大小。编译后的Wasm模块仅为~90K
。使用相同的工具链,您可以在任何语言和平台上轻松构建自己的Wasm-eBPF运行时!
请参阅示例目录,其中包含用C、Rust、Go编写的eBPF程序示例,并编译成Wasm,覆盖从跟踪
、网络
到安全
的用例。
有关在OCI
镜像中分发Wasm-eBPF程序的工具,请参阅eunomia-bpf存储库。
🚀 开始
使用docker运行runqlat
示例
$ wget https://eunomia-bpf.github.io/wasm-bpf/examples/runqlat/runqlat.wasm
$ docker run --rm -it --privileged -v $(pwd):/examples ghcr.io/eunomia-bpf/wasm-bpf:latest /examples/runqlat.wasm
Tracing run queue latency... Hit Ctrl-C to end.
usecs : count distribution
0 -> 1 : 72 |***************************** |
2 -> 3 : 93 |************************************* |
4 -> 7 : 98 |****************************************|
8 -> 15 : 96 |*************************************** |
16 -> 31 : 38 |*************** |
32 -> 63 : 4 |* |
64 -> 127 : 5 |** |
128 -> 255 : 6 |** |
256 -> 511 : 0 | |
512 -> 1023 : 0 | |
1024 -> 2047 : 0 | |
2048 -> 4095 : 1 | |
有关更多用于从可观察性
、网络
到安全
用例分发和部署Wasm-eBPF程序的工具,请参阅eunomia-bpf存储库。
wasm-bpf-rs
基于libbpf和wasmtime的wasm-bpf项目Rust WebAssembly-eBPF运行时。
🔗 链接
- wasm-bpf GitHub仓库:https://github.com/eunomia-bpf/wasm-bpf
- eunomia-bpf项目:使用CO-RE和WebAssembly简化并增强eBPF https://github.com/eunomia-bpf/eunomia-bpf
- 文档和博客:https://docs.eunomia.dev
- CO-RE(编译一次 – 运行到处):https://facebookmicrosites.github.io/bpf/blog/2020/02/19/bpf-portability-and-co-re.html
- WAMR(WebAssembly Micro Runtime):https://github.com/bytecodealliance/wasm-micro-runtime
- wasmtime:https://wasmtime.dev/
- libbpf:https://github.com/libbpf/libbpf
依赖项
~32–43MB
~778K SLoC