中断相关性
中断的 相关性 是可为中断提供服务的处理器集。 每个设备都有 一个关联策略。 操作系统使用关联策略来计算该设备中断的相关性。 可以在设备的 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 类型的内核例程包括 IoConnectInterrupt、 KeQueryActiveProcessorCount 和 KeQueryActiveProcessors。