HN 日本語サマリー

← 一覧へ戻る
プログラミング

Show HN: カーネル内の DOOM、または eBPF におけるファイバー

Show HN: DOOM in the kernel, or fibers in eBPF (ayles.github.io)

23 pointsby ayles6 コメント

要約

Linux カーネルの eBPF (extended Berkeley Packet Filter) を使用して、古典的なゲーム DOOM を実行するという野心的なプロジェクトが紹介されています。当初は手動での作業や LLVM パスによる最適化を試みましたが、LLM の助けを借りて、DOOM だけでなく Lua、Llama2、さらには CPython までも eBPF 環境で動作させることに成功しました。

全文翻訳

しばらく前、Perforator の最初のバージョン (<a href="https://github.com/yandex/perforator" rel="nofollow">https://github.com/yandex/perforator</a>) を開発していた同僚が eBPF について頻繁に話していたので、その ISA と制限について興味を持ちました。ちょうど妊娠検査薬上で DOOM が動作するという記事を読んだ頃だったので、「eBPF を使って Linux カーネル内で DOOM を実行したらどうなるだろう?もちろん、いくつかの制限はあるだろうが、それでも可能なのではないか?」と考えました。 2024年頃から、まず DOOM を最小限の表示に必要なものにまで削減し、コードを単純化して、遭遇する最初の制限(関数数制限、再帰、メモリアクセス、チェック)を通過させようと試行錯誤し始めました。手作業でやろうとしましたが、それは、まあ、骨の折れる作業でした。そこで方向転換し、LLVM パスを使ってメモリアクセスを書き換えたり、ループを単純化・書き換えたりといった作業の一部を行うようになりました。しかし、考慮すべき点はあまりにも多くありました。そして、時間の制約もあり、このプロジェクトは忘れられてしまいました。 しかし、数ヶ月前、「最近の LLM はかなり優秀なので、今回はもっと多くの手を借りて再挑戦してみよう」と思いました。メモリアクセスを「仮想化」する方法、ループを制限付きにする方法、そして一般的に、そのようなマシン上で制限のないロジックを実行する方法について、さまざまなアプローチを試しました。 DOOM が動作するようになったとき、私は夢中になりました。アプローチは非常に「汎用的」だったので、他のものも実行しないのは罪だと感じました。そして今、XDP のホットパスで Lua が動作し、Llama2 がソフトフロートで動作し、当初は 1M の検証者予算に収まらなかった CPython でさえ、freplace のおかげで現在動作しています。 プログラムをより速く実行したり、統合を容易にしたりするためには、まだ多くの作業が必要ですが、動作する例はすでに存在します。