Partager via


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 le fichier INF ou les paramètres du Registre de l’appareil.

À compter de Windows Vista, 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 \Gestion des interruptions\Stratégie d’affinité :

  • DevicePolicy est une valeur REG_DWORD qui spécifie une stratégie d’affinité. Pour connaître les valeurs possibles et leur signification, 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 de 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 à qui attribuer 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 Directive AddReg INF.

[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 de 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, c’est clair. Le membre u.Interrupt décrit les paramètres de l’interruption.

Le tableau suivant indique 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 de 32 bits sur une version 32 bits de Windows et de 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 dans le groupe est représenté par le bit i dans le masque d’affinité, où i est compris entre 0 et 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 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.