Podařilo se jim spustit Linux na emulátoru RISC-V na VRChat

Před několika dny byly zveřejněny výsledky experimentu organizace založená na spuštění Linuxové jádro ve 3D virtuálním prostoru online hry pro více hráčů.

Tento experiment To bylo provedeno na VRChat, který umožňuje načítání 3D modelů s vlastními shadery. K implementaci koncipované myšlenky byl vytvořen emulátor založený na architektuře RISC-V, který je na straně GPU spuštěn ve formě pixelového shaderu.

O projektu

Emulátor je založen na implementaci v jazyce C, jehož tvorba zase využila vývoj minimalistického emulátoru riscv-rust, který je zase vyvinut v jazyce Rust. Připravený C kód je přeložen do pixelového shaderu v jazyce HLSL, vhodného pro načtení do VRChat.

Emulátor poskytuje plnou podporu pro architekturu instrukční sady rv32imasu, řídicí jednotka paměti SV32 a minimální sadu periferií (UART a časovač). Připravené schopnosti jsou dostatečné k načtení linuxového jádra 5.13.5 a základního prostředí příkazového řádku BusyBox, se kterým můžete komunikovat přímo z virtuálního světa VRChat.

Kolem března 2021 jsem se rozhodl napsat emulátor schopný spouštět plné linuxové jádro ve VRChat. Vzhledem k inherentním omezením této platformy musel být zvolený nástroj shaderem. A po několika měsících práce jsem nyní hrdý na to, že mohu představit první emulátor RISC-V CPU / SoC na světě (o kterém vím) v pixelovém shaderu HLSL, který dokáže běžet až 250 kHz (na 2080 Ti) a boot Linux 5.13.5 s podporou MMU.

Emulátor je v shaderu implementován ve formě vlastní dynamické textury (Unity Custom Render Texture), doplněné skripty Udon poskytovanými pro VRChat, které slouží k ovládání emulátoru za běhu.

Hlavní obsah paměti a stav procesoru emulovaného systému jsou uloženy jako textura o velikosti 2048 × 2048 pixelů, čímž provozují emulovaný procesor na 250 kHz. Kromě Linuxu lze na emulátoru spustit i Micropython.

K provozu Linuxu jsem si myslel, že budeme potřebovat alespoň 32 MiB hlavní paměti (RAM), ale buďme v bezpečí a vytvořme 64 - rozdíl ve výkonu nebude velký a VRAM by mělo být dost.

Zpočátku byla hlavním problémem výkonu rychlost hodin. To znamená, kolik cyklů CPU lze provést v jednom rámci.

Organizovat ukládání dat vytrvalý s podporou čtení a psaní, používá se trik související s použitím objektu Camera spojeného s obdélníkovou oblastí generovaný shaderem a směrující výstup vykreslené textury na vstup shaderu. Proto, Každý pixel zapsaný během provádění pixelového shaderu lze přečíst zpracováním dalšího rámečku.

Když jsou použity pixelové shadery, spustí se paralelně pro každý pixel v textuře samostatná instance shaderu.

Tato funkce výrazně komplikuje implementaci a vyžaduje samostatnou koordinaci stavu celého emulovaného systému a porovnání polohy zpracovávaného pixelu se stavem obsahu CPU nebo RAM emulovaného systému v něm zakódovaného (každý pixel může kódovat 128 bitů informace).

V tomto případě kód shaderu vyžaduje zahrnutí velkého počtu kontrol, aby se zjednodušila implementace, při které byl použit perlpp preprocesoru perl.

Pro ty, kteří jsou zajímají ho specifikace uvádí se, že:

  • kód je na GitHubu
  • 64 MiB RAM minus stav CPU je uložen v celočíselném formátu 2048 × 2048 pixelů (128 bpp)
  • Unity custom render texture with swapping buffer allows encoding / decoding state between frames
  • pro emulaci se používá výpočetní shader a VRChat nepodporuje shadery UAV

Konečně pokud máte zájem o tom vědět více, můžete zkontrolovat podrobnosti Na následujícím odkazu.


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.