eunomia-bpf
is a dynamic loading library base on libbpf
, and a compile toolchain. With eunomia-bpf, you can:
- Write eBPF kernel code only and automatically exposing your data from kernel
- Compile eBPF kernel code to a
JSON
, you can dynamically load it on another machine without recompile - Compile eBPF program to a
WASM
module, and you can operate the eBPF program or process the data in user spaceWASM
runtime - Package, distribute, and run user-space and kernel-space eBPF programs together in
WASM
module - very small and simple! The library itself
<1MB
and noLLVM/Clang
dependence, can be embedded easily in you project - as fast as
<100ms
and little resource need to dynamically load and run any eBPF program on another kernel version
we have a loader library, a compile toolchain, and some additional tools like cli and a custom metrics exporter.
A wrapper of main functions of libbpf, provide the ability to dynamically load eBPF code to the kernel and run it with a simple JSON and a few API.
see eunomia-bpf for details.
A simple cli interface is provided for eunomia-bpf library, which you can use it to start any eBPF program from a url in a command. You can download it from release for example:
# download the release from https://github.com/eunomia-bpf/eunomia-bpf/releases/latest/download/ecli
$ wget https://aka.pw/bpf-ecli -O ecli && chmod +x ./ecli
$ sudo ./ecli run https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/package.json # simply run a pre-compiled ebpf code from a url
Or you can write eBPF kernel code only and compile it to a JSON
:
docker run -it -v `pwd`/:/src/ yunwei37/ebpm:latest
see examples for more examples.
Use the eunomia-bpf
library to load eBPF
program from a WASM
module, you can write a WASM module to operate the eBPF program or process the data in user space WASM
runtime. The idea is simple:
- compile the kernel eBPF code skeleton to the
JSON
format witheunomia-cc
toolchain - embed the
JSON
data in theWASM
module, and provide some API for operating the eBPF program skeleton - load the
JSON
data from theWASM
module and run the eBPF program skeleton witheunomia-bpf
library
You can have multiple eBPF
program in a single WASM
module.
See ewasm for details. For example, you can run an eBPF program with a WASM module for an URL:
$ sudo ./ecli run https://eunomia-bpf.github.io/eunomia-bpf/sigsnoop/app.wasm
You can also generate a WASM program template for eBPF or build WASM module with eunomia-cc
container:
docker run -it -v `pwd`/:/src/ yunwei37/ebpm:latest gen-wasm-skel # generate WASM app template for eBPF
docker run -it -v `pwd`/:/src/ yunwei37/ebpm:latest build-wasm # Build WASM module
see sigsnoop example for more detail.
The toolchain can be used as a docker to generate pre-compiled eBPF data in one command:
see the compile toolchains eunomia-cc for details.
you can also simply use the ebpm-template repo as a template in github, just push to it and github action can help you compile CO-RE ebpf code!
An prometheus and OpenTelemetry exporter for custom eBPF metrics, written in async rust: eunomia-exporter
You can compile it or download from release
-
LMP eBPF Hub: github.com/linuxkerneltravel/lmp
a package manager for eBPF based on wasm modules
-
bolipi online compiler & runner: https://bolipi.com/ebpf/home/online
an online compiler and runner for eBPF program newbies
see build for details.
see examples for details about eBPF tools and library usage.
We also have a prove of concept video: Writing eBPF programs in WASM.
see benchmark for details.
- refactor the code from project
Eunomia
and provide quick examples - support
tracepoints
,fentry
,kprobe
,lsm
, andring buffer
/perf event
output in userspace. - make the compile easier to use, and more flexible. Don't need any code modified to compile.
- add configurable exporter as an example
- add simple pacakage manager for eunomia-bpf: in LMP community
- use WASM for ebpf package load config and add more user space support
- support more ebpf program types: uprobe, xdp etc.
- add more possibilities and helper functions from
libbpf
- Android support
- provide python, go and others sdk
- add support of
etcd
and enhance server
MIT LICENSE