TGViewer
Технологический Болт Генона Технологический Болт Генона @tech_b0lt_genona · 9.81K subscribers
Post #7060 1.85K

Forwarded from commit -m "better"

https://ayles.github.io/doom-in-kernel/

Коллеги (на этот раз действительно коллеги!) подогнали прекрасное - Doom, на #eBPF, в ядре Linux.

"Прекрасное" потому что идет наперекор тому, как пытается работать eBPF.

eBPF, для каждой загружаемой программы, пытается доказать, что программа не зависнет, и что программа не ездит по памяти.

Второе, допустим, просто, поколения программистов вычистили исходники Doom так, что игра работает и без проездов.

Первое - сложно, и чуваки поступили, на мой вкус, весьма #изящно!

Они запилили свой компилятор поверх LLVM.

Он режет обычный C-код на "регионы" - куски без сложных циклов и вызовов. Регион обрывается на каждом вызове функции, возврате, неудобном обратном ребре цикла или yield. В конце он сохраняет state в память, и возвращает номер следующего региона.

Регионы гоняет маленький диспетчер из трёх вложенных ограниченных циклов: 32x2048x64, около 4*10^6 регионов за один вызов. Если бюджет кончился, программа возвращает "не доделано" с номером продолжения, и userspace вызывает её снова.

Ну а верификатор доказывает завершение не DOOM, а очередного региона и диспетчера.

И он может это сделать, потому что видит набор кусков, каждый из которых заканчивается обычным return, плюс цикл с константной границей. Прыжков "регион 18 -> регион 42" в графе управления нет: это число, записанное в память. Рекурсия, глубокие вызовы и длинные циклы существуют только во время исполнения, как последовательность этих чисел.

Я бы тут поинтересовался у коллег, почему того же самого нельзя было добиться source трансформацией кода, превратив его в async код через с++ корутины, трансформация ровно та же самая получается - куча блоков с return, и цикл dispatch над ними сверху, но сути это не меняет.
ayles DOOM in the kernel, or fibers in eBPF How a hand-ported DOOM, verifier tricks, and a slow virtual machine led to a compiler built around regions and fibers.
  • ❤ 14
  • 🔥 4
  • 😁 2
More from @tech_b0lt_genona
  1. Oct 6, 2026Инженер из NVIDIA протестировал уровень задержек при использовании Wayland и X.Org https:/…
  2. Oct 5, 2026https://news.ycombinator.com/item?id=49861047
  3. Oct 5, 2026Зацените бут меню в Flipper One. По сути это маленький линукс, который грузится в Falcon M…
  4. Oct 5, 2026РКН начал блокировать packagist.org https://habr.com/ru/news/1090568/ на Habr уже мелькали…
  5. Oct 5, 2026Открытка для @pigPeter 🌝 Google временно заморозила программу вознаграждения за поиск уяз…
  6. Oct 5, 2026В предыдущих частях https://t.me/tech_b0lt_Genona/6742
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →