Condividi tramite


Affinità di interrupt

L'affinità di un interrupt è il set di processori in grado di garantire l'interruzione. Ogni dispositivo ha un criterio di affinità. Il sistema operativo usa i criteri di affinità per calcolare l'affinità per gli interrupt del dispositivo. I criteri di affinità possono essere specificati nel file INF del dispositivo o nelle impostazioni del Registro di sistema. Gli amministratori possono usare il Registro di sistema per impostare un criterio di affinità per un interrupt.

Gli amministratori possono impostare le voci seguenti nella chiave del Registro di sistema \Interrupt Management\Affinity Policy :

  • DevicePolicy è un valore REG_DWORD che specifica un criterio di affinità. Per i valori possibili e i relativi significati, vedere IRQ_DEVICE_POLICY. Microsoft consiglia di usare i criteri predefiniti, se applicabile.

  • AssignmentSetOverride può essere un valore REG_BINARY, REG_DWORD o REG_QWORD che specifica una maschera KAFFINITY . Per REG_BINARY, le dimensioni devono essere minori o uguali alle dimensioni KAFFINITY per la piattaforma e l'ordine dei byte di input è little endian. Se DevicePolicy è 0x04 (IrqPolicySpecifiedProcessors), questa maschera specifica un set di processori a cui assegnare gli interrupt del dispositivo.

Il file INF di un driver può fornire le impostazioni predefinite per i valori del Registro di sistema. Ecco un esempio di come impostare il valore DevicePolicy su IrqPolicyOneCloseProcessor nel file INF. Per altre informazioni, vedere Direttiva INF AddReg.

[install-section-name.HW]
AddReg=add-registry-section 

[add-registry-section]
HKR, "Interrupt Management\Affinity Policy", DevicePolicy, 0x00010001, 2

Il sistema rende disponibili le impostazioni del Registro di sistema per il driver del dispositivo quando invia il IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP al driver. Il sistema operativo fornisce una struttura IO_RESOURCE_DESCRIPTOR per ogni interrupt con il membro Type impostato su CmResourceTypeInterrupt. Per un interrupt segnalato dal messaggio, il bit CM_RESOURCE_INTERRUPT_MESSAGE del membro Flags è impostato; in caso contrario, è chiaro. Il membro u.Interrupt descrive le impostazioni per l'interrupt.

La tabella seguente fornisce la corrispondenza tra le impostazioni del Registro di sistema e i membri di u.Interrupt.

Valore del Registro di sistema Membro di you.Interrupt
DevicePolicy AffinityPolicy
AssignmentSetOverride TargetProcessors

Informazioni su KAFFINITY

Il tipo KAFFINITY è una maschera di affinità che rappresenta un set di processori logici in un gruppo.

typedef ULONG_PTR  KAFFINITY;

Il tipo KAFFINITY è a 32 bit in una versione a 32 bit di Windows ed è a 64 bit in una versione a 64 bit di Windows.

Se un gruppo contiene n processori logici, i processori vengono numerati da 0 a n-1. Il numero del processore i nel gruppo è rappresentato da bit i nella maschera di affinità, dove i è compreso nell'intervallo da 0 a n-1. I bit affinity mask che non corrispondono ai processori logici sono sempre zero.

Ad esempio, se un valore KAFFINITY identifica i processori attivi in un gruppo, il bit mask per un processore è uno se il processore è attivo e è zero se il processore non è attivo.

Il numero di bit nella maschera di affinità determina il numero massimo di processori logici in un gruppo. Per una versione a 64 bit di Windows, il numero massimo di processori per gruppo è 64. Per una versione a 32 bit di Windows, il numero massimo di processori per gruppo è 32. Chiamare la routine KeQueryMaximumProcessorCountEx per ottenere il numero massimo di processori per gruppo. Questo numero dipende dalla configurazione hardware del sistema multiprocessore, ma non può mai superare i limiti fissi a 64 processori e 32 processori impostati rispettivamente dalle versioni a 64 bit e a 32 bit di Windows.

La struttura GROUP_AFFINITY contiene una maschera di affinità e un numero di gruppo. Il numero di gruppo identifica il gruppo a cui si applica la maschera di affinità.

Le routine del kernel che usano il tipo KAFFINITY includono IoConnectInterrupt, KeQueryActiveProcessorCount e KeQueryActiveProcessors.