Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
64-bitowe wersje systemów Windows 7 i Windows Server 2008 R2 oraz nowsze wersje tych systemów 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 systemy z procesorami fizycznymi, które mają wiele rdzeni, zapewniają systemowi operacyjnemu wiele procesorów logicznych. procesor logiczny to jedna jednostka obliczeniowa z perspektywy systemu operacyjnego, aplikacji lub sterownika. Jeden rdzeń to jedna jednostka procesora, która może składać się z co najmniej jednego procesora logicznego. procesor fizyczny może składać się z jednego lub większej liczby rdzeni. Procesor fizyczny to to samo co 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, traktowanym 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 dynamicznie dodawać procesory, 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 wywołują ż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 dotyczące każdego procesora 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ą efektywnie skalować się powyżej 64 procesorów logicznych, 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 dla każdego procesora, a biblioteka DLL nie została zmodyfikowana tak, aby obsługiwała więcej niż 64 procesory logiczne, wszystkie wątki w aplikacji, które wywołują funkcje wyeksportowane przez bibliotekę DLL, muszą być przypisane do tej samej grupy.
Domyślnie aplikacja jest ograniczona do pojedynczej grupy, co powinno zapewnić wystarczającą wydajność przetwarzania dla typowej aplikacji. System operacyjny początkowo przypisuje każdy proces do pojedynczej grupy w sposób cykliczny między grupami w systemie. Proces rozpoczyna wykonywanie, będąc przypisanym 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 procesorów dla wątków na żądane grupy. 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ć wygenerowane powinowactwo 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, powinowactwo procesu jest aktualizowane w celu uwzględnienia powinowactwa 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ć przypisanie procesora dla wszystkich procesów skojarzonych z obiektem zadania, użyj funkcji SetInformationJobObject z klasą informacji JobObjectGroupInformation lub JobObjectGroupInformationEx.
Procesor logiczny jest identyfikowany przez numer grupy i numer procesora względnego grupy. Jest to reprezentowane przez strukturę PROCESSOR_NUMBER. Numery procesorów używanych przez starsze funkcje są względne względem grupy.
Aby zapoznać się z omówieniem zmian architektury systemu operacyjnego w celu obsługi ponad 64 procesorów, zobacz oficjalny dokument Obsługa systemów mających więcej niż 64 procesory.
Aby uzyskać listę nowych funkcji i struktur, które obsługują grupy procesorów, zobacz Co nowego w procesach i wątkach.
Zachowanie począwszy od systemów Windows 11 i Windows Server 2022
Uwaga
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ą powiązania 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 w systemie operacyjnym wprowadzono zmianę, aby procesy i ich wątki domyślnie obejmowały wszystkie procesory w systemie, 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 koncepcji Primary Group zarówno dla procesów, jak i wątków. Każdemu procesowi podczas tworzenia jest przypisywana grupa podstawowa, a domyślnie grupa podstawowa wszystkich jego wątków jest taka sama jak grupa podstawowa procesu. Idealny procesor każdego wątku znajduje się w podstawowej grupie wątku, więc wątki będą preferencyjnie przydzielane do procesorów w swojej podstawowej grupie, ale mogą być przydzielane do procesorów w dowolnej innej grupie. Interfejsy API koligacji, które nie obsługują grup lub działają na jednej grupie, niejawnie używają grupy podstawowej jako grupy procesorów procesu/wątku; aby uzyskać więcej informacji na temat nowych zachowań, zapoznaj się z sekcjami Uwagi w odniesieniu do następujących elementów:
- GetProcessAffinityMask
- SetProcessAffinityMask
- SetThreadAffinityMask
- GetProcessGroupAffinity
- GetThreadGroupAffinity
- SetThreadGroupAffinity
- SetThreadIdealProcessor
- SetThreadIdealProcessorEx
Aplikacje mogą używać CPU Sets do efektywnego zarządzania powiązaniem procesu lub wątku z procesorami w wielu grupach procesorów.
Tematy pokrewne