7个版本
0.3.2 | 2023年5月12日 |
---|---|
0.3.1 | 2023年4月25日 |
0.2.2 | 2023年3月23日 |
0.1.0 | 2023年3月6日 |
#359 在 WebAssembly
每月下载 29 次
用于 3 个crate(2个直接使用)
1MB
1.5K SLoC
包含(ELF exe/lib,31KB)bootstrap.bpf.o,(ELF exe/lib,31KB)tests/bootstrap.bpf.o
A rust WebAssembly-eBPF运行时,基于libbpf和 wasmtime.
📦 Wasm-bpf: eBPF的Wasm库和工具链
Wasm-bpf
是一个由 CO-RE(Compile Once – Run Everywhere) libbpf 支持的WebAssembly eBPF库、工具链和运行时。它可以帮助你在几乎不修改的情况下,使用Wasm构建几乎任何eBPF程序或用例,并通过Wasm沙盒跨平台运行。
简介
WebAssembly
(Wasm) 是一种可移植的二进制代码格式。代码在内存安全(针对主机)的沙盒中以接近原生的速度执行,具有明确定义的资源约束,并提供API与嵌入的主机环境(例如代理)通信。wasm-bpf
项目结合了Wasm和eBPF技术,以提高eBPF应用程序的性能和可编程性。
使用 wasm-bpf
,用户可以在他们的软件产品中(如可观察性平台或服务代理)动态加载和执行用户定义或社区贡献的Wasm-eBPF代码作为插件。这使数据收集既高效又可扩展,同时还可以对数据进行高级处理和分析。
它还使开发者能够使用熟悉的语言(如 C/C++
、Rust
、Go
等 30 多种编程语言)编写 eBPF 程序,并轻松地在不同的 Linux 发行版上部署。此外,云服务提供商可以利用 wasm-bpf 为客户提供安全且性能优越的环境,让他们在云环境中开发和部署 eBPF 应用程序。
功能
通用
:提供 eBPF 到 Wasm 的绝大多数功能,包括从环形缓冲区或 perf 缓冲区进行polling
,通过maps
在内核 eBPF 和用户空间 Wasm 之间进行双向通信,动态加载、附加或断开连接等。支持大量 eBPF 程序类型和映射类型。高性能
:没有复杂数据类型的serialization
开销,使用shared memory
避免主机和 Wasm 之间的复制开销。易于使用
:提供类似于 libbpf-bootstrap 的开发体验,自动生成 Wasm-eBPF 骨架头文件和类型定义。在C/C++
、Rust
、Go
中编写您的 eBPF 程序,并编译为 Wasm。轻量级
:最小的运行时只有1.5 MB
的二进制大小。编译后的 Wasm 模块大小仅为~90K
。使用相同的工具链,您可以在任何语言和平台上轻松构建自己的 Wasm-eBPF 运行时!
请参阅 示例目录,了解使用 C、Rust、Go 编写的 eBPF 程序,这些程序已编译为 Wasm,覆盖了从 tracing
、networking
到 security
的用例。
有关在 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 | |
有关用于从 Observability
、Networking
到 Security
的用例分发和部署 Wasm-eBPF 程序的更多工具,请参阅 eunomia-bpf 仓库。
wasm-bpf-rs
A rust WebAssembly-eBPF运行时,基于libbpf和 wasmtime.
🔗 链接
- 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 微运行时):https://github.com/bytecodealliance/wasm-micro-runtime
- wasmtime:https://wasmtime.dev/
- libbpf:https://github.com/libbpf/libbpf
依赖
~31–42MB
~749K SLoC