Affinité d’interruption
L’affinité d’une interruption est l’ensemble de processeurs qui peuvent traiter l’interruption. Chaque appareil a une stratégie d’affinité. Le système d’exploitation utilise la stratégie d’affinité pour calculer l’affinité pour les interruptions de cet appareil. La stratégie d’affinité peut être spécifiée dans les paramètres du fichier INF ou du Registre de l’appareil. Les administrateurs peuvent utiliser le Registre pour définir une stratégie d’affinité pour une interruption.
Les administrateurs peuvent définir les entrées suivantes sous la clé de Registre \Interrupt Management\Affinity Policy :
DevicePolicy est une valeur REG_DWORD qui spécifie une stratégie d’affinité. Pour connaître les valeurs possibles et leurs significations, consultez IRQ_DEVICE_POLICY. Microsoft recommande d’utiliser la stratégie par défaut le cas échéant.
AssignmentSetOverride peut être une valeur REG_BINARY, REG_DWORD ou REG_QWORD qui spécifie un masque KAFFINITY . Pour REG_BINARY, la taille doit être inférieure ou égale à la taille KAFFINITY pour la plateforme, et l’ordre d’octet d’entrée est peu endian. Si DevicePolicy est 0x04 (IrqPolicySpecifiedProcessors), ce masque spécifie un ensemble de processeurs pour affecter les interruptions de l’appareil.
Le fichier INF d’un pilote peut fournir des paramètres par défaut pour les valeurs de Registre. Voici un exemple de définition de la valeur DevicePolicy sur IrqPolicyOneCloseProcessor dans le fichier INF. Pour plus d’informations, consultez la section Directive INF AddReg.
[install-section-name.HW]
AddReg=add-registry-section
[add-registry-section]
HKR, "Interrupt Management\Affinity Policy", DevicePolicy, 0x00010001, 2
Le système met les paramètres du Registre à la disposition du pilote de l’appareil lorsqu’il envoie le IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP au pilote. Le système d’exploitation fournit une structure IO_RESOURCE_DESCRIPTOR pour chaque interruption avec le membre Type défini sur CmResourceTypeInterrupt. Pour une interruption signalée par un message, le bit CM_RESOURCE_INTERRUPT_MESSAGE du membre Flags est défini ; sinon, il est clair. Le membre u.Interrupt décrit les paramètres de l’interruption.
Le tableau suivant fournit la correspondance entre les paramètres du Registre et les membres de u.Interrupt.
Valeur de Registre | Membre de you.Interrupt |
---|---|
DevicePolicy | AffinityPolicy |
AssignmentSetOverride | TargetedProcessors |
À propos de KAFFINITY
Le type KAFFINITY est un masque d’affinité qui représente un ensemble de processeurs logiques dans un groupe.
typedef ULONG_PTR KAFFINITY;
Le type KAFFINITY est 32 bits sur une version 32 bits de Windows et 64 bits sur une version 64 bits de Windows.
Si un groupe contient n processeurs logiques, les processeurs sont numérotés de 0 à n-1. Le numéro de processeur i du groupe est représenté par le bit i dans le masque d’affinité, où i se trouve dans la plage 0 à n-1. Les bits de masque d’affinité qui ne correspondent pas aux processeurs logiques sont toujours zéro.
Par exemple, si une valeur KAFFINITY identifie les processeurs actifs dans un groupe, le bit de masque d’un processeur est un si le processeur est actif et est égal à zéro si le processeur n’est pas actif.
Le nombre de bits dans le masque d’affinité détermine le nombre maximal de processeurs logiques dans un groupe. Pour une version 64 bits de Windows, le nombre maximal de processeurs par groupe est de 64. Pour une version 32 bits de Windows, le nombre maximal de processeurs par groupe est de 32. Appelez la routine KeQueryMaximumProcessorCountEx pour obtenir le nombre maximal de processeurs par groupe. Ce nombre dépend de la configuration matérielle du système multiprocesseur, mais ne peut jamais dépasser les limites fixes de 64 processeurs et de 32 processeurs définies par les versions 64 bits et 32 bits de Windows, respectivement.
La structure GROUP_AFFINITY contient un masque d’affinité et un numéro de groupe. Le numéro de groupe identifie le groupe auquel le masque d’affinité s’applique.
Les routines de noyau qui utilisent le type KAFFINITY incluent IoConnectInterrupt, KeQueryActiveProcessorCount et KeQueryActiveProcessors.