Ende letzten Jahres lass ich zufällig einen Tuning-Tipp für Windows Vista, den ich nach etwas Suchen im Netz auch auf weiteren Seiten wiederfand. Als ich dann gestern einen Beitrag im Forum mit diesen Tipp sah, fiel mir die Geschichte wieder ein. Diesen angeblichen Tuning-Tipp werden ich mit diesem Blog-Eintrag widerlegen!
Es wird behauptet, dass beim Starten nicht alle Kerne benutzt werden und man das durch setzen der Option "Prozessoranzahl" via Msconfig ändern kann. Dadurch soll Windows dann schneller starten und es soll vor allem den Autostart beschleunigen.
Msconfig setzt den Startparameter numproc, den es seit Windows 2000 für die boot.ini gibt. Es ist somit kein "Problem" oder Feature von Vista!
Quelle: KB833722 für Windows 2000, KB833721 für Windows XP/2003
numproc nimmt Einfluss auf die Kernelvariable für die Anzahl der erlaubten und lizenzierten Prozessoren (KeRegisteredProcessors) und reduziert so die Menge der genutzten Prozessoren!
Vorgehen ohne numproc
Mit lizenzierten Prozessoren ist der gesamte Prozessor mit all seinen Kernen gemeint. Windows überprüft beim Starten die Anzahl derer und vergleicht sie mit der laut Lizenz zulässigen Anzahl. Die einzelnen Kerne werden als logische Prozessoren innerhalb einer physischen CPU betrachtet. Deswegen sieht man auch alle Kerne bei XP Home oder Vista Home im Taskmanager, wenn man eine Dual- oder QuadCore CPU hat.
Der Kernel sucht beim Starten alle CPUs, egal ob logisch oder physisch. Er beginnt beim ersten logischen auf dem ersten physischen und erhöht eine Zählvariable (KeNumberProcessors). Wird eine neue logische CPU gefunden, die sich auf einer neuen physischen CPU befindet, wird überprüft, ob KeNumberProcessors kleiner als die Zahl der erlaubten physische CPUs ist und akzeptiert dann die neue CPU oder auch nicht.
Wenn eine neue logische CPU auf einer bereits erkannten (und erlaubten) physischen CPU gefunden wird, dann werden KeNumberProcessors und KeRegisteredProcessors um eins erhöht. Man erhöht damit quasi die lizenzierte Anzahl dynamisch und erlaubt so beliebig viele Kerne auf einem Prozessor.
Vorgehen mit numproc
Wenn numproc gesetzt ist, werden neue logische CPUs nur dann akzeptiert und KeRegisteredProcessors und KeNumberProcessors um eins erhöht, wenn der aktuelle Wert von KeRegisteredProcessors kleiner als numproc ist (Ausnahme bei numproc=1 damit auch die erste CPU akzeptiert wird)! Außerdem wird KeRegisteredProcessors mit dem Wert von numproc überschrieben, wenn numproc kleiner als KeRegisteredProcessors ist.
Setzt man numproc nun auf einen Wert der gleich der Anzahl der Kerne ist, dann passiert nichts, da dieser Fall äquivalent zum Vorgehen ohne gesetztem numproc Parameter ist.
Hat man mehr logische Kerne als numproc erlaubt, dann werden die zusätzlichen Kerne wie nicht lizenzierte physische CPUs behandelt und nicht genutzt. Mehr noch, es wird auch die Page Size Extension (PSE) deaktiviert.
Besagter Tuning-Tipp ist also totaler Unfug und bringt im Normalfall nichts außer einem Placeboeffekt! Auf den Startvorgang hat es keinen positiven Effekt und auf den Autostart, wo Windows bereits geladen ist und alle nutzbaren Kerne nutzt, erst recht nicht.
Beim Starten von Windows spielt die CPU heutzutage eine untergeordnete Rolle – es macht keinen Unterschied, ob nun ein 3 GHz Kern arbeitet oder vier 3 GHz Kerne. Die limitierenden Faktoren sind die Festplatte, Laden von Treibern und die Dauer der Initialisierung/Erkennung der Geräte.
Das Thema numproc kann man auch nochmal hier und hier bei Geoff Chappell, Autor von DOS Internals, nachlesen. Interessantes über Verbesserungen im Kernel von Windows XP zur Optimierung des Startvorgangs kann man bei ExtremeTech nachlesen.
Ausnahmsweise ist diesmal die deutsche Übersetzung des KB833721-Artikels genauer als das englische Original: "Durch diese Befehlszeilenoption wird die Anzahl von Prozessoren festgelegt, die Windows beim Starten aktiviert." Aktiviert trifft es sehr gut, während im englischen "that Windows will run at startup" zweideutig ist. Es meint entweder die falsche Interpretation (X CPUs beim Booten nutzen) oder aber es meint das eigentliche, nämlich die Anzahl der CPUs, die genutzt werden, beim Starten festzulegen.