Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
64-bitarsversionerna av Windows 7 och Windows Server 2008 R2 och senare versioner av Windows stöder mer än 64 logiska processorer på en enda dator. Den här funktionen är inte tillgänglig på 32-bitarsversioner av Windows.
System med mer än en fysisk processor eller ett system med fysiska processorer som har flera kärnor ger operativsystemet flera logiska processorer. En logisk processorenhet är en logisk beräkningsmotor ur operativsystemets, programmets eller drivrutinens perspektiv. En kärna är en processorenhet, som kan bestå av en eller flera logiska processorer. En fysisk processor kan bestå av en eller flera kärnor. En fysisk processor är samma som ett processorpaket, en socket eller en CPU.
Stöd för system som har fler än 64 logiska processorer baseras på begreppet processorgrupp, vilket är en statisk uppsättning med upp till 64 logiska processorer som behandlas som en enda schemaläggningsentitet. Processorgrupper numreras från och med 0. System med färre än 64 logiska processorer har alltid en enda grupp, grupp 0.
Windows Server 2008, Windows Vista, Windows Server 2003 och Windows XP: Processorgrupper stöds inte.
När systemet startar skapar operativsystemet processorgrupper och tilldelar logiska processorer till grupperna. Om systemet kan lägga till processorer under drift tillåter operativsystemet utrymme i grupper för processorer som kan tillkomma medan systemet körs. Operativsystemet minimerar antalet grupper i ett system. Ett system med 128 logiska processorer skulle till exempel ha två processorgrupper med 64 processorer i varje grupp, inte fyra grupper med 32 logiska processorer i varje grupp.
För bättre prestanda tar operativsystemet hänsyn till fysisk närhet i maskinvaran när logiska processorer tilldelas till grupper. Alla logiska processorer i en kärna, och alla kärnor i en fysisk processor, tilldelas till samma grupp, om möjligt. Fysiska processorer som är fysiskt nära varandra tilldelas till samma grupp. En NUMA-nod tilldelas till en enskild grupp om inte nodens kapacitet överskrider den maximala gruppstorleken. Mer information finns under NUMA-support.
På system med 64 eller färre processorer fungerar befintliga program korrekt utan ändringar. Program som inte anropar några funktioner som använder processortillhörighetsmasker eller processornummer fungerar korrekt på alla system, oavsett antalet processorer. För att fungera korrekt på system med fler än 64 logiska processorer kan följande typer av program kräva ändringar:
- Program som hanterar, underhåller eller visar information per processor för hela systemet måste ändras för att stödja fler än 64 logiska processorer. Ett exempel på ett sådant program är Windows Task Manager, som visar arbetsbelastningen för varje processor i systemet.
- Applikationer där prestanda är avgörande och som kan skalas effektivt utöver 64 logiska processorer måste ändras för att köras på sådana system. Databasprogram kan till exempel dra nytta av ändringar.
- Om ett program använder en DLL som har datastrukturer per processor och DLL:en inte har ändrats för att stödja fler än 64 logiska processorer, måste alla trådar i programmet som anropar funktioner som exporteras av DLL:en tilldelas till samma grupp.
Som standard är ett program begränsat till en enda grupp, vilket bör ge gott om bearbetningskapacitet för det typiska programmet. Operativsystemet tilldelar ursprungligen varje process till en enskild grupp i turordning mellan grupperna i systemet. En process börjar köras och tilldelas en grupp. Den första tråden i en process körs initialt i den grupp som processen har tilldelats till. Varje nyskapad tråd tilldelas till samma grupp som tråden som skapade den.
Ett program som kräver användning av flera grupper så att det kan köras på fler än 64 processorer måste uttryckligen avgöra var trådarna ska köras och ansvarar för att ställa in trådarnas processortillhörigheter till önskade grupper. Flaggan INHERIT_PARENT_AFFINITY kan användas för att ange en överordnad process (som kan skilja sig från den aktuella processen) från vilken affiniteten för en ny process ska genereras. Om processen körs i en enda grupp kan den läsa och ändra sin affinitet med hjälp av GetProcessAffinityMask och SetProcessAffinityMask medan den finns kvar i samma grupp. Om processoraffiniteten ändras tillämpas den nya affiniteten på dess trådar.
En tråds tillhörighet kan anges när den skapas med hjälp av det utökade attributet PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY med funktionen CreateRemoteThreadEx. När tråden har skapats kan dess tillhörighet ändras genom att anropa SetThreadAffinityMask eller SetThreadGroupAffinity. Om en tråd tilldelas till en annan grupp än processen uppdateras processens affinitet så att den inkluderar trådens affinitet och processen blir en process med flera grupper. Ytterligare tillhörighetsändringar måste göras för enskilda trådar. Det går inte att ändra tillhörigheten för en multigruppsprocess med SetProcessAffinityMask. Funktionen GetProcessGroupAffinity hämtar den uppsättning grupper som en process och dess trådar har tilldelats.
Om du vill ange processortillhörighet för alla processer som är associerade med ett jobbobjekt använder du funktionen SetInformationJobObject med informationsklassen JobObjectGroupInformation eller JobObjectGroupInformationEx.
En logisk processor identifieras av dess gruppnummer och dess grupprelativa processornummer. Detta representeras av en PROCESSOR_NUMBER struktur. Numeriska processornummer som används av äldre funktioner är grupprelativa.
En diskussion om ändringar i operativsystemarkitekturen för att stödja fler än 64 processorer finns i vitboken System som har stöd för fler än 64 processorer.
En lista över nya funktioner och strukturer som stöder processorgrupper finns i Nyheter i processer och trådar.
Beteende från och med Windows 11 och Windows Server 2022
Obs!
Från och med Windows 11 och Windows Server 2022 är det inte längre så att program begränsas som standard till en enda processorgrupp. I stället har processer och deras trådar processortillhörigheter som som standard sträcker sig över alla processorer i systemet, över flera grupper på datorer med fler än 64 processorer.
För att program automatiskt ska kunna dra nytta av alla processorer på en dator med fler än 64 processorer har operativsystemet, från och med Windows 11 och Windows Server 2022, ändrats så att processer och deras trådar sträcker sig över alla processorer i systemet, över alla processorgrupper, som standard. Det innebär att program inte längre uttryckligen behöver ange sina trådars affinitet för att få åtkomst till flera processorgrupper.
Av kompatibilitetsskäl använder operativsystemet ett nytt primärgrupp-begrepp för både processer och trådar. Varje process tilldelas en primär grupp när den skapas, och som standard har alla dess trådar samma primära grupp. Varje tråds ideala processor finns i trådens primära grupp, så trådar schemaläggs företrädesvis till processorer i deras primära grupp, men de kan schemaläggas till processorer i någon annan grupp. Tillhörighets-API:er som inte är gruppmedvetna eller arbetar med en enda grupp använder implicit den primära gruppen som process-/trådprocessorgrupp. Mer information om de nya beteendena finns i avsnitten Anmärkningar för följande:
- GetProcessAffinityMask
- SetProcessAffinityMask
- SetThreadAffinityMask
- GetProcessGroupAffinity
- GetThreadGroupAffinity
- SetThreadGroupAffinity
- SetThreadIdealProcessor
- SetThreadIdealProcessorEx
Program kan använda CPU-uppsättningar för att effektivt hantera en process eller tråds processoraffinitet över flera processorgrupper.
Relaterade ämnen