Retrogaming in de cloud: RetroArch op een GPU-server, gestreamd met Sunshine en Moonlight
Je verzameling retrogames op één plek, speelbaar vanaf je laptop, je telefoon of je tv, met overal dezelfde savegames: dat geeft een kleine cloudserver met GPU je. We installeerden RetroArch op een Linux-server met een Intel UHD 770 en zonder monitor, en streamden het met Sunshine (op de server) naar Moonlight (aan de kant van de speler). De GPU doet twee dingen: hij tekent het beeld, inclusief de CRT-shaders die oude games laten lijken zoals ze er op een beeldbuis-tv uitzagen, en hij codeert de videostream.
Gebruik je eigen, legaal verkregen games. Voor deze test gebruikten we alleen gratis homebrew-games, gedownload van de officiële pagina’s van hun makers: Tobu Tobu Girl (Game Boy, van Tangram Games, gratis uitgebracht met de broncode) en µCity (Game Boy Color, open source). Veel makers brengen op deze manier nieuwe games uit voor oude consoles, en je kunt ook je eigen cartridges en discs kopiëren met een dumper.
De resultaten in het kort
- Emulatie is het probleem niet: met V-Sync uit draaide RetroArch een Game Boy-game op 1.863 fps en een Game Boy Color-game op 1.807 fps op 1080p, ongeveer 30 keer de snelheid van de console.
- Bij CRT-shaders doet de GPU ertoe: met crt-royale, een van de zwaarste CRT-shaders, tekende RetroArch op 1080p nog ongeveer 255 fps, vier keer wat nodig is.
- Streamen kost weinig: 1080p 60 fps H.264 gecodeerd door de GPU, gemiddeld 4,6 tot 6,5 ms verwerking op de server tijdens het spelen (met of zonder shader), geen enkel frame verloren, en maar 13 tot 17% van één CPU-kern voor Sunshine.
- iGPU Start is genoeg voor 8- en 16-bitconsoles; kies iGPU Power als je ook zwaardere systemen speelt of meer marge wilt als andere servers de GPU gebruiken.
Testopstelling
| Onderdeel | Waarde |
|---|---|
| Server | Debian 13, Linux 7.3, Intel UHD 770 (gedeelde GPU), 4 vCPU, 8 GB RAM, geen monitor |
| Emulator | RetroArch 1.20.0 (Debian-pakketten), cores Gambatte (Game Boy) en mGBA (Game Boy Color) |
| Shaders | libretro-collectie glsl-shaders (crt-royale, crt-lottes), OpenGL-videodriver |
| Scherm | headless sway (Wayland) op 1920×1080, getekend door de GPU |
| Streaming | Sunshine 2026.914 op de server, Moonlight 6.2 op een Linux-client, H.264 1080p 60 fps, hardwaredecodering |
| Netwerk | client en server in hetzelfde datacenter: via internet komt de latentie van je verbinding erbij |
1. Een scherm voor een server die er geen heeft
Een cloudserver heeft geen monitor, dus geven we hem een virtuele. We gebruikten sway, een kleine
Wayland-desktop, in “headless”-modus: die maakt een scherm van 1920×1080 in het geheugen en tekent het
met de Intel-GPU. RetroArch draait er schermvullend op, en Sunshine neemt het direct op
(capture = wlr) en codeert het op de GPU (encoder = vaapi):
# ~/.config/sunshine/sunshine.conf
capture = wlr
encoder = vaapi
adapter_name = /dev/dri/renderD128
Sunshine vindt dan de hardware-encoders (h264_vaapi, hevc_vaapi). Streamen in AV1 is niet
beschikbaar op deze GPU: gebruik H.264 of HEVC in Moonlight. Vermijd Xvfb, het gebruikelijke “virtuele
scherm” voor X11: dat tekent alles met de CPU, en de GPU zou niet voor de shaders worden gebruikt.
2. Hoe snel is de emulatie?
Om te meten wat de server kan, zetten we V-Sync uit en ook de audiosynchronisatie, en lieten we RetroArch een vast aantal frames zo snel mogelijk draaien, schermvullend op 1080p. We klokten 600 en 3.600 frames en deelden het verschil, zodat de opstarttijd (laden, shaders compileren) niet meetelt.
| RetroArch, 1080p, V-Sync uit | Zonder shader | crt-royale | crt-lottes |
|---|---|---|---|
| Game Boy, Tobu Tobu Girl (Gambatte) | 1.863 fps | 257 fps | 80 tot 116 fps |
| Game Boy Color, µCity (mGBA) | 1.807 fps | 253 fps | niet gemeten |
De emulatie zelf kost bijna niets: deze consoles zijn piepklein voor een moderne processor. De CRT-shader is werk voor de GPU: die tekent elke pixel van het 1080p-scherm opnieuw, met de scanlines, het schaduwmasker en de gloed van een beeldbuis-tv. Zelfs met crt-royale blijft de server ruim boven de benodigde 60 fps. De twee runs met crt-lottes gaven verschillende resultaten (80 en 116 fps): de GPU is gedeeld, en andere testservers gebruikten hem op dat moment.
V-Sync uit is alleen om te meten. Om te spelen stel je RetroArch zo in dat het de eigen framerate van
de game volgt (“Sync to Exact Content Framerate”, vrr_runloop_enable = "true"): de game draait dan op
de snelheid van de console (59,73 Hz bij een Game Boy), en Moonlight toont hem vloeiend op je scherm.
3. Streamen met Moonlight: wat het kost
We startten elke game vanuit Moonlight (elke game is een Sunshine-”applicatie”, zie hieronder), speelden, en noteerden de prestatie-overlay van Moonlight en het CPU-gebruik van de server:
| Moonlight, 1080p 60 fps H.264 | Game, zonder shader | Game, crt-royale | RetroArch-menu |
|---|---|---|---|
| Verwerking op de server (opname + codering), gemiddeld | 4,6 tot 6,5 ms | 5,8 tot 6,4 ms | 12,2 ms |
| Verwerking op de server, min / max | 4,3 / 7,1 ms | 4,2 / 11,7 ms | 4,5 / 21,5 ms |
| Frames verloren door het netwerk of door jitter | 0% | 0% | 0% |
| Decodeertijd op de client | 0,20 tot 0,23 ms | 0,21 tot 0,24 ms | 0,29 ms |
| CPU van Sunshine (aandeel van één kern) | 14% | 17% | niet gemeten |
| CPU van RetroArch (aandeel van één kern) | 4% | 6% | niet gemeten |
De stream gebruikte 15 Mbit/s, de standaardwaarde van Sunshine voor 1080p. De encoder is een ander deel van de GPU dan het deel dat de shaders tekent: daarom vertraagt de CRT-shader de stream niet. Het menu van RetroArch, met zijn geanimeerde achtergrond, kost iets meer tijd om op te nemen dan een Game Boy-game. Je totale latentie hangt vooral af van je internetverbinding met de server (in Duitsland): een goede glasvezelverbinding in Europa voegt doorgaans 10 tot 30 ms toe.
4. Eén Sunshine-applicatie per game
Sunshine start een programma als Moonlight om een “applicatie” vraagt. We maakten er één voor het menu
van RetroArch en één per game, zodat een game direct vanuit Moonlight te starten is
(~/.config/sunshine/apps.json):
{
"name": "Tobu Tobu Girl (CRT)",
"cmd": "retroarch --appendconfig=/root/play.cfg --set-shader /root/glsl-shaders/crt/crt-royale.glslp -L /usr/lib/x86_64-linux-gnu/libretro/gambatte_libretro.so /root/roms/tobu.gb",
"auto-detach": "true",
"wait-all": "true"
}
play.cfg bevat de paar RetroArch-instellingen die ertoe doen om via Sunshine te spelen:
video_driver = "gl"
video_fullscreen = "true"
video_vsync = "false"
vrr_runloop_enable = "true"
video_scale_integer = "true"
video_shader_enable = "true"
pause_nonactive = "false"
audio_driver = "pulse"
config_save_on_exit = "false"
pause_nonactive = "false" voorkomt dat RetroArch pauzeert als het denkt de focus kwijt te zijn, en
config_save_on_exit = "false" voorkomt dat een test of een wijziging in het menu je instellingen
overschrijft. Sunshine maakt op de server een virtuele gamepad, toetsenbord en muis aan voor de speler in
Moonlight, zodat je eigen gamepad werkt alsof hij op de server is aangesloten. Liever een gamebibliotheek
zoals op een console, met hoesafbeeldingen? Dan kun je ES-DE (EmulationStation Desktop Edition)
toevoegen als extra Sunshine-applicatie bovenop RetroArch; in deze test hebben we het niet gebruikt.
5. iGPU Start of iGPU Power?
Voor 8- en 16-bitconsoles is iGPU Start (2 vCPU, 8 GB RAM, € 14,99 per maand excl. btw) genoeg: RetroArch en Sunshine samen gebruikten in onze test ongeveer een kwart van één kern. iGPU Power (4 vCPU, 14 GB RAM, twee keer het GPU-aandeel van Start, € 29,99 per maand excl. btw) is de betere keuze als je zware CRT-shaders gebruikt, veeleisendere systemen speelt, of wilt dat de stream stabiel blijft als andere servers de GPU tegelijk gebruiken.
6. Zo zet je het op een Linux GPU-server
Liever meteen spelen? Vraag het per e-mail bij je bestelling (contact@linuxgpu.eu): we kunnen de server leveren met alles hieronder al geïnstalleerd en ingesteld (virtueel scherm, RetroArch, shaders, Sunshine). Jij installeert alleen nog Moonlight op je computer, telefoon of tv-box, koppelt het en voegt je eigen games toe.
Zelf doen:
- Installeer RetroArch en de cores:
apt install retroarch libretro-gambatte libretro-mgba libretro-nestopia, en de shaders:git clone https://github.com/libretro/glsl-shaders. - Start een headless sway-sessie op de GPU (
WLR_BACKENDS=headless WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 sway) met een uitvoer van 1920×1080. - Installeer Sunshine (Debian 13-pakket uit de officiële GitHub-releases), met de configuratie hierboven, en voeg één applicatie per game toe.
- Open de webinterface van Sunshine via een SSH-tunnel
(
ssh -L 47990:localhost:47990 you@your-server), maak het Sunshine-account aan en koppel Moonlight (Windows, macOS, Linux, Android, iOS, tv-boxen). - Kopieer je games naar de server (
scp), en speel.
Je server is standaard bereikbaar via IPv6. Heeft je verbinding geen IPv6, voeg dan de optie dedicated IPv4 toe, of maak verbinding via Tailscale zonder een poort te openen: zie overal op je cloudserver spelen met Moonlight en Tailscale.
Voor pc-games, lees Windows 11 in de cloud met Sunshine en Moonlight en Windows-games draaien op een Linux GPU-server met Wine.
Systemen die direct klaar zijn om te gamen. De systemen die we standaard installeren zijn hier al op ingericht: Debian 13 met een recente kernel (7.3), de Intel-GPU-drivers en Mesa (OpenGL, Vulkan, VA-API-videocodering), en Windows 11 (optie) met de grafische driver van Intel en Extern bureaublad dat op de GPU rendert. Geen drivers zoeken: installeer je game en Sunshine, en speel.
Probeer het
Bekijk de abonnementen: iGPU Start kost € 14,99 en iGPU Power € 29,99 per maand excl. btw.