Condividi tramite


Parametri di avvio per testare i driver per il supporto di più gruppi di processori

Windows 7 e Windows Server 2008 R2 forniscono supporto per i computer con più di 64 processori. Questo supporto è reso possibile introducendo gruppi di processori. A scopo di test, è possibile configurare qualsiasi computer con più processori logici per avere più gruppi di processori limitando le dimensioni del gruppo. Ciò significa che è possibile testare i driver e i componenti per la compatibilità di più gruppi di processori nei computer con 64 o meno processori logici.

Nota Il concetto di gruppi di processori, introdotti con Windows 7, consente alle API e alle DDI esistenti di continuare a lavorare sui computer con più di 64 processori logici. In genere, i processori di un gruppo sono rappresentati da una maschera di affinità, che è lunga 64 bit. Qualsiasi computer con più di 64 processori logici avrà necessariamente più di un gruppo. Quando viene creato un processo, il processo viene assegnato a un gruppo specifico. Per impostazione predefinita, i thread del processo possono essere eseguiti in tutti i processori logici dello stesso gruppo, anche se l'affinità del thread può essere modificata in modo esplicito. Le chiamate a qualsiasi API o DDI che accettano un numero di maschera di affinità o di processore come argomento, ma non un numero di gruppo, è limitato a influire o segnalare i processori nel gruppo del thread chiamante. Lo stesso vale per le API o le DDI che restituiscono una maschera di affinità o un numero di processore, ad esempio GetSystemInfo.

A partire da Windows 7, un'applicazione o un driver può usare funzioni che estendono le API legacy. Queste nuove funzioni con riconoscimento del gruppo accettano un argomento numero di gruppo per qualificare in modo non ambiguo un numero di processore o una maschera di affinità, pertanto può modificare i processori all'esterno del gruppo del thread chiamante. L'interazione tra driver e componenti in esecuzione in gruppi diversi all'interno di un computer introduce il potenziale per i bug quando sono coinvolte API legacy o DDI. È possibile usare le API non con riconoscimento del gruppo legacy in Windows 7 e Windows Server 2008 R2. Tuttavia, i requisiti dei driver sono più rigorosi. Per la correttezza funzionale dei driver nei computer che hanno più di un gruppo di processori, è necessario sostituire qualsiasi DDI che accetta un numero di processore o una maschera come parametro senza un gruppo di processori accompagnatore o restituisce un numero di processore o una maschera senza un gruppo di processori accompagnato. Queste DDI non con riconoscimento del gruppo legacy possono eseguire errori in un computer con più gruppi di processi perché il gruppo dedotto può essere diverso da quello previsto dal thread chiamante. Pertanto, i driver che usano queste DDI legacy e sono destinati a Windows Server 2008 R2 devono essere aggiornati per usare le nuove versioni estese delle interfacce. I driver che non chiamano funzioni che usano maschere di affinità processore o numeri di processore funzioneranno correttamente, indipendentemente dal numero di processori. I driver che chiamano i nuovi DDI possono essere eseguiti nelle versioni precedenti di Windows includendo l'intestazione procgrp.h, chiamando WdmlibProcgrpInitialize e collegandosi alla libreria di compatibilità del gruppo di processori (procgrp.lib).

Per altre informazioni sulle nuove API e DDI con riconoscimento del gruppo, scaricare il white paper Support Systems con più di 64 processori logici: Linee guida per sviluppatori.

Per identificare potenziali problemi correlati al gruppo di processori nei driver e nei componenti, è possibile usare le opzioni BCDEdit /set . Le due impostazioni di configurazione di avvio BCD, gruppizza e maxgroup, possono configurare qualsiasi computer con più processori logici per supportare più gruppi di processori. L'opzione groupaware modifica il comportamento di determinati DDI e modifica l'ambiente di gruppo a scopo di test.

Creare più gruppi di processori modificando le dimensioni del gruppo

L'opzione Groupsize specifica il numero massimo di processori logici in un gruppo. Per impostazione predefinita, l'opzione groupsize non è impostata e qualsiasi computer con 64 o meno processori logici ha un gruppo, ovvero un gruppo 0.

Nota Un processore fisico o un pacchetto processore può avere una o più core o unità processore, ognuna delle quali può contenere uno o più processori logici. Il sistema operativo considera un processore logico come un motore di calcolo logico.

Per creare più gruppi di processori, eseguire BCDEdit /set in una finestra del prompt dei comandi con privilegi elevati e specificare un nuovo valore maxsize per groupsize minore del numero totale di processori logici. Si noti che l'impostazione delle dimensioni del gruppo è per il test e non è consigliabile configurare i sistemi di spedizione con questa impostazione. Il valore maxsize può essere impostato su qualsiasi potenza compresa tra 1 e 64 inclusi. Il comando usa la sintassi seguente:

bcdedit.exe /set groupsize maxsize

Ad esempio, il comando seguente imposta il numero massimo di processori in un gruppo su 2.

bcdedit.exe /set groupsize 2

Se un computer non NUMA ha 8 processori logici, impostando i gruppi su 2 crea 4 gruppi di processori con 2 processori logici ognuno.

Gruppo 0: 1 nodo NUMA contenente 1 pacchetto di 2 processori logici

Gruppo 1: 1 nodo NUMA contenente 1 pacchetto di 2 processori logici

Gruppo 2: 1 nodo NUMA contenente 1 pacchetto di 2 processori logici

Gruppo 3: 1 nodo NUMA contenente 1 pacchetto di 2 processori logici

Per progettazione, un computer non NUMA viene considerato come un nodo NUMA. Poiché i nodi NUMA non possono estendersi su gruppi, il sistema crea un nodo per ogni gruppo dopo il riavvio del computer.

Se groupsize è impostato su un valore minore del numero di processori logici in un pacchetto del processore fisico (socket), il sistema ridefinirà il concetto di un pacchetto al riavvio in modo che il pacchetto non si estende su un gruppo. Ciò significa che più pacchetti che sono effettivamente presenti sono segnalati dalle API della topologia del processore. Ciò significa anche che i limiti delle licenze del processore Windows (a livello di pacchetto) potrebbero impedire l'avvio di alcuni pacchetti del processore quando viene impostato il raggruppamento .

Un pacchetto processore può estendersi su gruppi se ha più nodi NUMA definiti all'interno e il sistema assegna questi nodi a gruppi diversi.

Windows limita il numero di gruppi supportati. Questo numero potrebbe cambiare con nuove versioni di Windows o nelle versioni del Service Pack. I driver o i componenti non devono dipendere dal numero di gruppi supportati da Windows come costanti. Il limite per il numero di gruppi potrebbe limitare il numero di processori logici consentiti per iniziare quando vengono usati valori di piccole dimensioni per l'opzione di avvio gruppi.

Per rimuovere l'impostazione gruppi usata per il test e tornare all'impostazione predefinita di 64 processori logici per gruppo, usare il comando BCDEdit seguente.

bcdedit.exe /deletevalue groupsize

Questo comando è l'equivalente dell'impostazione di gruppi su 64.

Ottimizzare il numero di gruppi di processori

L'opzione maxgroup è un altro modo per creare gruppi di processori in un computer con più processori logici e nodi NUMA. L'opzione di avvio maxgroup non ha alcun effetto sui computer non NUMA.

Per ottimizzare il numero di gruppi, eseguire il comando BCDEdit /set in una finestra del prompt dei comandi con privilegi elevati. Il comando usa la sintassi seguente:

bcdedit.exe /set maxgroup on

Si consideri ad esempio un computer con 2 nodi NUMA, 1 pacchetto processore per nodo e 4 core di processore per pacchetto, per un totale di 8 processori logici.

La configurazione predefinita del gruppo è:

Gruppo 0: 8 processori logici, 2 pacchetti, 2 nodi NUMA

Se si immette un bcdedt.exe /set maxgroup sul comando seguito da un riavvio, il comando restituisce la configurazione del gruppo seguente:

Gruppo 0: 4 processori logici, 1 pacchetto, 1 nodo NUMA

Gruppo 1: 4 processori logici, 1 pacchetto, 1 nodo NUMA

Si noti che i nodi NUMA vengono assegnati ai gruppi in modo da ottimizzare il numero di gruppi.

Per tornare all'impostazione predefinita, usare il comando BCDEdit seguente.

bcdedit.exe /set maxgroup off

Testare Multiple-Group compatibilità impostando l'opzione di avvio con riconoscimento del gruppo

Windows 7 e Windows Server 2008 R2 hanno introdotto una nuova opzione BCD (groupaware) che impone ai driver e ai componenti di essere consapevoli di più gruppi in un ambiente di più gruppi di processori. L'opzione groupaware modifica il comportamento di un set di funzioni driver di dispositivo per esporre le incompatibilità tra gruppi nei driver e nei componenti. È possibile usare l'opzione di avvio groupaware insieme alle opzioni gruppi e maxgroup per testare la compatibilità dei driver con più gruppi quando un computer ha 64 o meno processori logici attivi.

Quando l'opzione di avvio groupaware è impostata , il sistema operativo garantisce che i processi vengano avviati in un gruppo diverso da gruppo 0. Ciò aumenta le probabilità di interazione tra gruppi tra driver e componenti. L'opzione modifica anche il comportamento delle funzioni legacy che non sono a conoscenza del gruppo, KeSetTargetProcessorDpc, KeSetSystemAffinityThreadEx e KeRevertToUserAffinityThreadEx, in modo che funzionino sempre sul gruppo numerato più alto che contiene processori logici attivi. I driver che chiamano una di queste funzioni legacy devono essere modificati per chiamare le controparti con riconoscimento del gruppo (KeSetTargetProcessorDpcEx, KeSetSystemGroupAffinityThread e KeRevertToUserGroupAffinityThread),

Per testare la compatibilità, usare il comando BCDEdit /set seguente.

bcdedit.exe /set groupaware on
Funzioni non raggruppate legacy Sostituzione con riconoscimento del gruppo di Windows 7

KeSetTargetProcessorDpc

KeSetTargetProcessorDpcEx

KeSetSystemAffinityThreadEx

KeSetSystemGroupAffinityThread

KeRevertToUserAffinityThreadEx

KeRevertToUserGroupAffinityThread

Per reimpostare il computer nell'impostazione predefinita, usare il comando BCDEdit seguente.

bcdedit.exe /set groupaware off