S
Stuntmp02
Gast
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).
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.
Nach diesen Einstellungen könnt ihr die Aufgabe / Task mit OK speichern und müsst nur noch euer Kennwort eingeben.
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.
Troubleshooting
Es ist möglich, dass die ExecutionPolicy auf Unrestricted gestellt werden muss, damit das Ausführen von Skripts erlaubt wird. Beim User @Pizza! konnte damit das Skript erfolgreich genutzt werden.
1: Powershell als Administrator ausführen
2: In die geöffnete PowerShell folgende Zeile eingeben
Ihr könnt die Änderung wie folgt wieder rückgängig machen, dann funktioniert aber ggf. der PowerPlan Switcher nicht mehr.
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
PowerShell:
## 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){
if ((powercfg /GetActiveScheme) -notlike ("*" + $GamingPowerPlanID + "*")){
powercfg -s $GamingPowerplanID
}
}
else{
if ((powercfg /GetActiveScheme) -notlike ("*" + $NoGamingPowerPlanID + "*")){
powercfg -s $NoGamingPowerPlanID
}
}
Start-Sleep -Seconds $CheckEverySeconds
}
PowerShell:
## To Fill
$NvidiaSMIFolderPath = "C:\Program Files\NVIDIA Corporation\NVSMI"
$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=utilization.gpu --format=csv,noheader,nounits"
while ($true){
[int]$GPUData = Invoke-Expression -command $SMICommand
if ($GPUData -ge $MinGPUUsage){
if ((powercfg /GetActiveScheme) -notlike ("*" + $GamingPowerPlanID + "*")){
powercfg -s $GamingPowerplanID
}
}
else{
if ((powercfg /GetActiveScheme) -notlike ("*" + $NoGamingPowerPlanID + "*")){
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.
Nach diesen Einstellungen könnt ihr die Aufgabe / Task mit OK speichern und müsst nur noch euer Kennwort eingeben.
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.
Troubleshooting
Es ist möglich, dass die ExecutionPolicy auf Unrestricted gestellt werden muss, damit das Ausführen von Skripts erlaubt wird. Beim User @Pizza! konnte damit das Skript erfolgreich genutzt werden.
1: Powershell als Administrator ausführen
2: In die geöffnete PowerShell folgende Zeile eingeben
PowerShell:
Set-ExecutionPolicy Unrestricted
Ihr könnt die Änderung wie folgt wieder rückgängig machen, dann funktioniert aber ggf. der PowerPlan Switcher nicht mehr.
PowerShell:
Set-ExecutionPolicy Restricted
Zuletzt bearbeitet:
(Update)