March 29, 20242 yr Da bei mir jetzt alles läuft und die ganze Einrichtung der Hook Scripts doch ziemlich butterweich über die Bühne ging, möchte ich das Ganze einmal zusammenfassen. Nicht, um mich mit fremden Federn zu schmücken, sondern um evtl. etwas an die Community zurückzugeben. Ausgangslage ist, dass eine dGPU sich nicht in einen Ruhemodus versetzen lässt, wenn kein Betriebssystem mit entsprechenden Grafikkartentreibern geladen ist. Somit ist der Stromverbrauch wesentlich höher, wenn z.B. keine VM läuft in die die Grafikkarte durchgereicht wurde. Aber auch eine laufende VM ist ein weiterer Energiefresser und sollte beendet sein, wenn man vorhat, ein möglich sparsames System zu betreiben. Die Lösung ist, die dGPU nicht über VFIO Binds von Unraid zu trennen und dann an die VM durchzureichen. Ist die dGPU über VFIO Binds getrennt, steht sie Unraid nicht mehr zur Verfügung und man hat somit keine Möglichkeit, Ruhezustände einzuleiten. Damit der Ruhezustand der dGPU automatisiert eingeleitet wird, wenn keine VM läuft und deaktiviert wird wenn man eine VM startet, kann man sich den Hook Scripts bedienen, die dann das Umschalten im Hintergrund vornehmen. Man öffnet ein Terminal in Unraid und erstellt Verzeichnis unter /etc/libvirt/hooks/ mit dem Namen qemu.d mkdir -p /etc/libvirt/hooks/qemu.d/ Dort erstellen wir eine Datei namens " hook_scripts " nano /etc/libvirt/hooks/qemu.d/hook_scripts Wir fügen folgenden Inhalt ein #!/bin/bash if [ $1 = "VM1" -a $2 = "prepare" -a $3 = "begin" ]; then /mnt/cache/system/hook_scripts/vm1_start.sh & /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "VM Info, "$1", "$2", "$3"" -i "normal" & elif [ $1 = "VM1" -a $2 = "release" -a $3 = "end" ]; then /mnt/cache/system/hook_scripts/vm1_stop.sh & /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "VM Info, "$1", "$2", "$3"" -i "normal" & elif [ $1 = "VM2" -a $2 = "prepare" -a $3 = "begin" ]; then /mnt/cache/system/hook_scripts/vm2_start.sh & /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "VM Info, "$1", "$2", "$3"" -i "normal" & elif [ $1 = "VM2" -a $2 = "release" -a $3 = "end" ]; then /mnt/cache/system/hook_scripts/vm2_stop.sh & /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "VM Info, "$1", "$2", "$3"" -i "normal" & elif [ $1 = "VM3" -a $2 = "started" -a $3 = "begin" ]; then # /mnt/cache/system/hook_scripts/vm3_start.sh & /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "VM Info, "$1", "$2", "$3"" -i "normal" & elif [ $1 = "VM3" -a $2 = "stopped" -a $3 = "end" ]; then # /mnt/cache/system/hook_scripts/vm3_stop.sh & /usr/local/emhttp/webGui/scripts/notify -e "Unraid Server Notice" -s "VM Info, "$1", "$2", "$3"" -i "normal" & fi exit 0; In diesem Script wird die GPU bei Start der entsprechenden VM aus dem Ruhezustand rausgeholt und nach Beenden der VM wieder gestartet. In meinem Beispiel ist die dGPU an die VM1 und VM2 durchgereicht. VM3 nutzt die dGPU nicht. Das Script ausführbar machen chmod +x /etc/libvirt/hooks/qemu.d/hook_scripts Als nächstes erstellen wir die ausführbaren Dateien, die den Ruhezustand entsprechend Ein- oder Ausschalten. Diese nenne ich in meinem Beispiel vm1_start.sh und vm1_stop.sh (siehe auch im Script oben. Also Nr. 1: nano /mnt/cache/system/hook_scripts/vm1_start.sh und kopieren den folgenden Inhalt rein: #!/bin/bash nvidia-smi -i 0 -pm 0 & sleep 1 exit 0; Und Nr. 2: nano /mnt/cache/system/hook_scripts/vm1_stop.sh #!/bin/bash nvidia-smi -i 0 -pm 1 & sleep 1 exit 0; Auch diese beiden Dateien machen wir ausführbar: chmod +x /mnt/cache/system/hook_scripts/vm1_start.sh chmod +x /mnt/cache/system/hook_scripts/vm1_stop.sh Sind die Nvidia Treiber (das Plugin) installiert, muss unter Umständen die VM XML angepasst werden. Auch dazu hat Alturismo schon eine tolle Zusammenfassung geschrieben, was wie in der XML angepasst werden muss. Zufällig musste ich an meinen nichts ändern und die VMs haben genauso gestartet wie vorher. Die Quellen sind: https://forums.unraid.net/topic/158529-nach-einbau-rtx-3060-ti/ https://forums.unraid.net/topic/154738-vm-für-gaming-etwas-laggy/ Herzlichen Dank an Alturismo, ich777, DataCollector und zero_neverload für die Unterstützung. Falls ich noch etwas ergänzen / ändern soll, bitte eine Info. Michael
March 30, 20242 yr Danke @Mika, hab diesen Post hierher verschoben dann kann ich zukünftig leichter hierher verweisen kleine Anmerkungen, der Name hook_scripts in .../qemu.d/ ist frei, alle ausführbaren Dateien da drin werden nacheinander ausgeführt, war nur meine Namenslogik. Wenn sich jemand fragt warum ein script ein anderes script ausführt ... qemu.d ist da "wählerisch" und möchte nicht zuviel drin haben, daher das separieren in externe ausführbare scripts ... meine Quelle wie ich dazu kam https://libvirt.org/hooks.html
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.