logo

A rust WebAssembly-eBPF runtime for wasm-bpf project based on libbpf and wasmtime.

πŸ“¦ Wasm-bpf: Wasm library and toolchain for eBPF

Actions Status CodeFactor DeepSource

δΈ­ζ–‡ζ–‡ζ‘£ Gitee Github

Wasm-bpf is a WebAssembly eBPF library, toolchain and runtime powered by CO-RE(Compile Once – Run Everywhere) libbpf. It can help you build almost every eBPF programs or usecases to Wasm with nearly zero modification, and run them cross platforms with Wasm sandbox.

Introduction

WebAssembly (Wasm) is a portable binary format for executable code. The code is executed at a nearly-native speed in a memory-safe (for host) sandbox, with clearly defined resource constraints, and APIs for communicating with the embedding host environment (eg. proxy).The wasm-bpf project combines Wasm and eBPF technologies to enhance the performance and programmability of eBPF applications.

With wasm-bpf, users can dynamically load and securely execute user-defined or community-contributed Wasm-eBPF codes as plug-ins in their software products, such as observability platforms or service proxy. This enables efficient and scalable data collection, while also allowing for advanced processing and analysis of that data.

It also enables developers to write eBPF programs in familiar languages like C/C++, Rust, Go, and more than 30 other programming languages, and deploy them easily across different Linux distributions. Additionally, cloud providers can leverage wasm-bpf to offer a secure and high-performance environment for their customers to develop and deploy eBPF applications in their cloud environments.

Features

See the examples directory for examples of eBPF programs written in C, Rust, Go and compiled to Wasm, covering the use cases from tracing, networking to security.

For tools to distribute Wasm-eBPF programs in OCI images, please refer to eunomia-bpf repo.

πŸš€ Get started

Running the runqlat example with docker:

```console $ 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        |                                        |

```

For more tools to distribute and deploy Wasm-eBPF programs for usecases from Observability, Networking to Security, please refer to eunomia-bpf repo.

wasm-bpf-rs

A rust WebAssembly-eBPF runtime for wasm-bpf project based on libbpf and wasmtime.

πŸ”— Links