Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Hook Scripts VMs

Featured Replies

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

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.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.