Sono riusciti a eseguire Linux su un emulatore RISC-V su VRChat

Diversi giorni fa sono stati rilasciati i risultati di un esperimento organizzazione basata sul lancio del Kernel Linux all'interno dello spazio virtuale 3D di un gioco multiplayer online.

Questo esperimento È stato fatto su VRChat che consente di caricare modelli 3D con i propri shader. Per implementare l'idea concepita, è stato creato un emulatore basato sull'architettura RISC-V che viene eseguito lato GPU sotto forma di pixel shader.

Sul progetto

L'emulatore si basa sull'implementazione in linguaggio C, la cui creazione, a sua volta, ha utilizzato gli sviluppi dell'emulatore minimalista riscv-rust, che a sua volta è sviluppato nel linguaggio Rust. Il codice C preparato viene tradotto in un pixel shader in linguaggio HLSL, adatto al caricamento in VRChat.

L'emulatore fornisce pieno supporto per l'architettura del set di istruzioni rv32imasu, l'unità di controllo della memoria SV32 e un set minimo di periferiche (UART e timer). Le funzionalità predisposte sono sufficienti per caricare il kernel Linux 5.13.5 e l'ambiente base a riga di comando BusyBox, con cui è possibile interagire direttamente dal mondo virtuale VRChat.

Intorno a marzo 2021, ho deciso di scrivere un emulatore in grado di eseguire un kernel Linux completo in VRChat. A causa delle limitazioni intrinseche di quella piattaforma, lo strumento scelto doveva essere uno shader. E dopo alcuni mesi di lavoro sono ora orgoglioso di presentare il primo emulatore CPU / SoC RISC-V al mondo (che io conosca) in un pixel shader HLSL, in grado di funzionare fino a 250 kHz (su un 2080 Ti) e avviare Linux 5.13.5 con supporto MMU.

L'emulatore è implementato nello shader sotto forma di una propria trama dinamica (Unity Custom Render Texture), integrata dagli script Udon forniti per VRChat, che vengono utilizzati per controllare l'emulatore in fase di esecuzione.

Il contenuto della memoria principale e lo stato del processore del sistema emulato vengono salvati come una trama con una dimensione di 2048 × 2048 pixel, facendo funzionare così il processore emulato a 250 kHz. Oltre a Linux, Micropython può essere eseguito anche sull'emulatore.

Per eseguire Linux ho pensato che avremmo avuto bisogno di almeno 32 MiB di memoria principale (RAM), ma andiamo sul sicuro e facciamo 64: la differenza di prestazioni non sarà grande e dovrebbe esserci abbastanza VRAM.

All'inizio, la principale preoccupazione per le prestazioni era la velocità di clock. Cioè, quanti cicli della CPU possono essere eseguiti in un frame.

Per organizzare l'archiviazione dei dati persistente con supporto per la lettura e la scrittura, viene utilizzato un trucco relativo all'utilizzo di un oggetto Camera collegato a un'area rettangolare generato dallo shader e indirizzando l'output della texture renderizzata all'input dello shader. Perciò, Qualsiasi pixel scritto durante l'esecuzione di un pixel shader può essere letto elaborando il fotogramma successivo.

Quando vengono applicati i pixel shader, viene attivata un'istanza separata dello shader in parallelo per ogni pixel nella texture.

Questa caratteristica complica notevolmente l'implementazione e richiede un coordinamento separato dello stato dell'intero sistema emulato e il confronto della posizione del pixel elaborato con lo stato del contenuto della CPU o della RAM del sistema emulato codificato in esso (ogni pixel può codificare 128 bit di informazione).

In questo caso, il codice dello shader richiede l'inclusione di un gran numero di controlli, per semplificare l'implementazione del quale è stato utilizzato il preprocessore perl perlpp.

Per quelli che lo sono interessato alle specifiche si dice che:

  • il codice è su GitHub
  • 64 MiB di RAM meno lo stato della CPU sono memorizzati in una trama in formato intero da 2048 × 2048 pixel (128 bpp)
  • La texture di rendering personalizzata Unity con lo scambio del buffer consente lo stato di codifica/decodifica tra i fotogrammi
  • un pixel shader viene utilizzato per l'emulazione poiché gli shader di calcolo e UAV non sono supportati da VRChat

Infine se sei interessato a saperne di più, puoi controllare i dettagli nel seguente link


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.