Au reușit să ruleze Linux pe un emulator RISC-V pe VRChat

Acum câteva zile au fost făcute publice rezultatele unui experiment de organizare pe baza lansării Nucleul Linux în spațiul virtual 3D a unui joc multiplayer online.

Acest experiment A fost realizat pe VRChat, care vă permite să încărcați modele 3D cu propriile lor shadere. Pentru a implementa ideea concepută, a fost creat un emulator bazat pe arhitectura RISC-V care este executat pe partea GPU sub forma unui pixel shader.

Despre proiect

Emulatorul se bazează pe implementarea în limbajul C, a cărui creație, la rândul său, a folosit dezvoltările emulatorului minimalist riscv-rust care la rândul său este dezvoltat în limbajul Rust. Codul C pregătit este tradus într-un pixel shader în limbajul HLSL, potrivit pentru încărcare în VRChat.

Emulatorul oferă suport complet pentru arhitectura setului de instrucțiuni rv32imasu, Unitate de control al memoriei SV32 și un set minim de periferice (UART și temporizator). Capacitățile pregătite sunt suficiente pentru a încărca kernel-ul Linux 5.13.5 și mediul de bază de linie de comandă BusyBox, cu care puteți interacționa direct din lumea virtuală a VRChat.

În jurul lunii martie 2021, am decis să scriu un emulator capabil să ruleze un kernel Linux complet în VRChat. Datorită limitărilor inerente ale acelei platforme, instrumentul ales trebuia să fie un shader. Și după câteva luni de muncă, acum sunt mândru să prezint primul emulator CPU/SoC RISC-V din lume (de care știu) într-un pixel shader HLSL, capabil să ruleze până la 250 kHz (pe un 2080 Ti) și porniți Linux 5.13.5 cu suport MMU.

Emulatorul este implementat în shader sub forma propriei texturi dinamice (Unity Custom Render Texture), completată de scripturile Udon furnizate pentru VRChat, care sunt folosite pentru a controla emulatorul în timpul execuției.

Conținutul memoriei principale și starea procesorului sistemului emulat sunt salvate sub forma unei texturi cu o dimensiune de 2048x2048 pixeli, astfel procesorul emulat funcționează la 250 kHz. Pe lângă Linux, Micropython poate fi rulat și pe emulator.

Pentru a rula Linux, am crezut că vom avea nevoie de cel puțin 32 MiB de memorie principală (RAM), dar să fim în siguranță și să facem 64: diferența de performanță nu va fi mare și ar trebui să existe suficientă VRAM.

La început, principala problemă de performanță a fost viteza ceasului. Adică câte cicluri CPU pot fi executate pe un cadru.

Pentru a organiza stocarea datelor persistent cu suport pentru citire și scriere, se folosește un truc legat de utilizarea unui obiect Cameră legat de o zonă dreptunghiulară generat de shader și direcționând rezultatul texturii redate către intrarea shader-ului. Prin urmare, Orice pixel scris în timpul execuției unui pixel shader poate fi citit la randarea următorului cadru.

Când sunt aplicate pixel shaders, o instanță separată a shaderului este lansată în paralel pentru fiecare pixel al texturii.

Această caracteristică complică semnificativ implementarea și necesită coordonarea separată a stării întregului sistem emulat și compararea poziției pixelului procesat cu starea CPU sau conținutul RAM al sistemului emulat codificat în acesta (fiecare pixel poate codifica 128). biți de informații).

În acest caz, codul shader necesită includerea unui număr mare de verificări, pentru a simplifica implementarea cărora a fost folosit preprocesorul perl perlpp.

Pentru cei care sunt interesat de specificatii se mentioneaza ca:

  • codul este pe GitHub
  • 64 MiB de RAM minus starea procesorului sunt stocați într-o textură în format întreg de 2048x2048 pixeli (128 bpp)
  • Textura de randare personalizată Unity cu schimbarea tamponului permite starea de codificare/decodare între cadre
  • un pixel shader este utilizat pentru emulare, deoarece calcularea și shaderele UAV nu sunt acceptate în VRChat

În cele din urmă dacă sunteți interesat să aflați mai multe despre asta, puteți verifica detaliile În următorul link.


Fii primul care comenteaza

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.