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

Acum câteva zile rezultatele unui experiment au fost publicate organizație bazată pe lansarea programului Kernel Linux în spațiul virtual 3D a unui joc multiplayer online.

Acest experiment S-a făcut pe VRChat care permite încărcarea modelelor 3D cu propriile lor umbrere. 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-rug, care la rândul său este dezvoltat în limbajul Rust. Codul C pregătit este tradus într-un pixel shader în limba HLSL, adecvat pentru încărcare în VRChat.

Emulatorul oferă suport complet pentru arhitectura setului de instrucțiuni rv32imasu, unitatea de control a memoriei SV32 și un set minim de periferice (UART și temporizator). Capacitățile pregătite sunt suficiente pentru a încărca nucleul Linux 5.13.5 și mediul de bază al liniei de comandă BusyBox, cu care puteți interacționa direct din lumea virtuală 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ă sunt acum mândru să introduc primul emulator RISC-V CPU / SoC din lume (pe care îl ș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 unei proprii texturi dinamice (Unity Custom Render Texture), completată de scripturile Udon furnizate pentru VRChat, care sunt folosite pentru a controla emulatorul în timpul rulării.

Conținutul principal de memorie și starea procesorului sistemului emulat sunt salvate ca o textură cu dimensiunea de 2048 × 2048 pixeli, operând astfel procesorul emulat 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 siguri și să facem 64 - diferența de performanță nu va fi mare și ar trebui să existe suficient VRAM.

La început, principala preocupare de performanță a fost viteza de ceas. Adică, câte cicluri CPU pot fi executate într-un singur cadru.

Pentru a organiza stocarea datelor persistent cu suport pentru citit și scris, este folosit un truc legat de utilizarea unui obiect Cameră legat de o zonă dreptunghiulară generat de umbră și direcționând ieșirea texturii redate către intrarea în umbră. Prin urmare, Orice pixel scris în timpul execuției unui pixel shader poate fi citit prin procesarea următorului cadru.

Când sunt aplicate umbrere de pixeli, o instanță separată a umbrelor este declanșată în paralel pentru fiecare pixel din textură.

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

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

Pentru cei care sunt interesat de specificații se menționează că:

  • codul este pe GitHub
  • 64 MiB RAM minus starea procesorului este stocat într-o textură de format întreg de 2048 × 2048 pixeli (128 bpp)
  • Textura de randare personalizată Unity cu schimbarea bufferului permite codarea / decodarea stării între cadre
  • un pixel shader este utilizat pentru emulare ca calcul și umbrele UAV nu sunt acceptate de VRChat

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


Conținutul articolului respectă principiile noastre de etică editorială. Pentru a raporta o eroare, faceți clic pe aici.

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.