Mereka berhasil menjalankan Linux pada emulator RISC-V di VRChat

Beberapa hari lalu hasil percobaan dirilis organisasi berdasarkan peluncuran Kernel Linux dalam ruang virtual 3D dari game multipemain daring.

Eksperimen ini Itu dilakukan di VRChat yang memungkinkan memuat model 3D dengan shader mereka sendiri. Untuk mengimplementasikan ide yang dikandung, sebuah emulator berbasis arsitektur RISC-V dibuat yang dieksekusi di sisi GPU dalam bentuk pixel shader.

Tentang proyek

Emulator didasarkan pada implementasi dalam bahasa C, yang pembuatannya, pada gilirannya, menggunakan pengembangan emulator riscv-rust minimalis, yang pada gilirannya dikembangkan dalam bahasa Rust. Kode C yang disiapkan diterjemahkan ke dalam pixel shader dalam bahasa HLSL, cocok untuk dimuat ke dalam VRChat.

Emulator memberikan dukungan penuh untuk arsitektur set instruksi rv32imasu, unit kontrol memori SV32 dan satu set periferal minimal (UART dan pengatur waktu). Kemampuan yang disiapkan cukup untuk memuat kernel Linux 5.13.5 dan lingkungan baris perintah dasar BusyBox, yang dengannya Anda dapat berinteraksi langsung dari dunia virtual VRChat.

Sekitar Maret 2021, saya memutuskan untuk menulis emulator yang mampu menjalankan kernel Linux lengkap di VRChat. Karena keterbatasan yang melekat pada platform itu, alat yang dipilih harus menjadi shader. Dan setelah beberapa bulan bekerja, saya sekarang dengan bangga memperkenalkan emulator RISC-V CPU / SoC pertama di dunia (yang saya tahu) dalam shader piksel HLSL, yang mampu berjalan hingga 250 kHz (pada 2080 Ti) dan boot Linux 5.13.5 dengan dukungan MMU.

Emulator diimplementasikan dalam shader dalam bentuk tekstur dinamisnya sendiri (Unity Custom Render Texture), dilengkapi dengan skrip Udon yang disediakan untuk VRChat, yang digunakan untuk mengontrol emulator saat runtime.

Konten memori utama dan status prosesor dari sistem yang diemulasi disimpan sebagai tekstur dengan ukuran 2048 × 2048 piksel, sehingga mengoperasikan prosesor yang diemulasi pada 250 kHz. Selain Linux, Micropython juga bisa dijalankan di emulator.

Untuk menjalankan Linux saya pikir kita akan membutuhkan setidaknya 32 MiB memori utama (RAM), tapi mari kita aman dan membuat 64 - perbedaan kinerja tidak akan besar dan harus ada cukup VRAM.

Pada awalnya, perhatian utama kinerja adalah kecepatan clock. Artinya, berapa banyak siklus CPU yang dapat dieksekusi dalam satu frame.

Untuk mengatur penyimpanan data gigih dengan dukungan untuk membaca dan menulis, trik yang terkait dengan menggunakan objek Kamera yang ditautkan ke area persegi panjang digunakan dihasilkan oleh shader dan mengarahkan output dari tekstur yang diberikan ke input shader. Karena itu, Setiap piksel yang ditulis selama eksekusi pixel shader dapat dibaca dengan memproses frame berikutnya.

Ketika pixel shader diterapkan, contoh shader yang terpisah akan diaktifkan secara paralel untuk setiap piksel dalam tekstur.

Fitur ini secara signifikan memperumit implementasi dan memerlukan koordinasi terpisah dari keadaan seluruh sistem yang diemulasi dan perbandingan posisi piksel yang diproses dengan keadaan konten CPU atau RAM dari sistem yang ditiru yang dikodekan di dalamnya (setiap piksel dapat mengkodekan 128 bit informasi).

Dalam hal ini, kode shader memerlukan penyertaan sejumlah besar pemeriksaan, untuk menyederhanakan implementasi yang digunakan perl preprocessor perlpp.

Bagi mereka yang sedang tertarik dengan spesifikasinya disebutkan bahwa:

  • kodenya ada di GitHub
  • 64 MiB RAM dikurangi status CPU disimpan dalam tekstur format integer 2048 × 2048 piksel (128 bpp)
  • Tekstur render kustom kesatuan dengan buffer swapping memungkinkan status encoding / decoding antar frame
  • pixel shader digunakan untuk emulasi karena komputasi dan shader UAV tidak didukung oleh VRChat

Akhirnya jika Anda tertarik untuk mengetahui lebih banyak tentangnya, Anda dapat memeriksa detailnya Di tautan berikut.


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.