#ebpf #run-time #programs #environment #toolchain #wasmtime

app wasm-bpf

基于libbpf和wasmtime的eBPF程序WebAssembly运行时命令行工具(wasm-bpf项目的一部分)

2个不稳定版本

0.2.0 2023年4月27日
0.1.0 2023年3月8日

#323 in WebAssembly

MIT许可证

1MB
1.5K SLoC

logo

基于libbpf和wasmtime的wasm-bpf项目Rust WebAssembly-eBPF运行时。

📦 Wasm-bpf:eBPF的Wasm库和工具链

Actions Status CodeFactor DeepSource

中文文档 Gitee Github

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++RustGo以及30多种其他编程语言编写eBPF程序,并轻松地将它们部署到不同的Linux发行版上。此外,云服务提供商可以利用wasm-bpf为他们的客户提供安全且高性能的环境,以便在云环境中开发和部署eBPF应用程序。

功能

  • 通用目的:提供从eBPF到Wasm的大部分功能,从环形缓冲区或性能缓冲区进行轮询,通过maps内核 eBPF和用户空间 Wasm之间进行双向通信,动态加载附加卸载等。支持大量eBPF程序类型和映射类型。
  • 高性能:复杂数据类型无序列化开销,使用共享内存以避免主机和Wasm之间的复制开销。
  • 易于使用:提供类似于libbpf-bootstrap的类似开发体验,自动生成Wasm-eBPF骨架头文件和类型定义以供绑定使用。使用CC++RustGo编写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运行时。

依赖项

~32–43MB
~778K SLoC