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