中断相关性

中断的相关性是一组可以服务中断的处理器。 每个设备都有 关联策略。 操作系统使用关联策略来计算该设备中断的相关性。 可以在设备的 INF 文件或注册表设置中指定关联策略。 管理员可以使用注册表设置中断的关联策略。

管理员可以在 \Interrupt Management\Affinity Policy 注册表项下设置以下条目:

  • DevicePolicy 是指定关联策略的REG_DWORD值。 有关可能的值及其含义,请参阅 IRQ_DEVICE_POLICY。 Microsoft建议使用默认策略(如果适用)。

  • AssignmentSetOverride 可以是指定 KAFFINITY 掩码的REG_BINARY、REG_DWORD或REG_QWORD值。 对于REG_BINARY,大小必须小于或等于平台的 KAFFINITY 大小,输入字节顺序很少。 如果 DevicePolicy 是0x04(IrqPolicySpecifiedProcessors),则此掩码指定要将设备的中断分配给的一组处理器。

驱动程序的 INF 文件可以为注册表值提供默认设置。 下面是如何在 INF 文件中将 DevicePolicy设置为 IrqPolicyOneCloseProcessor 的示例。 有关详细信息,请参阅 INF AddReg 指令

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

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

当向驱动程序发送 IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP 时,系统将注册表设置提供给设备的驱动程序。 操作系统为每个中断提供一个IO_RESOURCE_DESCRIPTOR结构,类型成员设置为 CmResourceTypeInterrupt。 对于消息信号中断,将设置 Flags 成员的CM_RESOURCE_INTERRUPT_MESSAGE位;否则,这是明确的。 u.Interrupt 成员描述中断的设置。

下表提供了注册表设置和 u.Interrupt 成员之间的对应关系。

注册表值 you.Interrupt 的成员
DevicePolicy AffinityPolicy
AssignmentSetOverride TargetedProcessors

关于 KAFFINITY

KAFFINITY 类型是一个地缘掩码,表示组中的一组逻辑处理器。

typedef ULONG_PTR  KAFFINITY;

KAFFINITY 类型在 32 位版本的 Windows 上为 32 位,在 64 位版本的 Windows 上为 64 位。

如果组包含 n 个逻辑处理器,则处理器编号为 0 到 n-1。 组中的处理器编号 i 由地缘掩码中的位 i 表示,其中 i 在 0 到 n-1 的范围内。 与逻辑处理器不对应的关联掩码位始终为零。

例如,如果 KAFFINITY 值标识组中的活动处理器,则处理器的掩码位为一个(如果处理器处于活动状态,如果处理器未处于活动状态,则为零)。

地缘掩码中的位数决定了组中逻辑处理器的最大数目。 对于 64 位版本的 Windows,每个组的最大处理器数为 64。 对于 32 位版本的 Windows,每个组的最大处理器数为 32。 调用 KeQueryMaximumProcessorCountEx 例程以获取每个组的最大处理器数。 此数字取决于多处理器系统的硬件配置,但不能分别超过由 64 位和 32 位版本的 Windows 设置的固定 64 处理器和 32 处理器限制。

GROUP_AFFINITY结构包含地缘掩码和组号。 组号标识关联掩码应用到的组。

使用 KAFFINITY 类型的内核例程包括 IoConnectInterruptKeQueryActiveProcessorCount KeQueryActiveProcessors