Mereka berjaya menjalankan Linux pada emulator RISC-V di VRChat

Beberapa hari yang lalu hasil percubaan dikeluarkan organisasi berdasarkan pelancaran Kernel Linux dalam ruang maya 3D permainan berbilang pemain dalam talian.

Percubaan ini Ia dilakukan pada VRChat yang memungkinkan memuatkan model 3D dengan shader mereka sendiri. Untuk menerapkan idea yang disusun, dibuat sebuah emulator berdasarkan seni bina RISC-V yang dilaksanakan di sisi GPU dalam bentuk pixel shader.

Mengenai projek itu

Emulator berdasarkan pelaksanaan dalam bahasa C, yang penciptaannya, pada gilirannya, menggunakan perkembangan emulator riscv-karat minimalis, yang seterusnya dikembangkan dalam bahasa Rust. Kod C yang disiapkan diterjemahkan ke dalam shader piksel dalam bahasa HLSL, sesuai untuk dimuat ke dalam VRChat.

Emulator memberikan sokongan penuh untuk seni bina set arahan rv32imasu, unit kawalan memori SV32 dan sekumpulan periferal minimum (UART dan pemasa). Keupayaan yang disiapkan cukup untuk memuatkan kernel Linux 5.13.5 dan persekitaran baris perintah asas BusyBox, dengan mana anda dapat berinteraksi secara langsung dari dunia maya VRChat.

Sekitar Mac 2021, saya memutuskan untuk menulis emulator yang mampu menjalankan kernel Linux penuh di VRChat. Oleh kerana batasan platform yang ada, alat yang dipilih harus menjadi shader. Dan setelah beberapa bulan bekerja, saya kini dengan bangga memperkenalkan emulator RISC-V CPU / SoC pertama di dunia (yang saya tahu) dalam shader piksel HLSL, mampu berjalan hingga 250 kHz (pada 2080 Ti) dan boot Linux 5.13.5 dengan sokongan MMU.

Emulator diimplementasikan dalam shader dalam bentuk tekstur dinamiknya sendiri (Unity Custom Render Texture), ditambah dengan skrip Udon yang disediakan untuk VRChat, yang digunakan untuk mengendalikan emulator pada waktu berjalan.

Kandungan memori utama dan keadaan pemproses sistem yang ditiru disimpan sebagai tekstur dengan ukuran 2048 × 2048 piksel, sehingga mengoperasikan pemproses yang ditiru pada 250 kHz. Selain Linux, Micropython juga dapat dijalankan di emulator.

Untuk menjalankan Linux, saya fikir kita memerlukan sekurang-kurangnya 32 MiB memori utama (RAM), tetapi mari kita selamat dan buat 64 - perbezaan prestasi tidak akan besar dan semestinya cukup VRAM.

Pada mulanya, perhatian utama prestasi adalah kelajuan jam. Maksudnya, berapa banyak siklus CPU yang dapat dijalankan dalam satu bingkai.

Untuk mengatur penyimpanan data berterusan dengan sokongan membaca dan menulis, muslihat yang berkaitan dengan menggunakan objek Kamera yang dihubungkan dengan kawasan segi empat tepat digunakan dihasilkan oleh shader dan mengarahkan output tekstur yang diberikan ke input shader. Oleh itu, Sebarang piksel yang ditulis semasa pelaksanaan piksel shader dapat dibaca dengan memproses bingkai berikutnya.

Apabila shader pixel diterapkan, contoh shader yang terpisah ditembakkan secara selari untuk setiap pixel dalam tekstur.

Ciri ini menyulitkan pelaksanaan dan memerlukan koordinasi yang terpisah dari keadaan keseluruhan sistem yang ditiru dan perbandingan kedudukan piksel yang diproses dengan keadaan CPU atau kandungan RAM dari sistem yang ditiru yang dikodkan di dalamnya (setiap piksel dapat menyandikan 128 bit maklumat).

Dalam kes ini, kod shader memerlukan penyertaan sejumlah besar pemeriksaan, untuk mempermudah pelaksanaan yang digunakan untuk perlpp prosesor perl.

Bagi mereka yang berminat dengan spesifikasi disebutkan bahawa:

  • kodnya ada di GitHub
  • 64 MiB RAM tolak keadaan CPU disimpan dalam tekstur format integer 2048 × 2048 piksel (128 bpp)
  • Tekstur render khusus Unity dengan pertukaran buffer membolehkan keadaan pengekodan / penyahkodan antara bingkai
  • shader pixel digunakan untuk ditiru sebagai compute dan shader UAV tidak disokong oleh VRChat

Akhirnya sekiranya anda berminat untuk mengetahui lebih lanjut mengenainya, anda boleh menyemak perinciannya Dalam pautan berikut.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.