[Skript] Windows PowerPlan Switcher for Nvidia

Stunrise

Enthusiast
Thread Starter
Mitglied seit
26.07.2017
Beiträge
857
Hallo zusammen,

ich habe ein Skript geschrieben, dass automatisch den Windows Energiesparplan in Abhängigkeit von der Nvidia-GPU Auslastung und P-State ändert (Nur mit Nvidia Grafikkarten kompatibel). Damit kombiniere ich den "Balanced" Energiesparplan für Non-Gaming mit dem "High Performance" Energiesparplan, während die Grafikkarte belastet ist, ich also am zocken bin.

Sobald die Grafikkarte in den P0 (Performance State wechselt und mehr als 25% GPU-Auslastung hat: High Performance
Während die Grafikkarte in einem Energiesparmodus ist oder weniger als 25% GPU-Auslastung hat: Balanced
Alle Parameter sind im Block ## To Fill ## frei konfigurierbar

Gerade bei Gaming hat der Prozessor sehr schwankende Last, sodass mit dem Balanced Energiesparplan im GPU-Limit deutliche Latenzen und Lagspikes entstehen können, weil Prozessorkerne bei niedriger Last heruntertakten und dann bei einer Lastspitze erst wieder hochtakten müssen. Je nach Spiel sind die Auswirkungen nicht vorhanden (Quantum Break) bis zu extrem störend (Overwatch oder Nioh).
  • Das Skript verursacht keine nennenswerte Auslastung
  • Beim Browsen wird Strom gespart, beim Zocken sind die Latenzen minimiert
  • Das Umschalten erfolgt automatisch und die Parameter können im Skript konfiguriert werden

Code:
## To Fill
$NvidiaSMIFolderPath = "C:\Program Files\NVIDIA Corporation\NVSMI"
$GamingPState = "P0"
$MinGPUUsage = 25
$CheckEverySeconds = 10
$GamingPowerPlanID = "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"
$NoGamingPowerPlanID = "381b4222-f694-41f0-9685-ff5bb260df2e"

## Power Plans IDs (Use Without #)
# 381b4222-f694-41f0-9685-ff5bb260df2e = Balanced
# 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c = High performance
# a1841308-3541-4fab-bc81-f71556f20b4a = Power saver

$SMICommand = "& '" + $NvidiaSMIFolderPath + "\nvidia-smi.exe`' --query-gpu=pstate,utilization.gpu --format=csv,noheader,nounits"


while ($true){
    $GPUData = (Invoke-Expression -command $SMICommand).split(",")

    if ($GPUData[0] -eq $GamingPState -and [int]$GPUData[1] -ge $MinGPUUsage){
        powercfg -s $GamingPowerplanID
    }
    else{
        powercfg -s $NoGamingPowerPlanID
    }
    Start-Sleep -seconds $CheckEverySeconds 
}

Anleitung

1: Kopiert den Skript Code in eine Textdatei auf eurem Computer und benennt diese von .txt zu .ps1 um (in meinem Beispiel C:\Install\Skripts\Nvidia_PowerPlanSwitcher\Nvidia_PowerPlanSwitcher.ps1)

2: Öffnet die Aufgabenplanung (Task Scheduler in eng) und geht auf "Neue Aufgabe erstellen / Create Task". Folgt nun den Bildern.
1.jpg
2.jpg
3.jpg

Nach diesen Einstellungen könnt ihr die Aufgabe / Task mit OK speichern und müsst nur noch euer Kennwort eingeben.
4.jpg

Ab dem nächsten Windows-Start läuft nun mit 1 Minute Verzögerung das Skript und prüft alle 10 Sekunden die GPU-Auslastung, um dann den Windows Energiesparplan entsprechend zu setzen. Im Task Manager läuft das Skript dann als "powershell.exe". Während ich hier also in Edge diese Zeilen verfasse, ist der Balanced Energieplan aktiv, sobald ich aber ein Game starte, wird nach wenigen Sekunden in den High Performance Energiesparplan gewechselt.

Getestet unter Windows 10 mit einer GTX 1080 und einem Standard Nvidia Treiber ohne Geforce Experience.
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Das ist nur ein Default Wert, man kann ihn meines Erachtens bedenkenlos zwischen 1 - 300 Sekunden einstellen. Man darf nicht vergessen, dass Tools wie MSI Afterburner sekündlich ein gutes Dutzend an Werten von der GPU auslesen und es ja auch nicht nennenswert Performance kostet. Grundsätzlich ist die Kernaussage - so wenig Rechenarbeit wie möglich - absolut korrekt. Wie gesagt, das ist jedem selbst überlassen und eine Abfrage alle 60 Sekunden wäre sicher auch völlig ausreichend.
 

Ähnliche Themen

Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh