Van aconseguir executar Linux en un emulador RISC-V a VRChat

Ja fa diversos dies es van donar a conèixer els resultats d'un experiment d'organització basat en el llançament de l' Kernel de Linux dins de l'espai virtual 3D d'un joc multijugador en línia.

aquest experiment es va realitzar sobre VRChat el qual que permet carregar models 3D amb els seus propis shaders. Per implementar la idea concebuda, es va crear un emulador basat en l'arquitectura RISC-V el qual és executat en el costat de la GPU en forma d'un ombreig de píxels.

Sobre el projecte

L'emulador es basa en la implementació en el llenguatge C, la creació, al seu torn, va utilitzar els desenvolupaments de l'emulador minimalista riscv-rust el qual per la seva banda és desenvolupat en el llenguatge Rust. El codi C preparat es tradueix a un ombreig de píxels en el llenguatge HLSL, adequat per carregar en VRChat.

l'emulador proporciona suport complet per a l'arquitectura del conjunt d'instruccions rv32imasu, la unitat de control de memòria SV32 i un conjunt mínim de perifèrics (UART i temporitzador). Les capacitats preparades són suficients per carregar el nucli de Linux 5.13.5 i l'entorn de línia d'ordres bàsic de BusyBox, amb el qual pot interactuar directament des del món virtual de VRChat.

Al voltant de març de 2021, vaig decidir escriure un emulador capaç d'executar un Kernel Linux complet en VRChat. A causa de les limitacions inherents d'aquesta plataforma, l'eina escollida havia de ser un ombreig. I després d'uns mesos de treball, ara estic orgullós de presentar el primer emulador de CPU / SoC RISC-V de l'món (que jo sàpiga) en un ombreig de píxels HLSL, capaç d'executar fins a 250 kHz (en un 2080 Tu) i arrencar Linux 5.13.5 amb suport MMU.

L'emulador s'implementa en el ombreig en forma de la seva pròpia textura dinàmica (Unity Custom Render Texture), complementada pels scripts Udon proporcionats per VRChat, que s'utilitzen per controlar l'emulador en temps d'execució.

El contingut de la memòria principal i l'estat de l'processador de sistema emulat es guarden en forma de textura amb una mida de 2048 × 2048 píxels, amb la qual cosa el processador emulat funciona a 250 kHz. A més de Linux, Micropython també es pot executar en l'emulador.

Per executar Linux, vaig pensar que necessitaríem a el menys 32 MiB de memòria principal (RAM), però siguem assegurances i fem 64: la diferència de rendiment no serà gran i hauria d'haver suficient VRAM.

A del principi, la principal preocupació sobre el rendiment era la velocitat de el rellotge. És a dir, quants cicles de CPU es poden executar en un quadre.

Per organitzar l'emmagatzematge de dades persistents amb suport per a lectura i escriptura, s'usa un truc relacionat amb l'ús d'un objecte Camera vinculat a una àrea rectangular generada pel ombreig i dirigint la sortida de la textura renderitzada a l'entrada de l'ombreig. Per tant, qualsevol píxel escrit durant l'execució d'un ombreig de píxels es pot llegir a l'processar el següent fotograma.

Quan s'apliquen ombrejadors de píxels, es llança una instància separada de l'ombreig en paral·lel per a cada píxel de la textura.

Aquesta característica complica significativament la implementació i requereix una coordinació separada de l'estat de tot el sistema emulat i la comparació de la posició de l'píxel processat amb l'estat de la CPU o el contingut de la RAM de sistema emulat codificat en ell (cada píxel pot codificar 128 bits d'informació).

En aquest cas, el codi d'ombrejat requereix la inclusió d'una gran quantitat de comprovacions, per simplificar la implementació de la qual es va utilitzar el preprocessador perl perlpp.

Per als que estiguin interessats en les especificacions s'esmenta que:

  • el codi està en GitHub
  • 64 MiB de RAM menys l'estat de la CPU s'emmagatzemen en una textura de format sencer de 2048 × 2048 píxels (128 bpp)
  • La textura de renderitzat personalitzada d'Unity amb intercanvi de memòria intermèdia permet l'estat de codificació / descodificació entre quadres
  • s'utilitza un ombreig de píxels per l'emulació, ja que els ombrejadors de càlcul i UAV no són compatibles amb VRChat

Finalment si estàs interessat en poder conèixer més a l'respecte, Pots consultar els detalls en el següent enllaç.


Sigues el primer a comentar

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.