中斷親和性

中斷的 親和性 是可服務中斷的處理器集合。 每個裝置都有 親和性原則。 作業系統會使用親和性原則來計算該裝置中斷的親和性。 親和性原則可以在裝置的 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 大小,而輸入位元組順序則為小到尾。 如果 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 結構,並將 Type 成員設定為 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 是以 affinity mask 中的位 i 表示,其中 i 在範圍 0 到 n-1。 未對應至邏輯處理器的親和性遮罩位一律為零。

例如,如果 KAFFINITY 值識別群組中的使用中處理器,處理器的遮罩位會是處理器為使用中,如果處理器為使用中,則為零。如果處理器不是使用中,則為零。

affinity mask 中的位數目會決定群組中的邏輯處理器數目上限。 對於 64 位版本的 Windows,每個群組的處理器數目上限為 64。 對於 32 位版本的 Windows,每個群組的處理器數目上限為 32。 呼叫 KeQueryMaximumProcessorCountEx 常式,以取得每個群組的處理器數目上限。 此數位取決於多處理器系統的硬體組態,但不能分別超過 64 位和 32 位版本的 Windows 所設定的固定 64 處理器和 32 處理器限制。

GROUP_AFFINITY結構包含親和性遮罩和組號。 群組編號會識別套用 affinity mask 的群組。

使用 KAFFINITY 類型的核心常式包括 IoConnectInterruptKeQueryActiveProcessorCountKeQueryActiveProcessors