Show HN: カーネル内の DOOM、または eBPF におけるファイバー
Show HN: DOOM in the kernel, or fibers in eBPF (ayles.github.io)
要約
Linux カーネルの eBPF (extended Berkeley Packet Filter) を使用して、古典的なゲーム DOOM を実行するという野心的なプロジェクトが紹介されています。当初は手動での作業や LLVM パスによる最適化を試みましたが、LLM の助けを借りて、DOOM だけでなく Lua、Llama2、さらには CPython までも eBPF 環境で動作させることに成功しました。
全文翻訳
しばらく前、Perforator(https://github.com/yandex/perforator)の最初のバージョンに取り組んでいた同僚がeBPFについて頻繁に話していたので、そのISA(命令セットアーキテクチャ)と制限について興味を持ちました。それは、妊娠検査薬上でDOOMを実行するという記事を読んだ頃でした。そこで、「eBPFを使ってLinuxカーネル内でDOOMを実行したらどうなるだろう?もちろん、いくつかの制限はあるだろうが、それでも可能なのではないか?」と考えました。
2024年頃から、私はこのプロジェクトに取り組み始めました。まず、DOOMをショーケースに必要な最小限のものに絞り込み、コードを単純化し、遭遇した最初の制限(関数数制限、再帰、メモリアクセス、チェック)をクリアしようとしました。当初は手作業でこれを試みましたが、それは非常に骨の折れる作業でした。そこで方向転換し、LLVMパスを使ってメモリアクセスを書き換えたり、ループを単純化・書き換えたりする作業の一部を行うようになりました。しかし、考慮すべき点はあまりにも多くありました。そして、時間の制約もあり、このプロジェクトは忘れ去られてしまいました。
しかし、数ヶ月前、「最近のLLMは非常に優秀なので、今回はもっと多くの手を借りて再挑戦してみよう」と思いました。メモリアクセスをどのように「仮想化」するか、ループをどのようにバウンド化するか、そして一般的に、そのようなマシン上でバウンドのないロジックをどのように実行するかについて、さまざまなアプローチを試しました。
DOOMが動作するようになったとき、私は夢中になりました。このアプローチは非常に「汎用的」だったので、他のものを実行しようとしないのは罪だと感じました。そして今、XDP(eXpress Data Path)のホットパスでLuaが動作し、softfloat(ソフトウェア浮動小数点演算)でLlama2が動作し、当初は1M(1メガバイト)のベリファイア予算に収まらなかったCPythonでさえ、freplaceのおかげで現在動作しています。
プログラムをより速く実行するため、統合を容易にするためには、まだ多くの作業がありますが、動作するサンプルはすでに存在します。