Ils ont réussi à exécuter Linux sur un émulateur RISC-V sur VRChat

Il y a plusieurs jours les résultats d'une expérience ont été publiés organisation fondée sur le lancement de la Noyau Linux dans l'espace virtuel 3D d'un jeu multijoueur en ligne.

Cette expérience Cela a été fait sur VRChat qui permet de charger des modèles 3D avec leurs propres shaders. Pour mettre en œuvre l'idée conçue, un émulateur basé sur l'architecture RISC-V a été créé qui est exécuté côté GPU sous la forme d'un pixel shader.

Sobre el projet

L'émulateur est basé sur l'implémentation en langage C, dont la création, à son tour, a utilisé les développements de l'émulateur minimaliste riscv-rust, qui à son tour est développé dans le langage Rust. Le code C préparé est traduit dans un pixel shader en langage HLSL, adapté au chargement dans VRChat.

L'émulateur fournit un support complet pour l'architecture du jeu d'instructions rv32imasu, l'unité de contrôle de la mémoire SV32 et un ensemble minimal de périphériques (UART et minuterie). Les capacités préparées sont suffisantes pour charger le noyau Linux 5.13.5 et l'environnement de ligne de commande de base BusyBox, avec lesquels vous pouvez interagir directement depuis le monde virtuel VRChat.

Vers mars 2021, j'ai décidé d'écrire un émulateur capable d'exécuter un noyau Linux complet dans VRChat. En raison des limitations inhérentes à cette plate-forme, l'outil choisi devait être un shader. Et après quelques mois de travail, je suis maintenant fier de vous présenter le premier émulateur CPU / SoC RISC-V au monde (à ma connaissance) dans un pixel shader HLSL, capable de fonctionner jusqu'à 250 kHz (sur un 2080 Ti) et démarrez Linux 5.13.5 avec le support MMU.

L'émulateur est implémenté dans le shader sous la forme de sa propre texture dynamique (Unity Custom Render Texture), complétée par les scripts Udon fournis pour VRChat, qui permettent de contrôler l'émulateur à l'exécution.

Le contenu de la mémoire principale et l'état du processeur du système émulé sont enregistrés sous la forme d'une texture d'une taille de 2048 × 2048 pixels, faisant ainsi fonctionner le processeur émulé à 250 kHz. Outre Linux, Micropython peut également être exécuté sur l'émulateur.

Pour exécuter Linux, je pensais que nous aurions besoin d'au moins 32 Mo de mémoire principale (RAM), mais soyons prudents et faisons 64 - la différence de performances ne sera pas grande et il devrait y avoir suffisamment de VRAM.

Au début, le principal problème de performance était la vitesse d'horloge. C'est-à-dire combien de cycles CPU peuvent être exécutés dans une trame.

Pour organiser le stockage des données persistant avec support pour la lecture et l'écriture, une astuce liée à l'utilisation d'un objet Camera lié à une zone rectangulaire est utilisée généré par le shader et dirigeant la sortie de la texture rendue vers l'entrée du shader. Donc, Tout pixel écrit lors de l'exécution d'un pixel shader peut être lu en traitant la trame suivante.

Lorsque des pixel shaders sont appliqués, une instance distincte du shader est déclenchée en parallèle pour chaque pixel de la texture.

Cette fonctionnalité complique considérablement la mise en œuvre et nécessite une coordination séparée de l'état de l'ensemble du système émulé et une comparaison de la position du pixel traité avec l'état du contenu CPU ou RAM du système émulé qui y est codé (chaque pixel peut coder 128 bits de informations).

Dans ce cas, le code shader nécessite l'inclusion d'un grand nombre de vérifications, pour simplifier la mise en œuvre desquelles le préprocesseur perl perlpp a été utilisé.

Pour ceux qui sont intéressé par les spécifications il est mentionné que :

  • le code est sur GitHub
  • 64 Mo de RAM moins l'état du processeur sont stockés dans une texture au format entier de 2048 × 2048 pixels (128 bpp)
  • La texture de rendu personnalisée Unity avec échange de tampon permet l'encodage/décodage de l'état entre les images
  • un pixel shader est utilisé pour l'émulation car les shaders de calcul et UAV ne sont pas pris en charge par VRChat

Enfin si vous souhaitez en savoir plus, vous pouvez vérifier les détails dans le lien suivant.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.