unRAID Gaming VM - Retour d'éxpérience


Recommended Posts

Salut,

Je m'intéresse aussi à me monter une CG dédié à une VM Windows (1060 6gb), mais je me posais la question sur la consommation en idle de la carte graphique lorsque la Vm est en "pause" ou non utilisé. Est ce que vous avez un retour là dessus :) ?

Merci d'avance, ça me décidera ou non à tenter l'exp ^^

Link to comment
18 minutes ago, Jeremy WATRELOS said:

Salut,

Je m'intéresse aussi à me monter une CG dédié à une VM Windows (1060 6gb), mais je me posais la question sur la consommation en idle de la carte graphique lorsque la Vm est en "pause" ou non utilisé. Est ce que vous avez un retour là dessus :) ?

Merci d'avance, ça me décidera ou non à tenter l'exp ^^

 

Justement j'ai testé en mesurant la consommation lorsque ma 3090 TI est en passthrough avec ma VM éteinte.

Puis quand elle n'est pas en passthrough et est donc gérée par le driver nvidia linux d'unraid qui permet de passer la carte en P8 (en veille quoi).

 

Et bien aucune différence ou alors marginale (2/3w).

 

Du coup maintenant je laisse la VM éteinte et j'ai un script WOL qui réveille la VM en cas de besoin. Comme le client Moonlight permet d'envoyer un magic packet c'est nickel.

  • Like 1
Link to comment
1 hour ago, hot22shot said:

 

Justement j'ai testé en mesurant la consommation lorsque ma 3090 TI est en passthrough avec ma VM éteinte.

Puis quand elle n'est pas en passthrough et est donc gérée par le driver nvidia linux d'unraid qui permet de passer la carte en P8 (en veille quoi).

 

Et bien aucune différence ou alors marginale (2/3w).

 

Du coup maintenant je laisse la VM éteinte et j'ai un script WOL qui réveille la VM en cas de besoin. Comme le client Moonlight permet d'envoyer un magic packet c'est nickel.

Merci pour ta réponse, ça donne envie d'essayer :) ! Dès que j'ai le temps je vais tenter l'expérience, tu m'as convaincu :) 

Au niveau de la fluidité de la VM, pas de soucis en jeu ? J'ai déjà testé Moonlight sur mon réseau local entre mon PC et une Apple TV j'ai pu remarqué quelques ralentissement à certains moment.

Link to comment
  • 2 weeks later...

Bonjour à tous.

Suite à mes précédents messages, je n'ai finalement pas réussi à faire fonctionner la RX 6600, je suis finalement passé sur une 3060.

Avec la 3060 tout fonctionne parfaitement, je n'ai presque rien eu à configuré !

 

De mon côté j'utilise parsec, ça fonctionne parfaitement. Je joue principalement hors de mon domicile et la fluidité reste très bonne.

J'entends beaucoup parler de Moonlight mais j'ai cru voir que c'était uniquement adapté aux jeux, que vous ne pouviez pas avoir l'interface windows comme si vous aviez votre vrai PC.

 

Il faudrait que j'essaie à l'occasion.

 

Avec parsec et la 3060 je peux faire tourner tous mes jeux en très bonne qualité, j'utilise un Vdisk mais à terme j'aimerais bien passtrough un SSD nvme.

Contrairement à host22 je n'utilise pas un WOL, je démarre la VM directement depuis l'interface unRAID. Pourquoi utiliser le WOL si on peut le faire simplement depuis l'interface ?

 

Et concernant la consommation du GPU lorsque la VM est éteinte, je n'ai installé aucun plug-in sur unRAID. Cela est-il nécessaire ?

 

Merci et n'hésitez pas si vous avez des recommandations/questions 😃

Edited by nwicone
Link to comment
5 minutes ago, nwicone said:

J'entends beaucoup parler de Moonlight mais j'ai cru voir que c'était uniquement adapté aux jeux, que vous ne pouviez pas avoir l'interface windows comme si vous aviez votre vrai PC.

 

Sunshine, la partie serveur à installer sur la VM en complément de Moonlight, propose maintenant par défaut d'ouvrir une session Windows toute simple.

 

5 minutes ago, nwicone said:

Contrairement à host22 je n'utilise pas un WOL, je démarre la VM directement depuis l'interface unRAID. Pourquoi utiliser le WOL si on peut le faire simplement depuis l'interface ?

 

Car le client Moonlight intègre la possibilité d'envoyer un magic packet, donc ça m'évite de me connecter sur unRAID pour démarrer la VM. Je peux le faire directement depuis ma TV via ma SHIELD et l'application Moonlight.

 

5 minutes ago, nwicone said:

Et concernant la consommation du GPU lorsque la VM est éteinte, je n'ai installé aucun plug-in sur unRAID. Cela est-il nécessaire ?

 

J'ai fais le test avec ma 3090 et je n'ai pas noté de différence donc j'ai laissé comme ça aussi.

  • Like 1
Link to comment
12 minutes ago, hot22shot said:

 

Sunshine, la partie serveur à installer sur la VM en complément de Moonlight, propose maintenant par défaut d'ouvrir une session Windows toute simple.

 

 

Car le client Moonlight intègre la possibilité d'envoyer un magic packet, donc ça m'évite de me connecter sur unRAID pour démarrer la VM. Je peux le faire directement depuis ma TV via ma SHIELD et l'application Moonlight.

 

 

J'ai fais le test avec ma 3090 et je n'ai pas noté de différence donc j'ai laissé comme ça aussi.

Merci pour ton retour.

Au niveau des performances, Moonlight est mieux que parsec ou tu utilises Moonlight pour la compatibilité avec ta Shield ?

 

J'aimerais essayer Moonlight ce weekend, as-tu une liste des étapes que tu as effectué pour configurer le WOL sur la VM ?

 

Aussi, je ne sais pas vous mais la plupart du temps ma VM prend du temps à démarrer (1mn).. ça vous arrive ?

 

Sinon as-tu d'autres recommendations pour la VM mise à part Moonlight ? 😃

 

Link to comment

Je n'utilise plus Parsec car ce n'est pas gérable depuis une TV avec un pad, c'est vraiment bien par contre depuis un client pc/mac.

Pour Moonlight/Sunshine c'est simple :

  1. Installer sunshine sur la VM : https://docs.lizardbyte.dev/projects/sunshine/en/latest/about/installation.html
  2. Installer Moonlight sur le client https://moonlight-stream.org/#
  3. Faire l'appairage et voila.

Fonctionnellement c'est équivalent à ce que propose nvidia avec GFE et GameStream. C'est même d'ailleurs la même techno mais en version libre.

 

Pour démarrer ma VM en WOL j'utilise un script grace au plugin User Script :

 

#!/bin/bash

# listen to udp port 9 for packets & check if it is a magic packet
while true
do
        nc-openbsd -dnlu -p 9 | stdbuf -o0 xxd -c 6 -p -l 12 | stdbuf -o0 grep -v 'ffffffffffff' | while read
        do
                mac="${REPLY:0:2}:${REPLY:2:2}:${REPLY:4:2}:${REPLY:6:2}:${REPLY:8:2}:${REPLY:10:2}"
                echo "Got triggered with MAC address $mac"

                # compare the MAC address with the magic packet
                if [ "$mac" == "<MAC ADDRESS DE LA VM>" ] 
                then
                        state=$(virsh list --all|awk -v vm=<Nom de la vm> '{ if ($2 == vm ) print $3 }')
                        echo "<Nom de la vm> in $state state"

                        # dependent of the state, resume, start or nothing
                        [ $state == "paused" ] && virsh -q resume <Nom de la vm> && virsh domtime --domain <Nom de la vm> --now
                        [ $state == "shut" ] && virsh -q start <Nom de la vm>
                        [ $state == "pmsuspended" ] && virsh dompmwakeup <Nom de la vm>
                        [ $state == "running" ] && echo Nothing to do <Nom de la vm> is already running
                fi
        done
done

 

Grace a la commande nc-openbsd j'écoute le port 9 et j'attend un magic packet.

S'il est adressé à la mac address de la VM (à remplacer dans le script) alors je regarde l'état de la VM et je lance la commande virsh qui va bien (il faut remplacer <Nom de la vm> par le nom de la VM).

 

1 minute pour démarrer en vdisk ça ne me choque pas, je met 30s en nvme.

Link to comment
22 minutes ago, hot22shot said:

Je n'utilise plus Parsec car ce n'est pas gérable depuis une TV avec un pad, c'est vraiment bien par contre depuis un client pc/mac.

Pour Moonlight/Sunshine c'est simple :

  1. Installer sunshine sur la VM : https://docs.lizardbyte.dev/projects/sunshine/en/latest/about/installation.html
  2. Installer Moonlight sur le client https://moonlight-stream.org/#
  3. Faire l'appairage et voila.

Fonctionnellement c'est équivalent à ce que propose nvidia avec GFE et GameStream. C'est même d'ailleurs la même techno mais en version libre.

 

Pour démarrer ma VM en WOL j'utilise un script grace au plugin User Script :

 

#!/bin/bash

# listen to udp port 9 for packets & check if it is a magic packet
while true
do
        nc-openbsd -dnlu -p 9 | stdbuf -o0 xxd -c 6 -p -l 12 | stdbuf -o0 grep -v 'ffffffffffff' | while read
        do
                mac="${REPLY:0:2}:${REPLY:2:2}:${REPLY:4:2}:${REPLY:6:2}:${REPLY:8:2}:${REPLY:10:2}"
                echo "Got triggered with MAC address $mac"

                # compare the MAC address with the magic packet
                if [ "$mac" == "<MAC ADDRESS DE LA VM>" ] 
                then
                        state=$(virsh list --all|awk -v vm=<Nom de la vm> '{ if ($2 == vm ) print $3 }')
                        echo "<Nom de la vm> in $state state"

                        # dependent of the state, resume, start or nothing
                        [ $state == "paused" ] && virsh -q resume <Nom de la vm> && virsh domtime --domain <Nom de la vm> --now
                        [ $state == "shut" ] && virsh -q start <Nom de la vm>
                        [ $state == "pmsuspended" ] && virsh dompmwakeup <Nom de la vm>
                        [ $state == "running" ] && echo Nothing to do <Nom de la vm> is already running
                fi
        done
done

 

Grace a la commande nc-openbsd j'écoute le port 9 et j'attend un magic packet.

S'il est adressé à la mac address de la VM (à remplacer dans le script) alors je regarde l'état de la VM et je lance la commande virsh qui va bien (il faut remplacer <Nom de la vm> par le nom de la VM).

 

1 minute pour démarrer en vdisk ça ne me choque pas, je met 30s en nvme.

Je te remercie pour ton aide. J'avancerai sur le WOL plus tard.

Je viens de regarder Moonlight et ils proposent aussi "internet hosting tool".

Je trouve pas de comparatif avec sunshine sur internet, quelle est cette solution ?

Il y a aussi geforce expérience mais j'ai l'impression que c'est limité aux jeux et ça ne donne pas accès à l'interface windows..

Personne n'en parle donc je suppose que ce n'est pas une bonne solution 🥲

 

Merci encore pour tes conseils !

Link to comment

Moonlight c'est le soft client, Sunshine c'est le soft serveur (host).

Ils ne sont pas à comparer puisqu'ils s'utilisent ensemble.

 

Sunshine remplace Geforce Experience (GFE) qui de toute façon va bientôt abandonner le streaming en local pour ne proposer que Geforce Now.

Ce n'est donc pas une solution d'avenir que d'utiliser GFE.

 

L'internet hosting tool vérifie juste que les flux soient bien ouverts de bout en bout entre la VM et Internet.

Link to comment
22 minutes ago, hot22shot said:

Moonlight c'est le soft client, Sunshine c'est le soft serveur (host).

Ils ne sont pas à comparer puisqu'ils s'utilisent ensemble.

 

Sunshine remplace Geforce Experience (GFE) qui de toute façon va bientôt abandonner le streaming en local pour ne proposer que Geforce Now.

Ce n'est donc pas une solution d'avenir que d'utiliser GFE.

 

L'internet hosting tool vérifie juste que les flux soient bien ouverts de bout en bout entre la VM et Internet.

Ah d'accord je n'avais pas compris, internet hosting tool est indispensable ?

Ou c'est optionnel ?

 

Je vais installer ça ce soir 😉

 

Et où as-tu trouvé ton script pour le WOL de la VM ?

Link to comment

L'internet Hosting Tool n'est indispensable seulement dans le cas où l'on souhaite accéder à la VM depuis internet.

Perso 99% du temps j'utilise ma VM depuis mon réseau local, donc je l'ai installé pour couvrir le 1% restant.

 

J'ai fait le script moi même à partir d'exemples que j'ai retrouvé sur internet.

Link to comment
10 minutes ago, hot22shot said:

L'internet Hosting Tool n'est indispensable seulement dans le cas où l'on souhaite accéder à la VM depuis internet.

Perso 99% du temps j'utilise ma VM depuis mon réseau local, donc je l'ai installé pour couvrir le 1% restant.

 

J'ai fait le script moi même à partir d'exemples que j'ai retrouvé sur internet.

D'accord je vois.

Personnellement je joue plus de la moitié de temps hors du réseau local 😃 ça va m'être indispensable alors.

 

Bien joué pour le script alors !

Merci encore et à bientôt 😉

Link to comment

D'ailleurs j'ai une question concernant l'allocation des coeurs CPU.

J'ai un i5-10600k et j'ai toujours utilisé 8 coeurs sur 12.

J'aimerais en allouer un peu plus pour gagner en performances.

Pensez-vous que allouer 9 cœurs est une bonne idée ?

À côté je fais tourner Plex et la suite d'outils arr.

Screenshot_20230412-095031.png

Link to comment
3 minutes ago, hot22shot said:

Pas certain que tu y gagnes beaucoup, il ne me semble pas judicieux de partager un core hyperthreadé.

As-tu isolé les coeurs partagés avec ta VM ?

D'accord je vois, donc pas forcément utile.. mais je me dis que j'ai rien à perdre de rajouter ça. Mais vu que je ne connais pas en détail le fonctionnement du proc et ses optimisations, je préfère demander.

 

Concernant ta question, je ne sais pas de quoi tu parles. J'ai cherché sur internet et je ne comprends pas mieux 😅

Qu'est-ce-que tu entends par isoler les coeurs partagés ?

Edited by nwicone
Link to comment

Dans l'interface d'unraid, la partie Settings / CPU Pinning te permet de modifier globalement l'association entre tes coeurs et tes VMs et docker.

Mais elle te permet aussi d'isoler les coeurs (tout en bas) te permettant ainsi d'en réserver l'usage exclusif aux ressources (VM, Docker) auxquelles tu as associés les coeurs.

 

Si tu ne fait pas ça il est possible qu'unraid utilise les coeurs en concurrence de ta vm par exemple, car association ne veux pas dire exclusivité.

Link to comment
2 hours ago, hot22shot said:

Dans l'interface d'unraid, la partie Settings / CPU Pinning te permet de modifier globalement l'association entre tes coeurs et tes VMs et docker.

Mais elle te permet aussi d'isoler les coeurs (tout en bas) te permettant ainsi d'en réserver l'usage exclusif aux ressources (VM, Docker) auxquelles tu as associés les coeurs.

 

Si tu ne fait pas ça il est possible qu'unraid utilise les coeurs en concurrence de ta vm par exemple, car association ne veux pas dire exclusivité.

Ah d'accord, je n'ai jamais fais ça et c'est la première fois que j'en entends parler.

L'isolation dont tu parles prend effet seulement quand la VM est en fonctionnement ?

Quel paramétrages conseilles-tu ?

Link to comment
1 hour ago, nwicone said:

Ah d'accord, je n'ai jamais fais ça et c'est la première fois que j'en entends parler.

L'isolation dont tu parles prend effet seulement quand la VM est en fonctionnement ?

Quel paramétrages conseilles-tu ?

 

C'est là qu'est le problème : c'est permanent. Autrement dit les cœurs isolés ne pourront être utilisés que par la VM, même si cette dernière est éteinte.

Cela dit c'est l'assurance d'avoir des perfs au max.

 

Sur mon 5800X j'ai associé et isolé 4C/8T pour ma VM, il me reste donc les 4C/8T restants pour unraid et mes 27 dockers.

Et c'est largement suffisant pour mon utilisation.

 

Le mieux étant bien sur de tester.

Link to comment
16 minutes ago, hot22shot said:

 

C'est là qu'est le problème : c'est permanent. Autrement dit les cœurs isolés ne pourront être utilisés que par la VM, même si cette dernière est éteinte.

Cela dit c'est l'assurance d'avoir des perfs au max.

 

Sur mon 5800X j'ai associé et isolé 4C/8T pour ma VM, il me reste donc les 4C/8T restants pour unraid et mes 27 dockers.

Et c'est largement suffisant pour mon utilisation.

 

Le mieux étant bien sur de tester.

D'accord, mais tu es sûr que ce soit la meilleure manière de faire ?

Ce ne serait pas mieux d'associer plus de coeurs sans les isoler ? Cela permettrait de les garder pour les moments où la VM est éteinte..

De mon côté je joue peu donc c'est un gros inconvénient de réserver une grande partie des coeurs uniquement pour la VM..

Link to comment

C'est plus efficace de passer moins de cœurs et de les isoler que d'en mettre plus sans le faire.

Lorsque qu'un cœur est interrompu pour travailler sur autre chose il y a un cout pour basculer de contexte et donc une perte de performance.

Unraid peut, par exemple, privilégier une de ses taches plutôt que ta VM, ce qui peut être problématique en plein jeux.

 

Ca fait partie de la base dans la plupart des guides sur les VMs de gaming (https://www.google.com/search?q=unraid+cpu+isolation+gaming+vm)

 

Link to comment
1 hour ago, hot22shot said:

C'est plus efficace de passer moins de cœurs et de les isoler que d'en mettre plus sans le faire.

Lorsque qu'un cœur est interrompu pour travailler sur autre chose il y a un cout pour basculer de contexte et donc une perte de performance.

Unraid peut, par exemple, privilégier une de ses taches plutôt que ta VM, ce qui peut être problématique en plein jeux.

 

Ca fait partie de la base dans la plupart des guides sur les VMs de gaming (https://www.google.com/search?q=unraid+cpu+isolation+gaming+vm)

 

EDIT: Après réflexion, mon message n'était pas clair, je reformule donc.

 

Merci pour ta réponse.

Le problème est que le reste du temps ces coeurs sont inactif..

Pour ceux qui jouent occasionnellement c'est embêtant.. dans cette situation que faut-il faire ?

N'y a t'il pas moyen d'isoler les coeurs uniquement quand la VM fonctionne ? Cela me paraît du bon sens 🤔

Je pensais justement que les coeurs alloués à ma VM étaient dédiés à celle-ci. Je ne savais pas qu'ils restaient accessible à docker..

 

En me renseignant sur ce que tu me dit, je tombe sur ce type de poste :

 

Cela devient très compliqué, je m'y perd 😵💫

 

 

En revanche j'ai trouvé cela qui devrait résumer les astuces importantes à appliquer pour une VM gaming comparé à une VM normale, ce qui rejoint ce que tu disais :

j'avoue ne pas comprendre l'étape .2 et .3

Sont-elles toujours d'actualité ?

Malheureusement il n'y a aucun guide claire qui évoque tout cela, j'ai donc du mal à comprendre..

Edited by nwicone
Link to comment

Comme tu le remarques, se faire une VM gaming reste un procédé artisanal.

Personnellement j'ai compilé plusieurs tuto plus ou moins récents pour finir sur ma configuration actuelle avec quelques essais/erreurs.

Donc le mieux c'est avant tout de tester car suivant l'age et le type de ton matériel et la version d'unraid les optimisations à faire ne sont pas forcément les mêmes.

 

L'étape .2 c'est exactement ce que je te suggérais, isoler les coeurs associés à la VM pour les dédier.

C'est effectivement un choix important car l'isolation n'est pas dynamique mais pour l'instant je n'ai pas trouvé d'autre méthode pour le faire sur unraid.

Unraid propose une interface qui évite d'avoir à modifier le fichier syslinux.cfg, je ne connais pas nohz_full/rcu_nocs, je creuserais pour voir si ça a un sens pour moi.

 

L'étape .3 j'avoue je ne saisis pas bien la première ligne, pour le reste les iothread(s) permettent d'associer d'autres coeurs que ceux de ta VM aux taches de transferts disques, accélérant ainsi l'execution de la VM. Mais comme j'ai un NVME je ne me suis pas penché la dessus.

 

Pour un joueur occasionnel pas certain que tu vois grande différence, on est quand même dans le bout du bout de l'optimisation.

Jouer avec ces paramètres est surtout utile pour ceux qui ont des gros soucis, par exemple avec du stutter ou du tearing.

Si tu es content de tes perfs pas la peine de se casser la tête.

 

J'ai surtout consulté ce guide https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF tout n'est pas applicable tel quel car l'OS et le kernel n'est pas le même qu'unraid, mais ça donne une bonne base de compréhension.

 

 

 

 

Link to comment

D'accord je comprends très bien.

Finalement dédié ses cœurs de proc revient un peu à faire un passthrough des coeurs pour la VM.

 

Effectivement si on va dans le détail pour gagner quelques pourcent de performance, la construction de la VM est plutôt artisanale.

Cependant, pour la majorité des cas je trouve cela vraiment simple avec unRAID.

Il faut juste activer les bons paramètres dans le bios, passtrough le GPU NVIDIA d'un simple clic avec l'IOMMU, choisir les threads par couple (coeurs entier) et c'est tout. Je ne vois pas d'autres optimisations 🤔 du moins si tu en as d'autres importantes je suis preneur.

 

En revanche pour les cartes AMD c'est une autre histoire..😅

 

Pour résumer

-pour les personnes qui ont un serveur unRAID et pour qui le gaming est très important, le pinning des coeurs est utile car permet d'assurer des performances optimisées.

-pour les joueurs occasionnels, qui utilisent leurs serveurs surtout pour Plex et autre, le pinning des coeurs du CPU a plus d'inconvénients que d'avantages. Surtout si sans le pinning, la VM marche déjà très bien.

 

me concernant je suis très satisfait des performances, et suis toujours émerveillé de pouvoir jouer de n'importe où (tant que qu'il y a la fibre 😉)

J'ai donc une dernière question, pour ceux qui n'isolent pas leurs coeur CPU pour la VM, est-ce qu'il fait quand même limiter le nombre de cœurs utilisés par la VM ? Où est-ce que, vu que dans tous les cas toutes les ressources sont partagées, je peux mettre tous les coeurs sur la VM (sauf le premier coeur que je laisse pour le fonctionnement de unRAID) ?

Dans ma situation avec le 10600k cela donnerait 5 coeurs sur 6 utilisés pour la VM au lieu de 4 coeurs sur 6 actuellement. (J'utilisais 4 coeurs sur 6 justement car je croyais que les 4 étaient dédiés à la VM et que docker n'avait que 2 coeurs pour fonctionner 😅)

 

En tout cas merci pour ton aide, je pense que au futur unRAID proposera d'isoler les coeurs de la VM automatiquement durant son fonctionnement, car cela tombe sous le sens !

Edited by nwicone
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.