Auslastung eines Hyper-Threading-Prozessors
Mein Windows-XP-Rechner ist mit einem Pentium 4 640 (3,2 GHz mit Hyper-Threading) bestückt. Der Task-Manager zeigt unter „Verlauf der CPU-Auslastung“ - trotz Single-Prozessor Software - für die beiden CPU-Teile eigentlich immer eine gleichmäßige Belastung an, die aber nie über 50 Prozent steigt - warum?
Mein Windows-XP-Rechner ist mit einem Pentium 4 640 (3,2 GHz mit Hyper-Threading) bestückt. Der Task-Manager zeigt unter „Verlauf der CPU-Auslastung“ - trotz Single-Prozessor Software - für die beiden CPU-Teile eigentlich immer eine gleichmäßige Belastung an, die aber nie über 50 Prozent steigt - warum?
Hyper-Threading-Prozessoren haben nur einen Prozessorkern, simulieren aber mit einigen Tricks einen zweiten „virtuellen“ oder „logischen“ Prozessor. Dieser Kniff soll dazu beitragen, dass das Betriebssystem die ohnehin vorhandenen Recheneinheiten (etwa für Ganzzahl-, Gleitkomma- und Matrixberechnungen) besser gleichzeitig nutzen und dadurch die Auslastung des Prozessors steigern kann.
Anwendungen, die nur einen Prozessorkern nutzen (Single-Threaded-Software), lasten einen solchen Prozessor maximal zu 50 Prozent aus. Allerdings bedeutet das nicht, dass solche Programme an einen bestimmten Kern gebunden sind. Bei Multitasking-Betriebssystemen (wie Windows) erhalten einzelne Anwendung nicht die kompletten CPU-Ressourcen, sondern alle laufenden Threads und Programme kommen nach einer Prioritätenliste an die Reihe und können einander unterbrechen. Nach einer Unterbrechung läuft ein Programm möglicherweise auf einem anderen Prozessorkern weiter. Der im Betriebssystem integrierte „Scheduler“ verteilt die anstehenden Aufgabenpakete jeweils zufällig auf die (beiden) zur Verfügung stehenden logischen Prozessoren - bis zu hundert mal pro Sekunde neu.
Der Scheduler verfolgt dabei zwar grundsätzlich die Strategie, einen laufenden Thread möglichst immer wieder auf denselben Kern zu legen. Wenn allerdings viele Programme parallel laufen, gelingt ihm das oft nicht. Weil diese Umschaltung so häufig stattfindet, sieht es dann im Task Manager möglicherweise so aus, als würde jeder Kern nur teilweise ausgelastet sein, sodass die Summe der Belastungen ungefähr 50 Prozent entspricht - das ist aber nur ein zeitlich gemittelter Wert.
Unter Windows 2000 und XP lässt sich das Verhalten des Schedulers beeinflussen, und zwar im Task-Manager (taskmgr.exe): Nach Rechtsklick auf eine laufende Anwendung in der Liste auf dem Registerblatt „Prozesse“ lässt sich deren „Zugehörigkeit“ festlegen ebenso wie ihre Priorität.
Mit dem Utility launch.exe, das wir in c't 15/05 („Doppeltes Ottchen“, s. Soft-Link) vorgestellt haben, lassen sich Anwendungen direkt auf bestimmten CPU-Kernen starten.