Compartir a través de


Afinidad de interrupción

La afinidad de una interrupción es el conjunto de procesadores que pueden atender la interrupción. Cada dispositivo tiene una directiva de afinidad. El sistema operativo usa la directiva de afinidad para calcular la afinidad de las interrupciones de ese dispositivo. La directiva de afinidad se puede especificar en la configuración del registro o el archivo INF del dispositivo. Los administradores pueden usar el Registro para establecer una directiva de afinidad para una interrupción.

Los administradores pueden establecer las siguientes entradas en la clave del Registro \Interrupt Management\Affinity Policy :

  • DevicePolicy es un valor de REG_DWORD que especifica una directiva de afinidad. Para conocer los valores posibles y sus significados, consulte IRQ_DEVICE_POLICY. Microsoft recomienda usar la directiva predeterminada si procede.

  • AssignmentSetOverride puede ser un valor REG_BINARY, REG_DWORD o REG_QWORD que especifica una máscara KAFFINITY . Para REG_BINARY, el tamaño debe ser menor o igual que el tamaño de KAFFINITY para la plataforma y el orden de bytes de entrada es poco endian. Si DevicePolicy es 0x04 (IrqPolicySpecifiedProcessors), esta máscara especifica un conjunto de procesadores a los que asignar las interrupciones del dispositivo.

El archivo INF de un controlador puede proporcionar la configuración predeterminada para los valores del Registro. Este es un ejemplo de cómo establecer el valor DevicePolicy en IrqPolicyOneCloseProcessor en el archivo INF. Para obtener más información, consulte Directiva AddReg de INF.

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

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

El sistema hace que la configuración del Registro esté disponible para el controlador del dispositivo cuando envía el IRP de IRP_MN_FILTER_RESOURCE_REQUIREMENTS al controlador. El sistema operativo proporciona una estructura IO_RESOURCE_DESCRIPTOR para cada interrupción con el miembro Type establecido en CmResourceTypeInterrupt. En el caso de una interrupción señalada por mensaje, se establece el CM_RESOURCE_INTERRUPT_MESSAGE bit del miembro Flags ; de lo contrario, está claro. El miembro u.Interrupt describe la configuración de la interrupción.

En la tabla siguiente se proporciona la correspondencia entre la configuración del Registro y los miembros de u.Interrupt.

Valor del Registro Miembro de you.Interrupt
DevicePolicy AffinityPolicy
AssignmentSetOverride TargetedProcessors

Acerca de KAFFINITY

El tipo KAFFINITY es una máscara de afinidad que representa un conjunto de procesadores lógicos de un grupo.

typedef ULONG_PTR  KAFFINITY;

El tipo KAFFINITY es de 32 bits en una versión de 32 bits de Windows y es de 64 bits en una versión de 64 bits de Windows.

Si un grupo contiene n procesadores lógicos, los procesadores se numeran de 0 a n-1. El número de procesador i del grupo se representa mediante bit i en la máscara de afinidad, donde i está en el intervalo de 0 a n-1. Los bits de máscara de afinidad que no se corresponden con los procesadores lógicos siempre son cero.

Por ejemplo, si un valor KAFFINITY identifica los procesadores activos de un grupo, el bit de máscara de un procesador es uno si el procesador está activo y es cero si el procesador no está activo.

El número de bits de la máscara de afinidad determina el número máximo de procesadores lógicos de un grupo. Para una versión de 64 bits de Windows, el número máximo de procesadores por grupo es de 64. Para una versión de 32 bits de Windows, el número máximo de procesadores por grupo es 32. Llame a la rutina KeQueryMaximumProcessorCountEx para obtener el número máximo de procesadores por grupo. Este número depende de la configuración de hardware del sistema multiprocesador, pero nunca puede superar los límites fijos de 64 procesadores y 32 procesadores establecidos por las versiones de 64 y 32 bits de Windows, respectivamente.

La estructura GROUP_AFFINITY contiene una máscara de afinidad y un número de grupo. El número de grupo identifica el grupo al que se aplica la máscara de afinidad.

Las rutinas de kernel que usan el tipo KAFFINITY incluyen IoConnectInterrupt, KeQueryActiveProcessorCount y KeQueryActiveProcessors.