Startparameter zum Testen von Treibern für die Unterstützung mehrerer Prozessorgruppen

Windows 7 und Windows Server 2008 R2 bieten Unterstützung für Computer mit mehr als 64 Prozessoren. Diese Unterstützung wird durch die Einführung von Prozessorgruppen ermöglicht. Zu Testzwecken können Sie jeden Computer mit mehreren logischen Prozessoren so konfigurieren, dass mehrere Prozessorgruppen vorhanden sind, indem Sie die Gruppengröße einschränken. Dies bedeutet, dass Sie Treiber und Komponenten auf die Kompatibilität mehrerer Prozessorgruppen auf Computern mit weniger als 64 logischen Prozessoren testen können.

Hinweis Das mit Windows 7 eingeführte Konzept der Prozessorgruppen ermöglicht es vorhandenen APIs und DDIs, weiterhin auf Computern mit mehr als 64 logischen Prozessoren zu arbeiten. In der Regel werden die Prozessoren einer Gruppe durch eine Affinitätsmaske dargestellt, die 64 Bit lang ist. Jeder Computer mit mehr als 64 logischen Prozessoren verfügt zwangsläufig über mehr als eine Gruppe. Wenn ein Prozess erstellt wird, wird der Prozess einer bestimmten Gruppe zugewiesen. Standardmäßig können Threads des Prozesses auf allen logischen Prozessoren derselben Gruppe ausgeführt werden, obwohl die Threadaffinität explizit geändert werden kann. Aufrufe von API oder DDI, die eine Affinitätsmaske oder Prozessornummer als Argument, aber nicht eine Gruppennummer, annehmen, sind auf diese Prozessoren in der Gruppe des aufrufenden Threads beschränkt. Das gleiche gilt für APIs oder DDIs, die eine Affinitätsmaske oder Prozessornummer wie GetSystemInfo zurückgeben.

Ab Windows 7 kann eine Anwendung oder ein Treiber Funktionen verwenden, die die Legacy-APIs erweitern. Diese neuen gruppenfähigen Funktionen akzeptieren ein Gruppennummernargument, um eine Prozessornummer oder Affinitätsmaske eindeutig zu qualifizieren, und können daher Prozessoren außerhalb der Gruppe des aufrufenden Threads bearbeiten. Die Interaktion zwischen Treibern und Komponenten, die in verschiedenen Gruppen auf einem Computer ausgeführt werden, führt zu Fehlern, wenn Legacy-APIs oder DDIs beteiligt sind. Sie können die Legacy-APIs verwenden, die nicht gruppenfähig sind, unter Windows 7 und Windows Server 2008 R2. Die Anforderungen des Fahrers sind jedoch strenger. Für die funktionale Richtigkeit von Treibern auf Computern mit mehr als einer Prozessorgruppe müssen Sie alle DDI ersetzen, die entweder eine Prozessornummer oder -maske als Parameter ohne zugehörige Prozessorgruppe akzeptiert oder eine Prozessornummer oder -maske ohne zugehörige Prozessorgruppe zurückgibt. Diese legacy-nicht gruppenfähigen DDIs können auf einem Computer mit mehreren Prozessgruppen erratisch ausgeführt werden, da sich die abgeleitete Gruppe möglicherweise von dem unterscheidet, was der aufrufende Thread beabsichtigt hat. Daher müssen Treiber, die diese Legacy-DDIs verwenden und für Windows Server 2008 R2 bestimmt sind, aktualisiert werden, um die neuen erweiterten Versionen der Schnittstellen zu verwenden. Treiber, die keine Funktionen aufrufen, die Prozessoraffinitätsmasken oder Prozessornummern verwenden, funktionieren unabhängig von der Anzahl der Prozessoren ordnungsgemäß. Treiber, die die neuen DDIs aufrufen, können unter früheren Versionen von Windows ausgeführt werden, indem sie den procgrp.h-Header einschließen, WdmlibProcgrpInitialize aufrufen und mit der Prozessorgruppenkompatibilitätsbibliothek (procgrp.lib) verknüpfen.

Weitere Informationen zu den neuen gruppenfähigen APIs und DDIs erhalten Sie im Whitepaper Unterstützende Systeme mit mehr als 64 logischen Prozessoren: Richtlinien für Entwickler.

Um potenzielle prozessorgruppenbezogene Probleme in Treibern und Komponenten zu identifizieren, können Sie die Optionen BCDEdit /set verwenden. Mit den beiden BCD-Startkonfigurationseinstellungen Groupize und maxgroup können alle Computer mit mehreren logischen Prozessoren so konfiguriert werden, dass mehrere Prozessorgruppen unterstützt werden. Die Groupaware-Option ändert das Verhalten bestimmter DDIs und bearbeitet die Gruppenumgebung zu Testzwecken.

Erstellen mehrerer Prozessorgruppen durch Ändern der Gruppengröße

Die Option gruppieren gibt die maximale Anzahl logischer Prozessoren in einer Gruppe an. Standardmäßig ist die Option Gruppierung nicht festgelegt, und jeder Computer mit 64 oder weniger logischen Prozessoren verfügt über eine Gruppe, d. h. Gruppe 0.

Hinweis Ein physischer Prozessor oder ein Prozessorpaket kann über einen oder mehrere Kerne oder Prozessoreinheiten verfügen, die jeweils einen oder mehrere logische Prozessoren enthalten können. Das Betriebssystem betrachtet einen logischen Prozessor als eine logische Computing-Engine.

Um mehrere Prozessorgruppen zu erstellen, führen Sie BCDEdit /set in einem Eingabeaufforderungsfenster mit erhöhten Rechten aus, und geben Sie einen neuen Maxsize-Wert für die Gruppengröße an, der kleiner als die Gesamtanzahl logischer Prozessoren ist. Beachten Sie, dass die Gruppengrößeneinstellung zum Testen vorgesehen ist und Sie Versandsysteme nicht mit dieser Einstellung konfigurieren sollten. Der Maxsize-Wert kann auf eine beliebige Leistung von 2 zwischen 1 und 64 einschließlich festgelegt werden. Der Befehl verwendet die folgende Syntax:

bcdedit.exe /set groupsize maxsize

Der folgende Befehl legt beispielsweise die maximale Anzahl von Prozessoren in einer Gruppe auf 2 fest.

bcdedit.exe /set groupsize 2

Wenn ein Nicht-NUMA-Computer über 8 logische Prozessoren verfügt, erstellt das Festlegen der Gruppengröße auf 2 4 Prozessorgruppen mit jeweils 2 logischen Prozessoren.

Gruppe 0: 1 NUMA-Knoten mit 1 Paket mit 2 logischen Prozessoren

Gruppe 1: 1 NUMA-Knoten mit 1 Paket mit 2 logischen Prozessoren

Gruppe 2: 1 NUMA-Knoten mit 1 Paket mit 2 logischen Prozessoren

Gruppe 3: 1 NUMA-Knoten mit 1 Paket mit 2 logischen Prozessoren

Standardmäßig wird davon ausgegangen, dass ein Nicht-NUMA-Computer über einen NUMA-Knoten verfügt. Da NUMA-Knoten keine Gruppen umfassen können, erstellt das System nach dem Neustart des Computers einen Knoten für jede Gruppe.

Wenn die Gruppengröße auf einen Wert unter der Anzahl logischer Prozessoren in einem physischen Prozessorpaket (Socket) festgelegt ist, definiert das System sein Konzept eines Pakets beim Neustart so neu, dass das Paket keine Gruppe umfasst. Dies bedeutet, dass mehr Pakete als tatsächlich vorhanden sind, von Prozessortopologie-APIs gemeldet werden. Dies bedeutet auch, dass die Lizenzierungslimits für Windows-Prozessoren (Paketebene) möglicherweise verhindern, dass einige Prozessorpakete gestartet werden, wenn die Gruppengröße festgelegt ist.

Ein Prozessorpaket kann Gruppen umfassen, wenn mehrere NUMA-Knoten darin definiert sind und das System diese Knoten verschiedenen Gruppen zuweist.

Windows schränkt die Anzahl der unterstützten Gruppen ein. Diese Zahl kann sich mit neuen Versionen von Windows oder in Service Pack-Releases ändern. Treiber oder Komponenten sollten nicht von der Anzahl der von Windows unterstützten Gruppen als konstant abhängen. Der Grenzwert für die Anzahl von Gruppen könnte die Anzahl logischer Prozessoren einschränken, die gestartet werden dürfen, wenn kleine Werte für die Startoption "Gruppengröße" verwendet werden.

Verwenden Sie den folgenden BCDEdit-Befehl, um die Zum Testen verwendete Gruppengröße zu entfernen und zur Standardeinstellung von 64 logischen Prozessoren pro Gruppe zurückzukehren.

bcdedit.exe /deletevalue groupsize

Dieser Befehl entspricht dem Festlegen der Gruppengröße auf 64.

Maximieren der Anzahl von Prozessorgruppen

Die Option maxgroup ist eine weitere Möglichkeit zum Erstellen von Prozessorgruppen auf einem Computer mit mehreren logischen Prozessoren und NUMA-Knoten. Die Startoption maxgroup hat keine Auswirkungen auf Nicht-NUMA-Computer.

Führen Sie den Befehl BCDEdit /set in einem Eingabeaufforderungsfenster mit erhöhten Rechten aus, um die Anzahl der Gruppen zu maximieren. Der Befehl verwendet die folgende Syntax:

bcdedit.exe /set maxgroup on

Betrachten Sie beispielsweise einen Computer mit 2 NUMA-Knoten, 1 Prozessorpaket pro Knoten und 4 Prozessorkernen pro Paket für insgesamt 8 logische Prozessoren.

Die Standardgruppenkonfiguration lautet:

Gruppe 0: 8 logische Prozessoren, 2 Pakete, 2 NUMA-Knoten

Wenn Sie einenbcdedt.exe /set maxgroup für den Befehl eingeben, gefolgt von einem Neustart, ergibt der Befehl die folgende Gruppenkonfiguration:

Gruppe 0: 4 logische Prozessoren, 1 Paket, 1 NUMA-Knoten

Gruppe 1: 4 logische Prozessoren, 1 Paket, 1 NUMA-Knoten

Beachten Sie, dass NUMA-Knoten Gruppen so zugewiesen werden, dass die Anzahl der Gruppen maximiert wird.

Verwenden Sie den folgenden BCDEdit-Befehl , um die Standardeinstellung zurückzustellen.

bcdedit.exe /set maxgroup off

Testen Multiple-Group Kompatibilität durch Festlegen der Option "Gruppenfähiger Start"

Windows 7 und Windows Server 2008 R2 haben eine neue BCD-Option (Groupaware) eingeführt, die Treiber und Komponenten zwingt, mehrere Gruppen in einer Umgebung mit mehreren Prozessorgruppen zu kennen. Die Groupaware-Option ändert das Verhalten einer Reihe von Gerätetreiberfunktionen, um gruppenübergreifende Inkompatibilitäten in Treibern und Komponenten verfügbar zu machen. Sie können die Groupaware-Startoption zusammen mit den Optionen gruppieren und maxgroup verwenden, um die Treiberkompatibilität mit mehreren Gruppen zu testen, wenn ein Computer über 64 oder weniger aktive logische Prozessoren verfügt.

Wenn die Groupaware-Startoption festgelegt ist, stellt das Betriebssystem sicher, dass Prozesse in einer anderen Gruppe als Gruppe 0 gestartet werden. Dies erhöht die Wahrscheinlichkeit einer gruppenübergreifenden Interaktion zwischen Treibern und Komponenten. Die Option ändert auch das Verhalten der Legacyfunktionen, die nicht gruppenfähig sind, KeSetTargetProcessorDpc, KeSetSystemAffinityThreadEx und KeRevertToUserAffinityThreadEx, sodass sie immer mit der am höchsten nummerierten Gruppe arbeiten, die aktive logische Prozessoren enthält. Treiber, die eine dieser Legacyfunktionen aufrufen, sollten geändert werden, um ihre gruppenfähigen Entsprechungen (KeSetTargetProcessorDpcEx, KeSetSystemGroupAffinityThread und KeRevertToUserGroupAffinityThread) aufzurufen.

Verwenden Sie den folgenden BCDEdit /set-Befehl , um die Kompatibilität zu testen.

bcdedit.exe /set groupaware on
Legacyfunktionen, die nicht gruppenfähig sind Windows 7-Gruppenersetzung

KeSetTargetProcessorDpc

KeSetTargetProcessorDpcEx

KeSetSystemAffinityThreadEx

KeSetSystemGroupAffinityThread

KeRevertToUserAffinityThreadEx

KeRevertToUserGroupAffinityThread

Um den Computer auf die Standardeinstellung zurückzusetzen, verwenden Sie den folgenden BCDEdit-Befehl .

bcdedit.exe /set groupaware off