Sdílet prostřednictvím


Afinitita přerušení

Afinita přerušení je sada procesorů, které mohou přerušení obsluhovat. Každé zařízení má zásady spřažení. Operační systém používá zásadu spřažení k výpočtu spřažení pro přerušení daného zařízení. Zásady spřažení je možné zadat v nastavení souboru INF nebo registru zařízení. Správci můžou pomocí registru nastavit politiku spřažení pro přerušení.

Správci mohou v klíči registru \Interrupt Management\Affinity Policy nastavit následující položky:

  • DevicePolicy je hodnota REG_DWORD, která určuje politiku afinity. Možné hodnoty a jejich významy viz IRQ_DEVICE_POLICY. Microsoft doporučuje použít výchozí zásady, pokud je to možné.

  • AssignmentSetOverride může být hodnota REG_BINARY, REG_DWORD nebo REG_QWORD, která určuje masku KAFFINITY. Pro REG_BINARY musí být velikost menší nebo rovna velikosti KAFFINITY pro platformu a vstupní pořadí bajtů je little endian. Pokud je DevicePolicy 0x04 (IrqPolicySpecifiedProcessors), pak tato maska určuje sadu procesorů, ke kterým se mají přiřazovat přerušení zařízení.

Soubor INF ovladače může poskytovat výchozí nastavení hodnot registru. Tady je příklad nastavení hodnoty DevicePolicy na IrqPolicyOneCloseProcessor v souboru INF. Další informace najdete v tématu INF AddReg – direktiva.

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

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

Systém zpřístupní nastavení registru ovladači zařízení, když odešle ovladači IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP. Operační systém poskytuje IO_RESOURCE_DESCRIPTOR strukturu pro každé přerušení s Typ člen nastaven na CmResourceTypeInterrupt. V případě přerušení se zprávou je nastavena CM_RESOURCE_INTERRUPT_MESSAGE bit Příznaky členu; jinak je to jasné. Člen u.Interrupt popisuje nastavení přerušení.

Následující tabulka uvádí vztah mezi nastavením registru a členy u.Interrupt.

Hodnota registru Člen u.Interrupt
PolitikaZařízení AfinitníPolitika
AssignmentSetOverride ZaměřenéProcesory

Informace o KAFFINITY

Typ KAFFINITY je afinitní maska, která představuje sadu logických procesorů ve skupině.

typedef ULONG_PTR  KAFFINITY;

Typ KAFFINITY je 32 bitů v 32bitové verzi Windows a je 64 bitů v 64bitové verzi Windows.

Pokud skupina obsahuje n logických procesorů, procesory jsou očíslovány od 0 do n-1. Číslo procesoru i ve skupině je reprezentováno bitem i v maskě spřažení, kde i je v rozsahu 0 až n-1. Bity masky spřažení, které neodpovídají logickým procesorům, jsou vždy nulové.

Pokud například hodnota KAFFINITY identifikuje aktivní procesory ve skupině, bit masky pro procesor je jeden, pokud je procesor aktivní a je nula, pokud procesor není aktivní.

Počet bitů v masce spřažení určuje maximální počet logických procesorů ve skupině. Pro 64bitovou verzi Windows je maximální počet procesorů na skupinu 64. Pro 32bitovou verzi Windows je maximální počet procesorů na skupinu 32. Zavolejte rutinu KeQueryMaximumProcessorCountEx pro získání maximálního počtu procesorů na skupinu. Toto číslo závisí na konfiguraci hardwaru multiprocesorového systému, ale nikdy nesmí překročit pevné omezení 64 procesoru a 32 procesorů, které jsou nastaveny 64bitovou a 32bitovou verzí systému Windows.

Struktura GROUP_AFFINITY obsahuje masku spřažení a číslo skupiny. Číslo skupiny určuje skupinu, na kterou se vztahuje afinitní maska.

Rutiny jádra, které používají typ KAFFINITY, zahrnují IoConnectInterrupt, KeQueryActiveProcessorCounta KeQueryActiveProcessors.