#ebpf #wasm-module #run-time #programs #wasmtime #cross-platform #wasm-bpf

wasm-bpf-rs

基于libbpf和wasmtime的eBPF程序WebAssembly运行时库

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日

#359WebAssembly

每月下载 29
用于 3 个crate(2个直接使用)

MIT 协议

1MB
1.5K SLoC

包含(ELF exe/lib,31KB)bootstrap.bpf.o,(ELF exe/lib,31KB)tests/bootstrap.bpf.o

logo

A rust WebAssembly-eBPF运行时,基于libbpf和 wasmtime.

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

Actions Status CodeFactor DeepSource

中文文档 Gitee Github

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

功能

  • 通用:提供 eBPF 到 Wasm 的绝大多数功能,包括从环形缓冲区或 perf 缓冲区进行 polling,通过 maps 在内核 eBPF 和用户空间 Wasm 之间进行双向通信,动态加载、附加或断开连接等。支持大量 eBPF 程序类型和映射类型。
  • 高性能:没有复杂数据类型的 serialization 开销,使用 shared memory 避免主机和 Wasm 之间的复制开销。
  • 易于使用:提供类似于 libbpf-bootstrap 的开发体验,自动生成 Wasm-eBPF 骨架头文件和类型定义。在 C/C++RustGo 中编写您的 eBPF 程序,并编译为 Wasm。
  • 轻量级:最小的运行时只有 1.5 MB 的二进制大小。编译后的 Wasm 模块大小仅为 ~90K。使用相同的工具链,您可以在任何语言和平台上轻松构建自己的 Wasm-eBPF 运行时!

请参阅 示例目录,了解使用 C、Rust、Go 编写的 eBPF 程序,这些程序已编译为 Wasm,覆盖了从 tracingnetworkingsecurity 的用例。

有关在 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        |                                        |

有关用于从 ObservabilityNetworkingSecurity 的用例分发和部署 Wasm-eBPF 程序的更多工具,请参阅 eunomia-bpf 仓库。

wasm-bpf-rs

A rust WebAssembly-eBPF运行时,基于libbpf和 wasmtime.

依赖

~31–42MB
~749K SLoC