BPF Capsule - Запуск DOOM и сложных C-программ внутри eBPF
Show HN: DOOM in the kernel, or fibers in eBPF
BPF Capsule — это компилятор и среда выполнения, позволяющие запускать большие C, C++ и Rust-программы внутри обычного eBPF без патчей ядра. Проект демонстрирует DOOM, полностью работающий в BPF JIT: игровая логика и рендеринг выполняются за один вызов BPF. Capsule преобразует код в форму, которую принимает стандартный верификатор Linux, открывая путь для сложной логики в ядре — парсинга пакетов, сбора статистики и даже Lua, Python, SQLite и llama2.c.
DOOM не должен работать внутри eBPF. Linux обязан отклонить такую программу ещё до выполнения первой инструкции. И всё же немодифицированное ядро Linux принимает мой BPF-объект, проверяет его стандартным верификатором и запускает через стандартный JIT.
- tptacek
Здесь столько хорошего контента, жаль, что ты разнёс свою статью пескоструем ИИ. «Для верификатора это число с биографией» — вот где я свернул с дороги и угодил в кювет.
- markrwilliams
Пропустите первую половину статьи, чтобы узнать, как проект преодолел ограниченную среду выполнения eBPF-программ:
«В Linux 6.9 и новее (6.10 на arm64, где поддержка JIT для арены появилась позже) окно поддерживается bpf_arena... На ядрах без пригодной арены те же четыре гигабайта собираются из кусков по 4 МиБ... [в] отдельных map'ах глобальных данных.»
Эти map'ы имеют тип BPF_MAP_TYPE_ARRAY.
См. https://lwn.net/Articles/961941/ для обсуждения `bpf_arena`.
- phishin
Ценю соблюдение требования писать капсом.