Blog

Retro-Gaming in der Cloud: RetroArch auf einem GPU-Server, gestreamt mit Sunshine und Moonlight

Wir haben RetroArch auf einem Linux-Server ohne Bildschirm mit Intel UHD 770 betrieben und mit Sunshine zu Moonlight gestreamt: über 1.800 fps bei der Game-Boy-Emulation, etwa 255 fps mit dem CRT-Shader crt-royale in 1080p, 5 bis 7 ms Verarbeitung auf dem Server.

Retro-Gaming in der Cloud: RetroArch auf einem GPU-Server, gestreamt mit Sunshine und Moonlight

Ihre Sammlung von Retro-Spielen an einem Ort, spielbar auf Laptop, Smartphone oder Fernseher, mit denselben Spielständen überall: Das bietet ein kleiner Cloud-Server mit GPU. Wir haben RetroArch auf einem Linux-Server mit Intel UHD 770 und ohne Bildschirm installiert und mit Sunshine (auf dem Server) zu Moonlight (auf der Seite des Spielers) gestreamt. Die GPU erledigt zwei Aufgaben: Sie zeichnet das Bild, einschließlich der CRT-Shader, die alte Spiele so aussehen lassen wie auf einem Röhrenfernseher, und sie kodiert den Videostream.

Tobu Tobu Girl (kostenloses Game-Boy-Homebrew) in RetroArch mit dem Shader crt-royale, so wie es beim Moonlight-Client ankommt (5 Sekunden, Leistungsanzeige von Moonlight oben links).

Nutzen Sie Ihre eigenen, legal erworbenen Spiele. Für diesen Test haben wir nur kostenlose Homebrew-Spiele verwendet, heruntergeladen von den offiziellen Seiten ihrer Autoren: Tobu Tobu Girl (Game Boy, von Tangram Games, kostenlos mit Quellcode veröffentlicht) und µCity (Game Boy Color, Open Source). Viele Autoren veröffentlichen auf diese Weise neue Spiele für alte Konsolen, und Sie können auch Ihre eigenen Module und Discs mit einem Dumper kopieren.

Die Ergebnisse im Überblick

  • Die Emulation ist nicht das Problem: Mit ausgeschaltetem V-Sync lief ein Game-Boy-Spiel in RetroArch mit 1.863 fps und ein Game-Boy-Color-Spiel mit 1.807 fps in 1080p, etwa 30-mal so schnell wie die Konsole.
  • Bei CRT-Shadern kommt es auf die GPU an: Mit crt-royale, einem der aufwendigsten CRT-Shader, zeichnete RetroArch in 1080p noch etwa 255 fps, viermal so viel wie nötig.
  • Streamen kostet wenig: 1080p 60 fps H.264, von der GPU kodiert, im Schnitt 4,6 bis 6,5 ms Verarbeitung auf dem Server beim Spielen (mit oder ohne Shader), kein verlorenes Bild und nur 13 bis 17 % eines CPU-Kerns für Sunshine.
  • iGPU Start reicht für 8- und 16-Bit-Konsolen; wählen Sie iGPU Power, wenn Sie auch anspruchsvollere Systeme spielen oder mehr Reserve wollen, wenn andere Server die GPU nutzen.

Testaufbau

KomponenteWert
ServerDebian 13, Linux 7.3, Intel UHD 770 (geteilte GPU), 4 vCPU, 8 GB RAM, kein Bildschirm
EmulatorRetroArch 1.20.0 (Debian-Pakete), Cores Gambatte (Game Boy) und mGBA (Game Boy Color)
Shaderlibretro-Sammlung glsl-shaders (crt-royale, crt-lottes), OpenGL-Videotreiber
Bildschirmheadless sway (Wayland) in 1920×1080, von der GPU gezeichnet
StreamingSunshine 2026.914 auf dem Server, Moonlight 6.2 auf einem Linux-Client, H.264 1080p 60 fps, Hardware-Dekodierung
NetzwerkClient und Server im selben Rechenzentrum: Über das Internet kommt die Latenz Ihrer Verbindung hinzu

1. Ein Bildschirm für einen Server, der keinen hat

Ein Cloud-Server hat keinen Monitor, also geben wir ihm einen virtuellen. Wir haben sway verwendet, einen kleinen Wayland-Desktop, im „Headless”-Modus: Er erzeugt einen 1920×1080-Bildschirm im Speicher und zeichnet ihn mit der Intel-GPU. RetroArch läuft darauf im Vollbild, und Sunshine erfasst ihn direkt (capture = wlr) und kodiert ihn auf der GPU (encoder = vaapi):

# ~/.config/sunshine/sunshine.conf
capture = wlr
encoder = vaapi
adapter_name = /dev/dri/renderD128

Sunshine findet dann die Hardware-Encoder (h264_vaapi, hevc_vaapi). AV1-Streaming ist auf dieser GPU nicht verfügbar: Verwenden Sie H.264 oder HEVC in Moonlight. Vermeiden Sie Xvfb, den üblichen „virtuellen Bildschirm” für X11: Er zeichnet alles mit der CPU, und die GPU würde für die Shader nicht genutzt.

2. Wie schnell ist die Emulation?

Um zu messen, was der Server leisten kann, haben wir V-Sync ausgeschaltet und die Audiosynchronisation ebenfalls, und RetroArch eine feste Anzahl von Bildern so schnell wie möglich berechnen lassen, im Vollbild in 1080p. Wir haben 600 und 3.600 Bilder gestoppt und die Differenz geteilt, damit die Startzeit (Laden, Kompilieren der Shader) nicht mitzählt.

RetroArch, 1080p, V-Sync ausOhne Shadercrt-royalecrt-lottes
Game Boy, Tobu Tobu Girl (Gambatte)1.863 fps257 fps80 bis 116 fps
Game Boy Color, µCity (mGBA)1.807 fps253 fpsnicht gemessen
Balkendiagramm, logarithmische Skala: Bilder pro Sekunde von RetroArch in 1080p, V-Sync aus, nach Core und Shader
RetroArch in 1080p, V-Sync aus (logarithmische Skala): rund 1.800 fps ohne Shader, rund 255 fps mit crt-royale, 80 bis 116 fps mit crt-lottes. Die gestrichelte Linie markiert die 60 fps, die ein Spiel braucht.

Die Emulation selbst kostet fast nichts: Diese Konsolen sind für einen modernen Prozessor winzig. Der CRT-Shader ist Arbeit für die GPU: Er zeichnet jedes Pixel des 1080p-Bildschirms neu, mit den Rasterzeilen, der Lochmaske und dem Leuchten eines Röhrenfernsehers. Selbst mit crt-royale bleibt der Server weit über den nötigen 60 fps. Die beiden Durchläufe mit crt-lottes ergaben unterschiedliche Werte (80 und 116 fps): Die GPU ist geteilt, und andere Testserver nutzten sie zu diesem Zeitpunkt.

V-Sync aus dient nur zum Messen. Zum Spielen stellen Sie RetroArch so ein, dass es der eigenen Bildrate des Spiels folgt („Sync to Exact Content Framerate”, vrr_runloop_enable = "true"): Das Spiel läuft dann in der Geschwindigkeit der Konsole (59,73 Hz bei einem Game Boy), und Moonlight zeigt es flüssig auf Ihrem Bildschirm an.

Tobu Tobu Girl mit dem CRT-Shader crt-royale, vom Cloud-Server zu Moonlight gestreamt
Mit crt-royale: Rasterzeilen und Phosphorleuchten, von der GPU des Servers gezeichnet, dann kodiert und an Moonlight gesendet.

3. Streamen mit Moonlight: was es kostet

Wir haben jedes Spiel aus Moonlight gestartet (jedes ist eine Sunshine-„Anwendung”, siehe unten), gespielt und die Leistungsanzeige von Moonlight sowie die CPU-Last des Servers notiert:

Moonlight, 1080p 60 fps H.264Spiel, ohne ShaderSpiel, crt-royaleRetroArch-Menü
Verarbeitung auf dem Server (Erfassung + Kodierung), Mittel4,6 bis 6,5 ms5,8 bis 6,4 ms12,2 ms
Verarbeitung auf dem Server, min / max4,3 / 7,1 ms4,2 / 11,7 ms4,5 / 21,5 ms
Durch Netzwerk oder Jitter verlorene Bilder0 %0 %0 %
Dekodierzeit auf dem Client0,20 bis 0,23 ms0,21 bis 0,24 ms0,29 ms
CPU von Sunshine (Anteil eines Kerns)14 %17 %nicht gemessen
CPU von RetroArch (Anteil eines Kerns)4 %6 %nicht gemessen
Balkendiagramm: Verarbeitungszeit pro Bild auf dem Server beim Streaming, ohne Shader, mit crt-royale und im RetroArch-Menü
Verarbeitung pro Bild auf dem Server (Erfassung und Kodierung) laut Moonlight: in allen Fällen deutlich unter den 16,7 ms eines Bildes bei 60 fps.

Der Stream nutzte 15 Mbit/s, die Standardeinstellung von Sunshine für 1080p. Der Encoder ist ein anderer Teil der GPU als der, der die Shader zeichnet: Deshalb bremst der CRT-Shader den Stream nicht. Das RetroArch-Menü mit seinem animierten Hintergrund braucht etwas länger zum Erfassen als ein Game-Boy-Spiel. Ihre Gesamtlatenz hängt vor allem von Ihrer Internetverbindung zum Server (in Deutschland) ab: Eine gute Glasfaserverbindung in Europa fügt typischerweise 10 bis 30 ms hinzu.

Das RetroArch-Menü, mit Moonlight von einem Linux-GPU-Server ohne Bildschirm gestreamt
Das Hauptmenü von RetroArch in Moonlight, in 1080p und 60 fps. Alles wird mit dem Gamepad oder der Tastatur des Spielers gesteuert.

4. Eine Sunshine-Anwendung pro Spiel

Sunshine startet ein Programm, wenn Moonlight eine „Anwendung” anfordert. Wir haben eine für das Menü von RetroArch und eine pro Spiel angelegt, damit sich ein Spiel direkt aus Moonlight starten lässt (~/.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 enthält die wenigen RetroArch-Einstellungen, auf die es beim Spielen über Sunshine ankommt:

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" verhindert, dass RetroArch pausiert, wenn es glaubt, den Fokus verloren zu haben, und config_save_on_exit = "false" verhindert, dass ein Test oder eine Änderung im Menü Ihre Einstellungen überschreibt. Sunshine legt auf dem Server ein virtuelles Gamepad, eine Tastatur und eine Maus für den Moonlight-Spieler an, sodass Ihr eigenes Gamepad funktioniert, als wäre es am Server angeschlossen. Wenn Sie eine Spielebibliothek wie auf einer Konsole mit Coverbildern bevorzugen, lässt sich ES-DE (EmulationStation Desktop Edition) als weitere Sunshine-Anwendung über RetroArch hinzufügen; in diesem Test haben wir es nicht verwendet.

Tobu Tobu Girl ohne Shader, mit ganzzahliger Skalierung auf 1080p vergrößert, in Moonlight
Ohne Shader: das Game-Boy-Bild mit ganzzahliger Skalierung vergrößert (scharfe Pixel), in der eigenen Bildrate der Konsole (59,73 fps).
Titelbild von Tobu Tobu Girl, direkt aus Moonlight gestartet, mit Leistungsstatistik
Direkt aus der App-Liste von Moonlight gestartet: der Titelbildschirm des Spiels in 1080p und 60 fps.

5. iGPU Start oder iGPU Power?

Für 8- und 16-Bit-Konsolen reicht iGPU Start (2 vCPU, 8 GB RAM, 14,99 € netto pro Monat): RetroArch und Sunshine zusammen belegten in unserem Test etwa ein Viertel eines Kerns. iGPU Power (4 vCPU, 14 GB RAM, doppelter GPU-Anteil von Start, 29,99 € netto pro Monat) ist die bessere Wahl, wenn Sie aufwendige CRT-Shader verwenden, anspruchsvollere Systeme spielen oder möchten, dass der Stream stabil bleibt, wenn andere Server die GPU gleichzeitig nutzen.

6. Einrichtung auf einem Linux-GPU-Server

Lieber sofort losspielen? Fragen Sie bei der Bestellung per E-Mail danach (contact@linuxgpu.eu): Wir können Ihnen den Server mit allem Folgenden vorinstalliert und eingerichtet liefern (virtueller Bildschirm, RetroArch, Shader, Sunshine). Sie installieren nur noch Moonlight auf Ihrem Computer, Smartphone oder TV-Gerät, koppeln es und fügen Ihre eigenen Spiele hinzu.

So richten Sie es selbst ein:

  1. Installieren Sie RetroArch und die Cores: apt install retroarch libretro-gambatte libretro-mgba libretro-nestopia, und die Shader: git clone https://github.com/libretro/glsl-shaders.
  2. Starten Sie eine headless sway-Sitzung auf der GPU (WLR_BACKENDS=headless WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 sway) mit einer Ausgabe in 1920×1080.
  3. Installieren Sie Sunshine (Debian-13-Paket aus den offiziellen GitHub-Releases) mit der Konfiguration oben und legen Sie eine Anwendung pro Spiel an.
  4. Öffnen Sie die Weboberfläche von Sunshine über einen SSH-Tunnel (ssh -L 47990:localhost:47990 you@your-server), legen Sie das Sunshine-Konto an und koppeln Sie Moonlight (Windows, macOS, Linux, Android, iOS, TV-Boxen).
  5. Kopieren Sie Ihre Spiele auf den Server (scp) und spielen Sie.

Ihr Server ist standardmäßig per IPv6 erreichbar. Wenn Ihre Verbindung kein IPv6 hat, buchen Sie die Option dedizierte IPv4 dazu oder verbinden Sie sich über Tailscale, ohne einen Port zu öffnen: siehe mit Moonlight und Tailscale überall auf Ihrem Cloud-Server spielen.

Für PC-Spiele lesen Sie Windows 11 in der Cloud mit Sunshine und Moonlight und Windows-Spiele auf einem Linux-GPU-Server mit Wine.

Systeme, die ab Werk spielbereit sind. Die Systeme, die wir standardmäßig installieren, sind bereits dafür eingerichtet: Debian 13 mit aktuellem Kernel (7.3), den Intel-GPU-Treibern und Mesa (OpenGL, Vulkan, VA-API-Videokodierung) sowie Windows 11 (Option) mit dem Intel-Grafiktreiber und GPU-beschleunigtem Remotedesktop. Keine Treibersuche: Spiel und Sunshine installieren und loslegen.

Ausprobieren

Zu den Angeboten: iGPU Start kostet 14,99 € und iGPU Power 29,99 € netto pro Monat.