中断相关性

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

从 Windows Vista 开始,管理员可以使用注册表为中断设置相关性策略。

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

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

  • AssignmentSetOverride 可以是指定 KAFFINITY 掩码的REG_BINARY、REG_DWORD或REG_QWORD值。 对于REG_BINARY,大小必须小于或等于平台的 KAFFINITY 大小,并且输入字节顺序为小 endian。 如果 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 成员之间的对应关系。

注册表值 你的成员。中断

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 值标识组中的活动处理器,如果处理器处于活动状态,则处理器的掩码位为 1;如果处理器不处于活动状态,则为零。

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

GROUP_AFFINITY 结构包含一个相关性掩码和一个组编号。 组号标识应用相关性掩码的组。

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