Mitunter macht es (sehr viel) Sinn einem Dienst, einer Anwendung oder einem wie auch immer geartetem Prozess eine andere Priorität und die maximal zu verwendeten Kerne bzw. CPUs zuzuweisen.

Als Fallbeispiel dient mein Heimserver zusammen mit DVBViewer und HandBrake (siehe dort das Update vom Update 09.11.2018). HandBrake wird automatisch nach einer Aufnahme als Aufgabe ausgeführt, um das Format zu ändern. Das spart Platz, aber während die Konvertierung läuft, kommt der kleine olle i3 ganz schön ins Schwitzen. Blöd, wenn dann noch etwas anderes laufen soll. Aber Abhilfe ist einfach: Das Tool soll sowohl mit niedrigere Priorität laufen als auch nur eine gewisse Anzahl an Kernen verwenden. Via Batch lässt sich das für noch auszuführnede Prozesse einfach mittels “start” lösen:

start /wait /belownormal /affinity 7 "" "C:\Program Files\HandBrake\HandBrakeCLI.exe" --preset "Fast 720p30" -i %InputFile% -o %OutputFile%

“/belownormal” führt mit der nächst niedrigeren Priorität zu Normal aus und “/affinity 7” bedeutet bei diesem System das nur drei von vier Kernen (0, 1 und 2) benutzt werden sollen und dürfen. Der Wert für “/affinity” ist übrigens in Hexidezimal (HEX) anzugeben.

Das Bestimmen der “Affinity” fällt anhand der Tabelle unter

MS Docs – SQL – Installation – Configuration – Server Configuration Options – affinity mask

oder folgender Seite leichter:

http://store.fsxtimes.com/cal-cam.php

Prüfen kann man den (Miss-)Erfolg z.B. mittels Task-Manager. Zum Test kann man zunächst mal Notepad mit den entsprechenden Parametern starten und schauen, ob dieses auf die gewünschten Kerne “beschränkt” ist, so spart man erstmal Auslastung und kommt schneller voran.

Auf der Registerkarte “Leistung” kann man beobachten, ob alle oder nur bestimmte Kerne aus- bzw. belastet sind. Auf der Registerkarte “Details” kann man die Priorität sehen, sofern man zuvor die Spalte “Basispriorität” eingeblendet hat.

By the way:

Bei bereits laufenden Prozessen kann man (natürlich) via Task-Manager händisch die Prio und Kerne/CPUs ändern (Registerkarte “Details”, Rechtsklick auf den Prozess und “Priorität festlegen” bzw. “Zugehörigkeit festlegen”), automatisch geht das z.B. via WMI oder Powershell, siehe Quellen.

Quellen:

davychiu – Limit Handbrake Useable CPU Cores in Windows

superuser – Changing Windows process priority via command line

stackoverflow – Change affinity of process with windows script

Update 24.07.2020

Link und Details ergänzt.

Update 14.02.2023

Kleinere Korrekturen und Ergänzungen.