Grupy procesorów
64-bitowe wersje systemów Windows 7 i Windows Server 2008 R2 i nowszych wersji systemu Windows obsługują więcej niż 64 procesory logiczne na jednym komputerze. Ta funkcja nie jest dostępna w 32-bitowych wersjach systemu Windows.
Systemy z więcej niż jednym procesorem fizycznym lub systemami z procesorami fizycznymi, które mają wiele rdzeni, zapewniają systemowi operacyjnemu wiele procesorów logicznych. procesor logiczny to jeden aparat obliczeniowy z perspektywy systemu operacyjnego, aplikacji lub sterownika. rdzeniem jest jedna jednostka procesora, która może składać się z co najmniej jednego procesora logicznego. procesor fizyczny może składać się z co najmniej jednego rdzenia. Procesor fizyczny jest taki sam jak pakiet procesora, gniazdo lub procesor CPU.
Obsługa systemów, które mają więcej niż 64 procesory logiczne, opiera się na koncepcji grupy procesorów , która jest statycznym zestawem do 64 procesorów logicznych, które są traktowane jako pojedyncza jednostka planowania. Grupy procesorów są numerowane począwszy od 0. Systemy z mniej niż 64 procesorami logicznymi zawsze mają jedną grupę, Grupę 0.
Windows Server 2008, Windows Vista, Windows Server 2003 i Windows XP: grupy procesorów nie są obsługiwane.
Po uruchomieniu systemu system operacyjny tworzy grupy procesorów i przypisuje procesory logiczne do grup. Jeśli system jest w stanie dodawać procesory gorące, system operacyjny zezwala na miejsce w grupach dla procesorów, które mogą pojawić się podczas działania systemu. System operacyjny minimalizuje liczbę grup w systemie. Na przykład system z 128 procesorami logicznymi ma dwie grupy procesorów z 64 procesorami w każdej grupie, a nie cztery grupy z 32 procesorami logicznymi w każdej grupie.
Aby uzyskać lepszą wydajność, system operacyjny uwzględnia lokalność fizyczną podczas przypisywania procesorów logicznych do grup. Wszystkie procesory logiczne w rdzeniu i wszystkie rdzenie procesora fizycznego są przypisywane do tej samej grupy, jeśli to możliwe. Fizyczne procesory, które są fizycznie blisko siebie, są przypisane do tej samej grupy. Węzeł NUMA jest przypisywany do jednej grupy, chyba że pojemność węzła przekracza maksymalny rozmiar grupy. Aby uzyskać więcej informacji, zobacz NUMA Support.
W systemach z 64 lub mniejszą liczbą procesorów istniejące aplikacje będą działać poprawnie bez modyfikacji. Aplikacje, które nie nazywają żadnych funkcji korzystających z masek koligacji procesora lub numerów procesorów, będą działać poprawnie we wszystkich systemach, niezależnie od liczby procesorów. Aby poprawnie działać w systemach z ponad 64 procesorami logicznymi, następujące rodzaje aplikacji mogą wymagać modyfikacji:
- Aplikacje, które zarządzają, obsługują lub wyświetlają informacje o procesorze dla całego systemu, muszą być modyfikowane w celu obsługi więcej niż 64 procesorów logicznych. Przykładem takiej aplikacji jest Menedżer zadań systemu Windows, który wyświetla obciążenie każdego procesora w systemie.
- Aplikacje, dla których wydajność jest krytyczna i które mogą być skalowane wydajnie poza 64 procesorami logicznymi, muszą być modyfikowane tak, aby działały w takich systemach. Na przykład aplikacje bazy danych mogą korzystać z modyfikacji.
- Jeśli aplikacja używa biblioteki DLL, która ma struktury danych procesora, a biblioteka DLL nie została zmodyfikowana tak, aby obsługiwała więcej niż 64 procesory logiczne, wszystkie wątki w aplikacji wywołującej funkcje wyeksportowane przez bibliotekę DLL muszą być przypisane do tej samej grupy.
Domyślnie aplikacja jest ograniczona do pojedynczej grupy, co powinno zapewnić dużą możliwość przetwarzania dla typowej aplikacji. System operacyjny początkowo przypisuje każdy proces do pojedynczej grupy w sposób okrężny w grupach w systemie. Proces rozpoczyna wykonywanie przypisane do jednej grupy. Pierwszy wątek procesu początkowo jest uruchamiany w grupie, do której jest przypisany proces. Każdy nowo utworzony wątek jest przypisywany do tej samej grupy co wątek, który go utworzył.
Aplikacja, która wymaga użycia wielu grup, aby mogła działać na więcej niż 64 procesorach, musi jawnie określić, gdzie uruchamiać wątki i odpowiada za ustawienie koligacji procesora wątków dla żądanych grup. Flaga INHERIT_PARENT_AFFINITY może służyć do określania procesu nadrzędnego (który może być inny niż bieżący proces), z którego ma zostać wygenerowana koligacja dla nowego procesu. Jeśli proces jest uruchomiony w jednej grupie, może odczytywać i modyfikować koligację przy użyciu GetProcessAffinityMask i SetProcessAffinityMask, pozostając w tej samej grupie; Jeśli koligacja procesu zostanie zmodyfikowana, do jego wątków zostanie zastosowana nowa koligacja.
Koligację wątku można określić podczas tworzenia przy użyciu atrybutu rozszerzonego PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY z funkcją CreateRemoteThreadEx. Po utworzeniu wątku koligację można zmienić, wywołując SetThreadAffinityMask lub SetThreadGroupAffinity. Jeśli wątek jest przypisywany do innej grupy niż proces, koligacja procesu jest aktualizowana w celu uwzględnienia koligacji wątku, a proces staje się procesem wielogrupowym. Należy wprowadzić dalsze zmiany koligacji dla poszczególnych wątków; Koligacji procesu wielogrupowego nie można modyfikować przy użyciu SetProcessAffinityMask. Funkcja GetProcessGroupAffinity pobiera zestaw grup, do których przypisano proces i jego wątki.
Aby określić koligację dla wszystkich procesów skojarzonych z obiektem zadania, użyj funkcji SetInformationJobObject z JobObjectGroupInformation lub JobObjectGroupInformationEx klasy informacji.
Procesor logiczny jest identyfikowany przez numer grupy i numer procesora względnego grupy. Jest to reprezentowane przez strukturę PROCESSOR_NUMBER. Liczby procesorów liczbowych używanych przez starsze funkcje są względne dla grup.
Aby zapoznać się z omówieniem zmian architektury systemu operacyjnego w celu obsługi ponad 64 procesorów, zobacz oficjalny dokument Systemy pomocnicze, które mają więcej niż 64 procesory.
Aby uzyskać listę nowych funkcji i struktur, które obsługują grupy procesorów, zobacz What's New in Processes and Threads.
Zachowanie począwszy od systemów Windows 11 i Windows Server 2022
Nuta
Począwszy od systemów Windows 11 i Windows Server 2022, nie jest już tak, że aplikacje są domyślnie ograniczone do pojedynczej grupy procesorów. Zamiast tego procesy i ich wątki mają koligacje procesora, które domyślnie obejmują wszystkie procesory w systemie, w wielu grupach na maszynach z ponad 64 procesorami.
Aby aplikacje automatycznie korzystały ze wszystkich procesorów na maszynie z ponad 64 procesorami, począwszy od systemów Windows 11 i Windows Server 2022 system operacyjny zmienił się, aby procesy i ich wątki obejmowały wszystkie procesory w systemie, domyślnie we wszystkich grupach procesorów. Oznacza to, że aplikacje nie muszą już jawnie ustawiać koligacji wątków w celu uzyskania dostępu do wielu grup procesorów.
Ze względów zgodności system operacyjny używa nowej podstawowej grupy koncepcji zarówno procesów, jak i wątków. Każdy proces jest przypisywany do grupy podstawowej podczas tworzenia, a domyślnie wszystkie grupy główne jej wątków są takie same. Każdy wątek idealny procesor jest w głównej grupie wątków, więc wątki będą preferencyjnie zaplanowane do procesorów w ich podstawowej grupie, ale są one w stanie być zaplanowane do procesorów w każdej innej grupie. Interfejsy API koligacji, które nie obsługują grup lub działają w jednej grupie niejawnie, używają grupy podstawowej jako grupy procesorów procesów/wątków; Aby uzyskać więcej informacji na temat nowych zachowań, zapoznaj się z sekcjami Uwagi, aby uzyskać następujące informacje:
- GetProcessAffinityMask
- SetProcessAffinityMask
- SetThreadAffinityMask
- getProcessGroupAffinity
- GetThreadGroupAffinity
- SetThreadGroupAffinity
- SetThreadIdealProcessor
- SetThreadIdealProcessorEx
Aplikacje mogą używać zestawów procesorów do efektywnego zarządzania koligacją procesu lub wątku w wielu grupach procesorów.
Tematy pokrewne
-
obsługi NUMA