Їм вдалося запустити Linux на емуляторі RISC-V на VRChat

Кілька днів тому були оприлюднені результати експерименту організації на основі запуску Ядро Linux у віртуальному просторі 3D багатокористувацької онлайн -гри.

Цей експеримент Це було зроблено на VRChat, який дозволяє завантажувати 3D -моделі власними шейдерами. Для реалізації задуманої ідеї був створений емулятор на основі архітектури RISC-V, який виконується на стороні графічного процесора у вигляді піксельного шейдера.

Про проект

Емулятор заснований на реалізації мовою C, створення якого, у свою чергу, використовувало розробки мінімалістичного емулятора riscv-rust, який, у свою чергу, розроблений мовою Rust. Підготовлений код C перекладається на піксельний шейдер мовою HLSL, придатний для завантаження у VRChat.

Емулятор забезпечує повну підтримку архітектури набору інструкцій rv32imasu, блок управління пам'яттю SV32 і мінімальний набір периферійних пристроїв (UART і таймер). Підготовлених можливостей достатньо для завантаження ядра Linux 5.13.5 та базового середовища командного рядка BusyBox, з яким можна взаємодіяти безпосередньо з віртуального світу VRChat.

Приблизно в березні 2021 року я вирішив написати емулятор, здатний запускати повноцінне ядро ​​Linux у VRChat. З огляду на властиві цій платформі обмеження, вибраним інструментом мав стати шейдер. І після кількох місяців роботи я зараз з гордістю представляю перший у світі емулятор процесора / SoC RISC-V (який мені відомий) у піксельному шейдері HLSL, здатному працювати до 250 кГц (на 2080 Ti) і завантажте Linux 5.13.5 з підтримкою MMU.

Емулятор реалізований у шейдері у вигляді власної динамічної текстури (Unity Custom Render Texture), доповненої сценаріями Udon, передбаченими для VRChat, які використовуються для управління емулятором під час виконання.

Основний вміст пам'яті та стан процесора емульованої системи зберігаються у вигляді текстури розміром 2048 × 2048 пікселів, тим самим працюючи емульований процесор на частоті 250 кГц. Крім Linux, на емуляторі також можна запускати Micropython.

Для запуску Linux я думав, що нам знадобиться принаймні 32 Мбайт основної пам’яті (оперативної пам’яті), але давайте будемо безпечними та зробимо 64 - різниця в продуктивності не буде великою, і VRAM має бути достатньо.

Спочатку основною турботою про продуктивність була тактова частота. Тобто, скільки циклів процесора можна виконати в одному кадрі.

Для організації зберігання даних наполегливий з підтримкою читання та письма, використовується хитрість, пов'язана з використанням об'єкта Камера, пов'язаного з прямокутною областю генерується шейдером і спрямовує вихід рендерованої текстури на вхід шейдера. Тому, Будь -який піксель, записаний під час виконання піксельного шейдера, можна прочитати, обробивши наступний кадр.

Коли застосовуються піксельні шейдери, окремий екземпляр шейдера запускається паралельно для кожного пікселя текстури.

Ця функція значно ускладнює реалізацію і вимагає окремої координації стану всієї емульованої системи та порівняння положення обробленого пікселя зі станом процесора або вмісту оперативної пам’яті емульованої системи, закодованої в ньому (кожен піксель може кодувати 128 біт інформація).

У цьому випадку код шейдера вимагає включення великої кількості перевірок, для спрощення реалізації яких був використаний препроцесор perl perlpp.

Для тих, хто є цікавляться технічними характеристиками згадується, що:

  • код знаходиться на GitHub
  • 64 Мбайт оперативної пам’яті мінус стан процесора зберігається у цілочисельній текстурі формату 2048 × 2048 пікселів (128 bpp)
  • Користувацька текстура візуалізації Unity із заміною буфера дозволяє кодувати / декодувати стан між кадрами
  • піксельний шейдер використовується для емуляції, оскільки обчислювальні та безпілотні шейдери не підтримуються VRChat

В кінці кінців якщо вам цікаво дізнатись більше про це, Ви можете перевірити деталі У наступному посиланні.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.