Unterbrechen der Affinität

Die Affinität eines Interrupts ist der Satz von Prozessoren, die den Interrupt verwalten können. Jedes Gerät verfügt über eine Affinitätsrichtlinie. Das Betriebssystem verwendet die Affinitätsrichtlinie, um die Affinität für die Unterbrechungen dieses Geräts zu berechnen. Die Affinitätsrichtlinie kann in den INF-Datei- oder Registrierungseinstellungen des Geräts angegeben werden.

Ab Windows Vista können Administratoren die Registrierung verwenden, um eine Affinitätsrichtlinie für einen Interrupt festzulegen.

Administratoren können die folgenden Einträge unter dem Registrierungsschlüssel \Interrupt Management\Affinity Policy festlegen:

  • DevicePolicy ist ein REG_DWORD Wert, der eine Affinitätsrichtlinie angibt. Mögliche Werte und deren Bedeutung finden Sie unter IRQ_DEVICE_POLICY. Microsoft empfiehlt, ggf. die Standardrichtlinie zu verwenden.

  • AssignmentSetOverride kann ein REG_BINARY-, REG_DWORD- oder REG_QWORD-Wert sein, der eine KAFFINITY-Maske angibt. Für REG_BINARY muss die Größe kleiner oder gleich der KAFFINITY-Größe für die Plattform sein, und die Eingabebytereihenfolge ist little endian. Wenn DevicePolicy 0x04 ist (IrqPolicySpecifiedProcessors), gibt diese Maske einen Satz von Prozessoren an, der die Unterbrechungen des Geräts zugewiesen werden sollen.

Die INF-Datei eines Treibers kann Standardeinstellungen für die Registrierungswerte bereitstellen. Hier sehen Sie ein Beispiel für das Festlegen des DevicePolicy-Werts auf IrqPolicyOneCloseProcessor in der INF-Datei. Weitere Informationen finden Sie unter INF AddReg-Direktive.

[install-section-name.HW]
AddReg=add-registry-section 

[add-registry-section]
HKR, "Interrupt Management\Affinity Policy", DevicePolicy, 0x00010001, 2

Das System stellt die Registrierungseinstellungen für den Gerätetreiber zur Verfügung, wenn die IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP an den Treiber gesendet wird. Das Betriebssystem stellt eine IO_RESOURCE_DESCRIPTOR-Struktur für jeden Interrupt bereit, wobei der Type-Member auf CmResourceTypeInterrupt festgelegt ist. Bei einem Interrupt mit Nachrichtensignal wird das CM_RESOURCE_INTERRUPT_MESSAGE Bit des Flags-Elements festgelegt. andernfalls ist es eindeutig. Das u.Interrupt-Element beschreibt die Einstellungen für den Interrupt.

Die folgende Tabelle enthält die Korrespondenz zwischen Registrierungseinstellungen und Mitgliedern von u.Interrupt.

Registrierungswert Mitglied von you.Interrupt

DevicePolicy

AffinityPolicy

AssignmentSetOverride

TargetedProcessors

Über KAFFINITY

Der KAFFINITY-Typ ist eine Affinitätsmaske, die einen Satz logischer Prozessoren in einer Gruppe darstellt.

typedef ULONG_PTR  KAFFINITY;

Der KAFFINITY-Typ ist unter einer 32-Bit-Version von Windows 32 Bit und in einer 64-Bit-Version von Windows 64 Bit.

Wenn eine Gruppe n logische Prozessoren enthält, werden die Prozessoren von 0 bis n-1 nummeriert. Die Prozessornummer i in der Gruppe wird durch bit i in der Affinitätsmaske dargestellt, wobei i im Bereich von 0 bis n-1 liegt. Affinitätsmaskbits, die nicht logischen Prozessoren entsprechen, sind immer null.

Wenn beispielsweise ein KAFFINITY-Wert die aktiven Prozessoren in einer Gruppe identifiziert, ist das Maskenbit für einen Prozessor eins, wenn der Prozessor aktiv ist, und null, wenn der Prozessor nicht aktiv ist.

Die Anzahl der Bits in der Affinitätsmaske bestimmt die maximale Anzahl logischer Prozessoren in einer Gruppe. Bei einer 64-Bit-Version von Windows beträgt die maximale Anzahl von Prozessoren pro Gruppe 64. Bei einer 32-Bit-Version von Windows beträgt die maximale Anzahl von Prozessoren pro Gruppe 32. Rufen Sie die KeQueryMaximumProcessorCountEx-Routine auf, um die maximale Anzahl von Prozessoren pro Gruppe zu erhalten. Diese Zahl hängt von der Hardwarekonfiguration des Multiprozessorsystems ab, darf aber niemals die festen Grenzwerte von 64 Prozessoren und 32 Prozessoren überschreiten, die von den 64-Bit- bzw. 32-Bit-Versionen von Windows festgelegt werden.

Die GROUP_AFFINITY-Struktur enthält eine Affinitätsmaske und eine Gruppennummer. Die Gruppennummer gibt die Gruppe an, auf die die Affinitätsmaske angewendet wird.

Kernelroutinen, die den KAFFINITY-Typ verwenden, umfassen IoConnectInterrupt, KeQueryActiveProcessorCount und KeQueryActiveProcessors.