Skip to content

wasm v2

云微 edited this page Feb 4, 2023 · 5 revisions

特性

  • base on libbpf and wamr
  • 400 行不到的代码(运行时)
  • 内核态和 wasm 之间无序列化,共享内存(无内存拷贝)的双向通信,极大地提高了性能,并且几乎可以适用于所有的使用 ebpf 的场景
  • 可以访问几乎所有的 eBPF 底层 map 类型,以及 perf event 和 ring buffer,获得完善的 ebpf 能力
  • 可以通过 bpftool(我们修改过的版本)自动生成用户态 c skel
  • 和 libbpf-bootstrap 几乎一致的、简单便捷的开发体验,甚至还更简单一些(不需要编译和链接 libbpf 代码,只需要 包含一个简单的头文件库)
  • wasm 有很多系统相关的结构体类型缺失,可以用生成的 vmlinux 补足这一点,实现方便的 host 和 wasm 之间的交互和通信,也更方便移植代码;

效果

  • 几乎可以移植任何类型的 eBPF 应用到 wasm,稳定性也大大提高了(代码够少)
  • 提供 wasm 在用户态和 ebpf 在内核态的双向高速通道,带来更多的可能性
  • 本质上可以说是希望把 wasm 当做在操作系统之上建立的另一个用户态运行空间,让 ebpf 和 userspace 运行的任意 wasm 应用建立通信,类似于 wasi 的设计思路,而不是将 wasm 用作数据处理插件;

文章

  • 300+ 行从零开始实现 Wasm + eBPF 通用运行时平台:基于 libbpf 和 WAMR

https://github.com/WebAssembly/WASI/issues/513