中斷親和性
中斷的親和性是一組可以服務中斷的處理器。 每個裝置都有 親和性原則。 操作系統會使用同質原則來計算該裝置中斷的親和性。 親和性原則可以在裝置的 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 結構,並將 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 類型的核心例程包括 IoConnectInterrupt、KeQueryActiveProcessorCount 和 KeQueryActiveProcessors。