Le retrogaming dans le cloud : RetroArch sur un serveur GPU, streamé avec Sunshine et Moonlight
Votre collection de jeux rétro au même endroit, jouable depuis votre ordinateur portable, votre téléphone ou votre télévision, avec les mêmes sauvegardes partout : c’est ce que permet un petit serveur cloud avec GPU. Nous avons installé RetroArch sur un serveur Linux équipé d’un Intel UHD 770 et sans écran, et l’avons streamé avec Sunshine (sur le serveur) vers Moonlight (côté joueur). Le GPU fait deux choses : il dessine l’image, y compris les shaders CRT qui redonnent aux vieux jeux l’aspect qu’ils avaient sur une télévision à tube, et il encode le flux vidéo.
Utilisez vos propres jeux, obtenus légalement. Pour ce test, nous n’avons utilisé que des jeux homebrew gratuits, téléchargés depuis les pages officielles de leurs auteurs : Tobu Tobu Girl (Game Boy, de Tangram Games, publié gratuitement avec son code source) et µCity (Game Boy Color, open source). Beaucoup d’auteurs publient ainsi de nouveaux jeux pour d’anciennes consoles, et vous pouvez aussi copier vos propres cartouches et disques avec un dumper.
Les résultats en bref
- L’émulation n’est pas le problème : V-Sync désactivée, RetroArch faisait tourner un jeu Game Boy à 1 863 fps et un jeu Game Boy Color à 1 807 fps en 1080p, soit environ 30 fois la vitesse de la console.
- C’est pour les shaders CRT que le GPU compte : avec crt-royale, l’un des shaders CRT les plus lourds, RetroArch dessinait encore environ 255 fps en 1080p, quatre fois ce qu’il faut.
- Le streaming coûte peu : H.264 1080p 60 fps encodé par le GPU, 4,6 à 6,5 ms de traitement sur le serveur en moyenne pendant le jeu (avec ou sans shader), aucune image perdue, et seulement 13 à 17 % d’un cœur CPU pour Sunshine.
- iGPU Start suffit pour les consoles 8 et 16 bits ; choisissez iGPU Power si vous jouez aussi à des systèmes plus lourds ou si vous voulez plus de marge quand d’autres serveurs utilisent le GPU.
Configuration du test
| Élément | Valeur |
|---|---|
| Serveur | Debian 13, Linux 7.3, Intel UHD 770 (GPU partagé), 4 vCPU, 8 Go de RAM, sans écran |
| Émulateur | RetroArch 1.20.0 (paquets Debian), cœurs Gambatte (Game Boy) et mGBA (Game Boy Color) |
| Shaders | collection libretro glsl-shaders (crt-royale, crt-lottes), pilote vidéo OpenGL |
| Écran | sway headless (Wayland) en 1920×1080, dessiné par le GPU |
| Streaming | Sunshine 2026.914 sur le serveur, Moonlight 6.2 sur un client Linux, H.264 1080p 60 fps, décodage matériel |
| Réseau | client et serveur dans le même datacenter : sur Internet, ajoutez la latence de votre connexion |
1. Un écran pour un serveur qui n’en a pas
Un serveur cloud n’a pas d’écran, nous lui en donnons donc un virtuel. Nous avons utilisé sway, un
petit bureau Wayland, en mode « headless » : il crée un écran 1920×1080 en mémoire et le dessine avec
le GPU Intel. RetroArch y tourne en plein écran, et Sunshine le capture directement (capture = wlr)
et l’encode sur le GPU (encoder = vaapi) :
# ~/.config/sunshine/sunshine.conf
capture = wlr
encoder = vaapi
adapter_name = /dev/dri/renderD128
Sunshine trouve alors les encodeurs matériels (h264_vaapi, hevc_vaapi). Le streaming en AV1 n’est
pas disponible sur ce GPU : utilisez H.264 ou HEVC dans Moonlight. Évitez Xvfb, l’« écran virtuel »
habituel pour X11 : il dessine tout avec le CPU, et le GPU ne serait pas utilisé pour les shaders.
2. Quelle vitesse d’émulation ?
Pour mesurer ce que le serveur peut faire, nous avons désactivé la V-Sync et la synchronisation audio, et demandé à RetroArch de faire tourner un nombre fixe d’images aussi vite que possible, en plein écran en 1080p. Nous avons chronométré 600 et 3 600 images et divisé la différence, pour que le temps de démarrage (chargement, compilation des shaders) ne compte pas.
| RetroArch, 1080p, V-Sync désactivée | Sans shader | crt-royale | crt-lottes |
|---|---|---|---|
| Game Boy, Tobu Tobu Girl (Gambatte) | 1 863 fps | 257 fps | 80 à 116 fps |
| Game Boy Color, µCity (mGBA) | 1 807 fps | 253 fps | non mesuré |
L’émulation elle-même ne coûte presque rien : ces consoles sont minuscules pour un processeur moderne. Le shader CRT est un travail pour le GPU : il redessine chaque pixel de l’écran 1080p avec les lignes de balayage, le masque et la lueur d’une télévision à tube. Même avec crt-royale, le serveur reste très au-dessus des 60 fps nécessaires. Les deux passages de crt-lottes ont donné des résultats différents (80 et 116 fps) : le GPU est partagé, et d’autres serveurs de test l’utilisaient à ce moment-là.
La V-Sync désactivée ne sert qu’à mesurer. Pour jouer, réglez RetroArch pour suivre la fréquence
propre au jeu (« Sync to Exact Content Framerate », vrr_runloop_enable = "true") : le jeu tourne alors
à la vitesse de la console (59,73 Hz pour une Game Boy), et Moonlight l’affiche de façon fluide sur
votre écran.
3. Le streaming avec Moonlight : ce qu’il coûte
Nous avons lancé chaque jeu depuis Moonlight (chacun est une « application » Sunshine, voir plus bas), joué, et relevé les statistiques de performance de Moonlight et l’utilisation CPU du serveur :
| Moonlight, 1080p 60 fps H.264 | Jeu, sans shader | Jeu, crt-royale | Menu RetroArch |
|---|---|---|---|
| Traitement côté serveur (capture + encodage), moyenne | 4,6 à 6,5 ms | 5,8 à 6,4 ms | 12,2 ms |
| Traitement côté serveur, min / max | 4,3 / 7,1 ms | 4,2 / 11,7 ms | 4,5 / 21,5 ms |
| Images perdues par le réseau ou la gigue | 0 % | 0 % | 0 % |
| Temps de décodage sur le client | 0,20 à 0,23 ms | 0,21 à 0,24 ms | 0,29 ms |
| CPU de Sunshine (part d’un cœur) | 14 % | 17 % | non mesuré |
| CPU de RetroArch (part d’un cœur) | 4 % | 6 % | non mesuré |
Le flux utilisait 15 Mbit/s, la valeur par défaut de Sunshine en 1080p. L’encodeur est une partie du GPU distincte de celle qui dessine les shaders : c’est pour cela que le shader CRT ne ralentit pas le flux. Le menu de RetroArch, avec son fond animé, prend un peu plus de temps à capturer qu’un jeu Game Boy. Votre latence totale dépendra surtout de votre connexion Internet jusqu’au serveur (en Allemagne) : une bonne connexion fibre en Europe ajoute en général 10 à 30 ms.
4. Une application Sunshine par jeu
Sunshine lance un programme quand Moonlight demande une « application ». Nous en avons créé une pour le
menu de RetroArch et une par jeu, pour qu’un jeu puisse être lancé directement depuis Moonlight
(~/.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 contient les quelques réglages de RetroArch qui comptent pour jouer à travers Sunshine :
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" empêche RetroArch de se mettre en pause quand il croit avoir perdu le focus,
et config_save_on_exit = "false" évite qu’un test ou un changement dans le menu écrase vos réglages.
Sunshine crée une manette, un clavier et une souris virtuels sur le serveur pour le joueur de Moonlight :
votre propre manette fonctionne comme si elle était branchée sur le serveur. Si vous préférez une
ludothèque façon console avec jaquettes, ES-DE (EmulationStation Desktop Edition) peut être ajouté
comme une autre application Sunshine par-dessus RetroArch ; nous ne l’avons pas inclus dans ce test.
5. iGPU Start ou iGPU Power ?
Pour les consoles 8 et 16 bits, iGPU Start (2 vCPU, 8 Go de RAM, 14,99 € HT par mois) suffit : RetroArch et Sunshine ensemble utilisaient environ un quart d’un cœur dans notre test. iGPU Power (4 vCPU, 14 Go de RAM, deux fois la part GPU de Start, 29,99 € HT par mois) est le meilleur choix si vous utilisez des shaders CRT lourds, jouez à des systèmes plus exigeants, ou voulez que le flux reste stable quand d’autres serveurs utilisent le GPU en même temps.
6. La mise en place sur un serveur Linux GPU
Envie d’un serveur prêt à jouer ? Demandez-le par e-mail à la commande (contact@linuxgpu.eu) : nous pouvons vous livrer le serveur avec tout ce qui suit déjà installé et réglé (écran virtuel, RetroArch, shaders, Sunshine). Il ne vous reste qu’à installer Moonlight sur votre ordinateur, téléphone ou box TV, à l’appairer et à ajouter vos propres jeux.
Pour le faire vous-même :
- Installez RetroArch et les cœurs :
apt install retroarch libretro-gambatte libretro-mgba libretro-nestopia, puis les shaders :git clone https://github.com/libretro/glsl-shaders. - Lancez une session sway headless sur le GPU (
WLR_BACKENDS=headless WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 sway) avec une sortie 1920×1080. - Installez Sunshine (paquet Debian 13 depuis ses releases GitHub officielles), avec la configuration ci-dessus, et ajoutez une application par jeu.
- Ouvrez l’interface web de Sunshine par un tunnel SSH
(
ssh -L 47990:localhost:47990 you@your-server), créez le compte Sunshine et appairez Moonlight (Windows, macOS, Linux, Android, iOS, box TV). - Copiez vos jeux sur le serveur (
scp), et jouez.
Votre serveur est joignable en IPv6 par défaut. Si votre connexion n’a pas d’IPv6, ajoutez l’option IPv4 dédiée, ou connectez-vous via Tailscale sans ouvrir de port : voir jouer sur votre serveur cloud depuis n’importe où avec Moonlight et Tailscale.
Pour les jeux PC, lisez Windows 11 dans le cloud avec Sunshine et Moonlight et faire tourner des jeux Windows sur un serveur Linux GPU avec Wine.
Des systèmes prêts pour le jeu dès l’installation. Les systèmes que nous installons par défaut sont déjà optimisés pour cela : Debian 13 avec un noyau récent (7.3), les pilotes GPU Intel et Mesa (OpenGL, Vulkan, encodage vidéo VA-API), et Windows 11 (option) avec le pilote graphique Intel et le Bureau à distance rendu sur le GPU. Aucun pilote à chercher : installez votre jeu et Sunshine, et jouez.
Essayer
Voir les offres : iGPU Start coûte 14,99 € et iGPU Power 29,99 € HT par mois.