Show HN: DOOM in the kernel, or fibers in eBPF
22 days ago
- eBPF 允许用户提供的程序在 Linux 内核中运行,通过验证器进行严格的安全检查,但像 DOOM 这样的复杂程序面临小栈、有限的调用深度、无递归或无界循环等限制。
- BPF Capsule 是一个编译器与运行时,能将大型 C 程序(例如 DOOM、Lua、SQLite、CPython)转换为符合上游 Linux eBPF 验证器及 JIT 所需形态,无需内核补丁。
- 该项目使用了指针消毒、基于区域的控制流(将代码划分为有界片段,称为区域)、带软件栈的纤程以及共享的 4 GiB 虚拟内存窗口等技术,使复杂程序能在内核中运行。
- 性能开销各异:整数密集型程序如 DOOM 和 SQLite 比原生慢 3-7 倍,而解释器如 CPython 以及浮点密集型代码如 llama2.c 则可能因区域边界和缺乏 FPU 而慢 15-60 倍。
- 该集成设计用于压力测试而非实际使用——DOOM 接受用户提供的 WAD 文件和键盘输入,产生帧缓冲,用户空间可直接从共享内存读取。