Dela via


Processorgrupper

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 i 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 processor ä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 med frekvent tillsats tillåter operativsystemet utrymme i grupper för processorer som kan komma när 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 lokalitet 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 i 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.
  • Program för vilka prestanda är kritiska 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 bearbetningsfunktioner för det typiska programmet. Operativsystemet tilldelar ursprungligen varje process till en enskild grupp på ett resursallokeringssätt mellan grupperna i systemet. En process påbörjar körningen som tilldelats till en grupp. Den första tråden i en process körs först 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ådens processortillhörighet 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) för att generera tillhörigheten för en ny process. Om processen körs i en enda grupp kan den läsa och ändra dess tillhörighet med hjälp av GetProcessAffinityMask och SetProcessAffinityMask medan den finns kvar i samma grupp. Om processtillhörigheten ändras tillämpas den nya tillhörigheten 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 tillhörighet så att den inkluderar trådens tillhörighet 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 tilldelas till.

Om du vill ange tillhörighet för alla processer som är associerade med ett jobbobjekt använder du funktionen SetInformationJobObject med JobObjectGroupInformation eller JobObjectGroupInformationEx informationsklass.

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 Stödsystem som har fler än 64 processorer.

En lista över nya funktioner och strukturer som stöder processorgrupper finns i Nyheter i processer och trådar.

Beteende som börjar med Windows 11 och Windows Server 2022

Not

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, från och med Windows 11 och Windows Server 2022 har operativsystemet ändrats för att göra 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 tillhörighet för att få åtkomst till flera processorgrupper.

Av kompatibilitetsskäl använder operativsystemet ett nytt primär grupp begrepp för både processer och trådar. Varje process tilldelas en primär grupp när den skapas, och som standard är alla dess trådars primära grupp samma. 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 fungerar i 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:

Program kan använda CPU-uppsättningar för att effektivt hantera en process eller tråds tillhörighet över flera processorgrupper.

flera processorer

NUMA-support