Skupiny procesorů
64bitové verze systému Windows 7 a Windows Server 2008 R2 a novější verze systému Windows podporují na jednom počítači více než 64 logických procesorů. Tato funkce není k dispozici ve 32bitových verzích Windows.
Systémy s více než jedním fyzickým procesorem nebo systémy s fyzickými procesory, které mají více jader, poskytují operačnímu systému více logických procesorů. logický procesor je jedním logickým výpočetním modulem z pohledu operačního systému, aplikace nebo ovladače. základní je jedna jednotka procesoru, která se může skládat z jednoho nebo více logických procesorů. fyzický procesor se může skládat z jednoho nebo více jader. Fyzický procesor je stejný jako balíček procesoru, soket nebo procesor.
Podpora systémů, které mají více než 64 logických procesorů, vychází z konceptu skupiny procesorů , což je statická sada až 64 logických procesorů, které se považují za jednu plánovací entitu. Skupiny procesorů se očíslují od 0. Systémy s méně než 64 logickými procesory mají vždy jednu skupinu Group 0.
Windows Server 2008, Windows Vista, Windows Server 2003 a Windows XP: skupiny procesorů nejsou podporovány.
Po spuštění systému operační systém vytvoří skupiny procesorů a přiřadí ke skupinám logické procesory. Pokud je systém schopný přidávat procesory za provozu, operační systém umožňuje prostor ve skupinách pro procesory, které můžou přijít, když je systém spuštěný. Operační systém minimalizuje počet skupin v systému. Například systém s 128 logickými procesory by měl v každé skupině dvě skupiny procesorů se 64 procesory, nikoli čtyři skupiny s 32 logickými procesory v každé skupině.
Kvůli lepšímu výkonu operační systém při přiřazování logických procesorů ke skupinám bere v úvahu fyzickou lokalitu. Všechny logické procesory v jádru a všechna jádra ve fyzickém procesoru jsou v případě potřeby přiřazené stejné skupině. Fyzické procesory, které jsou fyzicky blízko sebe, jsou přiřazeny stejné skupině. Uzel NUMA je přiřazen k jedné skupině, pokud kapacita uzlu nepřekročí maximální velikost skupiny. Další informace najdete v tématu podpora NUMA.
V systémech s 64 nebo méně procesory budou stávající aplikace fungovat správně beze změny. Aplikace, které nevolají žádné funkce, které používají masky spřažení procesoru nebo čísla procesoru, budou správně fungovat ve všech systémech bez ohledu na počet procesorů. Aby bylo možné správně pracovat se systémy s více než 64 logickými procesory, můžou vyžadovat úpravy následující typy aplikací:
- Aplikace, které spravují, udržují nebo zobrazují informace o procesoru pro celý systém, musí být upraveny tak, aby podporovaly více než 64 logických procesorů. Příkladem takové aplikace je Správce úloh systému Windows, který zobrazuje úlohu každého procesoru v systému.
- Aplikace, pro které je výkon kritický a které se dají efektivně škálovat nad rámec 64 logických procesorů, musí být upraveny tak, aby běžely v takových systémech. Databázové aplikace můžou například těžit z úprav.
- Pokud aplikace používá knihovnu DLL s datovými strukturami pro procesor a knihovna DLL nebyla upravena tak, aby podporovala více než 64 logických procesorů, musí být všechna vlákna aplikace, která volají funkce exportované knihovnou DLL, přiřazena stejné skupině.
Ve výchozím nastavení je aplikace omezena na jednu skupinu, která by měla poskytovat možnost ample processing pro typickou aplikaci. Operační systém zpočátku přiřadí každý proces jedné skupině kruhovým dotazováním napříč skupinami v systému. Proces zahájí spuštění přiřazené jedné skupině. První vlákno procesu se zpočátku spustí ve skupině, ke které je proces přiřazen. Každé nově vytvořené vlákno se přiřadí stejné skupině jako vlákno, které ho vytvořilo.
Aplikace, která vyžaduje použití více skupin, aby mohl běžet na více než 64 procesorech, musí explicitně určit, kde se mají spouštět vlákna, a zodpovídá za nastavení spřažení procesoru vláken na požadované skupiny. Příznak INHERIT_PARENT_AFFINITY lze použít k určení nadřazeného procesu (který se může lišit od aktuálního procesu), ze kterého se má vygenerovat spřažení pro nový proces. Pokud je proces spuštěný v jedné skupině, může číst a upravovat spřažení pomocí GetProcessAffinityMask a SetProcessAffinityMask, zatímco zůstal ve stejné skupině; pokud je spřažení procesu změněno, použije se na jeho vlákna nová spřažení.
Spřažení vlákna lze při vytváření zadat pomocí PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY rozšířeného atributu s funkcí CreateRemoteThreadEx. Po vytvoření vlákna lze jeho spřažení změnit voláním SetThreadAffinityMask nebo SetThreadGroupAffinity. Pokud je vlákno přiřazeno jiné skupině než proces, aktualizuje se spřažení procesu tak, aby zahrnovalo spřažení vlákna a proces se stane procesem s více skupinami. Další změny spřažení musí být provedeny pro jednotlivá vlákna; Spřažení procesu s více skupinami nelze změnit pomocí SetProcessAffinityMask. Funkce GetProcessGroupAffinity načte sadu skupin, ke kterým je přiřazen proces a jeho vlákna.
Chcete-li určit spřažení pro všechny procesy přidružené k objektu úlohy, použijte SetInformationJobObject funkce s JobObjectGroupInformation nebo JobObjectGroupInformationEx informační třída.
Logický procesor je identifikován číslem skupiny a jeho číslem procesoru relativním vzhledem k skupině. Tato hodnota je reprezentována strukturou PROCESSOR_NUMBER. Čísla čísel procesoru používaná staršími funkcemi jsou relativní vzhledem ke skupinám.
Diskuzi o změnách architektury operačního systému pro podporu více než 64 procesorů naleznete v dokumentu white paper podpůrných systémů, které mají více než 64 procesorů.
Seznam nových funkcí a struktur, které podporují skupiny procesorů, najdete v tématu Co je nového v procesech a vláknech.
Chování počínaje Systémy Windows 11 a Windows Server 2022
Poznámka
Počínaje Windows 11 a Windows Serverem 2022 už neplatí, že aplikace jsou ve výchozím nastavení omezené na jednu skupinu procesorů. Místo toho procesy a jejich vlákna mají spřažení procesorů, které ve výchozím nastavení pokrývají všechny procesory v systému, napříč několika skupinami na počítačích s více než 64 procesory.
Aby aplikace mohly automaticky využívat všechny procesory v počítači s více než 64 procesory, počínaje Windows 11 a Windows Serverem 2022 se operační systém změnil, aby se procesy a jejich vlákna ve výchozím nastavení rozprostřely napříč všemi procesory v systému ve všech skupinách procesorů. To znamená, že aplikace už nemusí explicitně nastavovat spřažení vláken, aby mohly přistupovat k více skupinám procesorů.
Z důvodu kompatibility operační systém používá nový koncept primární skupiny pro procesy i vlákna. Každému procesu je přiřazena primární skupina při vytváření a ve výchozím nastavení je stejná primární skupina všech vláken. Ideální procesor každého vlákna je v primární skupině vlákna, takže vlákna budou přednostně naplánována na procesory v jejich primární skupině, ale mohou být naplánovány na procesory v jakékoli jiné skupině. Rozhraní API pro spřažení, která nejsou seskupená nebo pracují s jednou skupinou, implicitně používají primární skupinu jako skupinu procesoru procesu nebo vlákna; Další informace o novém chování naleznete v částech Poznámky pro následující:
- GetProcessAffinityMask
- SetProcessAffinityMask
- SetThreadAffinityMask
- GetProcessGroupAffinity
- GetThreadGroupAffinity
- SetThreadGroupAffinity
- SetThreadIdealProcessor
- SetThreadIdealProcessorEx
Aplikace můžou používat sady procesorů k efektivní spřažení procesu nebo vlákna ve více skupinách procesorů.
Související témata
-
podpora NUMA