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.
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
Schreibe einen Kommentar