Zrozumienie architektury NUMA

Zrozumienie architektury NUMA
Projektowanie komputerów jest zawsze kompromisem. Cztery podstawowe komponenty komputera - środkowa jednostka przetwarzania (CPU) lub procesor, pamięć, pamięć i płyta do podłączania komponentów (system magistrali I/O) - są jak najbardziej sprytnie, aby utworzyć maszynę, która, która jest zarówno opłacalny, jak i potężny. Proces projektowania obejmuje głównie optymalizację wobec procesorów (współtworzy, konfiguracja wielordzeniowa), typu pamięci i kwoty, pamięci (dyski, system plików), a także cena.Ideą współpracy i architektury wielordzeniowej jest dystrybucja operacji do tylu pojedynczych jednostek obliczeniowych w najmniejszej możliwej przestrzeni oraz uczynienie równoległego wykonywania instrukcji obliczeniowych bardziej dostępnych i niedrogich. Jeśli chodzi o pamięć, jest to pytanie o ilość lub rozmiar, który może być rozwiązany przez poszczególną jednostkę obliczeniową i który typ pamięci działa z najniższym możliwym opóźnieniem. Pamięć należy do pamięci zewnętrznej, a jej wydajność zależy od typu dysku, systemu plików, gwintowania, protokołu transferu, tkaniny komunikacyjnej i liczby załączonych urządzeń pamięci.

Projekt autobusów we/wy reprezentuje tętnice komputerowe i znacząco określa, ile i jak szybko można wymieniać dane między pojedynczymi komponentami wymienionymi powyżej. Najważniejsza kategoria jest prowadzona przez komponenty używane w dziedzinie obliczeń o wysokiej wydajności (HPC). Od połowy 2020 r. Wśród współczesnych przedstawicieli HPC są Nvidia Tesla i DGX, Radeon Instinct i Intel Xeon Phi GPU produkty akceleratora (patrz [1,2] porównania produktów).

Zrozumienie NUMA

Dostęp do pamięci niejednorodności (NOMA) opisuje wspólną architekturę pamięci używaną we współczesnych systemach wieloprocesowych. NOMA jest systemem obliczeniowym złożonym z kilku pojedynczych węzłów w taki sposób, że pamięć agregująca jest udostępniana między wszystkimi węzłami: „Każdy procesor przypisuje się własne pamięć lokalna i może uzyskać dostęp do pamięci z innych procesorów w systemie” [12,7].

NOMA to sprytny system używany do łączenia wielu jednostek przetwarzania centralnego (CPU) z dowolną ilością pamięci komputera dostępnej na komputerze. Pojedyncze węzły NUMA są podłączone do skalowalnej sieci (magistralowa magistra.

Pamięć lokalna to pamięć, której procesor używa w określonym węźle Numa. Pamięć obca lub zdalnej to pamięć, którą procesor przyjmuje z innego węzła Numa. Termin Współczynnik NUMA opisuje stosunek kosztu dostępu do pamięci obcych do kosztu dostępu do pamięci lokalnej. Im większy stosunek, tym większy koszt, a tym samym dłużej potrzebować dostępu do pamięci.

Jednak trwa to dłużej niż wtedy, gdy procesor uzyskuje dostęp do własnej pamięci lokalnej. Dostęp do pamięci lokalnej jest główną zaletą, ponieważ łączy niskie opóźnienia z wysoką przepustowością. Natomiast dostęp do pamięci należących do dowolnego innego procesora ma wyższe opóźnienie i niższą wydajność przepustowości.

Patrząc wstecz: ewolucja wieloprocesorów współdzielonych

Frank Dennemann [8] stwierdza, że ​​nowoczesne architektury systemu nie pozwalają na naprawdę jednolity dostęp do pamięci (UMA), mimo że systemy te są specjalnie zaprojektowane w tym celu. Mówiąc prosto, ideą obliczeń równoległych było posiadanie grupy procesorów, które współpracują w celu obliczenia danego zadania, przyspieszając w ten sposób klasyczne obliczenie sekwencyjne.

Jak wyjaśnił Frank Dennemann [8], na początku lat 70. „potrzeba systemów, które mogłyby obsługiwać wiele równoległych operacji użytkowników i nadmierne generowanie danych, stała się głównym nurtem”. „Pomimo imponującej szybkości wydajności uniprocesor, systemy wieloprocesorowe były lepiej przygotowane do obsługi tego obciążenia pracą. Aby zapewnić opłacalny system, wspólna przestrzeń adresowa pamięci stała się przedmiotem badań. Na początku opowiadano się na systemach korzystających z przełącznika poprzecznego, jednak przy tej złożoności projektowej skalowanej wraz ze wzrostem procesorów, co sprawiło, że system oparty na autobusach był bardziej atrakcyjny. Procesory w systemie magistrali [mogą] uzyskać dostęp do całej przestrzeni pamięci, wysyłając żądania w autobus."

Jednak systemy komputerowe oparte na autobusach są wyposażone w wąskie gardło - ograniczoną ilość przepustowości, która prowadzi do problemów z skalowalnością. Im więcej procesorów, które są dodawane do systemu, tym mniej pasma na węzeł dostępny. Ponadto, im więcej procesorów, tym dłuższy autobus, a tym wyższe opóźnienie.

Większość procesorów skonstruowano w dwuwymiarowej płaszczyźnie. PROPUS musiały również dodać zintegrowane kontrolery pamięci. Proste rozwiązanie posiadania czterech autobusów pamięci (górna, dolna, po lewej, prawej) do każdego rdzenia procesora pozwoliło na pełną dostępną przepustowość, ale to idzie tylko do tej pory. Procesor stagnowany czterema rdzeniami przez długi czas. Dodanie śladów powyżej i poniżej pozwoliło bezpośrednim autobusom do przestawnego procesora przekątnego, gdy żetony stały się 3D. Kolejnym logicznym krokiem było umieszczenie czterokwałowego procesora na karcie, która następnie podłączyła się do autobusu.

Obecnie każdy procesor zawiera wiele rdzeni ze współdzieloną pamięcią podręczną na chipie i pamięcią poza chipem i ma zmienne koszty dostępu do pamięci w różnych częściach pamięci na serwerze.

Poprawa wydajności dostępu do danych jest jednym z głównych celów współczesnego projektowania procesora. Każdy rdzeń procesora został wyposażony małą pamięcią podręczną 1 poziomu (32 kb) i większą (256 kb) pamięci podręcznej poziomu 2. Różne rdzenie miały później pamięć podręczną poziomu 3 mb, której wielkość znacznie się rozwijała w czasie.

Aby uniknąć braków pamięci podręcznej - żądanie danych, które nie są w pamięci podręcznej - dużo czasu badań poświęca się na znalezienie odpowiedniej liczby pamięci podręcznej procesora, struktur buforowania i odpowiadających algorytmach. Patrz [8], aby uzyskać bardziej szczegółowe wyjaśnienie protokołu buforowania Snoop [4] i Cache Cheherency [3,5], a także pomysły projektowe za NOMA.

Obsługa oprogramowania dla NUMA

Istnieją dwa miary optymalizacji oprogramowania, które mogą poprawić wydajność systemu obsługującego architekturę NUMA - powinowactwo i umieszczenie danych procesora. Jak wyjaśniono w [19], „powinowactwo procesora […] umożliwia wiązanie i rozpinanie procesu lub wątku z pojedynczym procesorem lub zakres procesorów, aby proces lub wątek wykonywałby tylko na wyznaczonym procesorze lub procesor raczej niż jakikolwiek procesor.„Termin„ umieszczenie danych ”odnosi się do modyfikacji oprogramowania, w których kod i dane są trzymane jak najbliżej pamięci.

Różne systemy operacyjne związane z UNIX i UNIX obsługują NOMA w następujący sposób (poniższa lista jest pobierana z [14]):

  • Silicon Graphics Irix Wsparcie dla architektury CCNUMA na 1240 procesora z serwerami serwerów Origin.
  • Microsoft Windows 7 i Windows Server 2008 R2 dodano obsługę architektury NUMA w 64 rdzeniach logicznych.
  • Wersja 2.5 jądra Linux zawierało już podstawowe wsparcie NOMA, które zostało dodatkowo ulepszone w kolejnych wydaniach jądra. Wersja 3.8 jądra Linux przyniosło nowe podstawy NUMA, które pozwoliły na opracowanie bardziej wydajnych zasad NUMA w późniejszych wydaniach jądra [13]. Wersja 3.13 jądra Linux przyniosło liczne zasady, które mają na celu umieszczenie procesu w pobliżu jego pamięci, wraz z obsługą przypadków, takich jak posiadanie stron pamięci dzielonych między procesami lub korzystanie z przezroczystych ogromnych stron; Nowe ustawienia sterowania systemem umożliwiają włączenie lub wyłączenie równoważenia NUMA, a także konfigurację różnych parametrów równoważenia pamięci Numa [15].
  • Zarówno Oracle, jak i OpenSolaris Model Numa Architecture z wprowadzeniem grup logicznych.
  • FreeBSD Dodano początkową konfigurację NUMA i konfigurację zasad w wersji 11.0.

W książce „Informatyka i technologia postępowanie Międzynarodowej Konferencji (CST2016)” Ning CAI sugeruje, że badanie architektury NUMA koncentrowało się głównie na wysokiej klasy środowisku obliczeniowym i proponował Particing Radix (NARP), który optymalizuje Wydajność wspólnych pamięci podręcznych w węzłach NUMA w celu przyspieszenia aplikacji do wywiadu biznesowego. Jako taka, NOMA reprezentuje środkowy grunt między systemami pamięci wspólnej (SMP) z kilkoma procesorami [6].

Numa i Linux

Jak wspomniano powyżej, jądro Linux obsługiwało NOMA od wersji 2.5. Zarówno Debian GNU/Linux, jak i Ubuntu oferują obsługę Numa dla optymalizacji procesu za pomocą dwóch pakietów oprogramowania Numactl [16] i Numad [17]. Za pomocą polecenia NUMACTL możesz wymienić ekwipunek dostępnych węzłów NUMA w swoim systemie [18]:

# Numactl -Hardware
Dostępne: 2 węzły (0-1)
Węzeł 0 procesory: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
Węzeł 0 Rozmiar: 8157 MB
Węzeł 0 za darmo: 88 MB
Węzeł 1 procesory: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
Węzeł 1 Rozmiar: 8191 MB
Węzeł 1 za darmo: 5176 MB
Odległości węzła:
Węzeł 0 1
0: 10 20
1: 20 10

Numatop jest przydatnym narzędziem opracowanym przez Intel do monitorowania lokalizacji pamięci wykonawczej i analizy procesów w systemach NUMA [10,11]. Narzędzie może zidentyfikować potencjalne wąskie gardła związane z NUMA, a tym samym pomóc w ponownej równowagi pamięci/alokacji procesora, aby zmaksymalizować potencjał systemu NUMA. Zobacz [9], aby uzyskać bardziej szczegółowy opis.

Scenariusze użytkowania

Komputery obsługujące technologię NOMA pozwalają wszystkim procesom na bezpośredni dostęp do całej pamięci - procesory postrzegają to jako pojedynczą, liniową przestrzeń adresową. Prowadzi to do bardziej wydajnego wykorzystania 64-bitowego schematu adresowania, co powoduje szybszy przemieszczanie danych, mniejszą replikację danych i łatwiejsze programowanie.

Systemy NUMA są dość atrakcyjne dla aplikacji po stronie serwera, takich jak systemy eksploracji danych i systemy obsługi decyzyjnej. Ponadto pisanie aplikacji do gier i oprogramowania o wysokiej wydajności staje się znacznie łatwiejsze dzięki tej architekturze.

Wniosek

Podsumowując, architektura NUMA dotyczy skalowalności, która jest jedną z jej głównych korzyści. W procesorze NUMA jeden węzeł będzie miał wyższą przepustowość lub niższą opóźnienie, aby uzyskać dostęp do pamięci w tym samym węźle (e.G., Lokalny procesor żąda dostępu do pamięci w tym samym czasie, co dostęp do zdalnego; Priorytetem jest lokalny procesor). To znacznie poprawi przepustowość pamięci, jeśli dane są zlokalizowane w określonych procesach (a tym samym procesorom). Wady to wyższe koszty przenoszenia danych z jednego procesora do drugiego. Tak długo, jak ten przypadek nie zdarza się zbyt często, system NUMA przewyższy systemy o bardziej tradycyjnej architekturze.

Linki i referencje

  1. Porównaj Nvidia Tesla vs. Instynkt radeon, https: // www.ItcentralStation.com/Products/Porównania/Nvidia-Tesla_VS_radeon-instint
  2. Porównaj Nvidia DGX-1 VS. Instynkt radeon, https: // www.ItcentralStation.com/Products/Porównania/nvidia-dgx-1_vs_radeon-instint
  3. Koherencja pamięci podręcznej, Wikipedia, https: // en.Wikipedia.org/wiki/cache_coherence
  4. Snooping autobusowy, Wikipedia, https: // en.Wikipedia.org/wiki/bus_snooping
  5. Protokoły spójności pamięci podręcznej w systemach wieloprocesorowych, maniaków dla maniaków, https: // www.geeksforgeeks.org/cache-koherence-Protocols-in-Multiprocessor-System/
  6. Informatyka i technologia - Materiały z Międzynarodowej Konferencji (CST2016), Ning CAI (red.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet i Marco Cesati: Zrozumienie architektury Numa w Understanding the Linux Kernel, 3. wydanie, O'Reilly, https: // www.Oreilly.com/biblioteka/view/Understanding-the-Linux/0596005652/
  8. Frank Dennemann: Numa Deep Dive Część 1: Od Uma do Numa, https: // Frankdenneman.NL/2016/07/07/Numa-Deep-Dive-Part-Part-1-Uma-Numa/
  9. Colin Ian King: Numatop: narzędzie do monitorowania systemu Numa, http: // smackerelofopinion.Blogspot.COM/2015/09/Numatop-Numa-System-Monitoring Tool.html
  10. Numatop, https: // github.com/intel/numatop
  11. Pakiet Numatop dla Debian GNU/Linux, https: // pakiety.Debian.org/buster/numatop
  12. Jonathan Kehayias: Zrozumienie nierównomiernego dostępu do pamięci/architektury (NOMA), https: // www.Sqlskills.com/blogs/Jonathan/Understanding-Non-Uniform-Memory-Memory-Accessarchitektures-Numa/
  13. Wiadomości z jądra Linux dla jądra 3.8, https: // jądro.Org/Linux_3.8
  14. Dostęp do pamięci nierównomiernej (NUMA), Wikipedia, https: // en.Wikipedia.org/wiki/non -niform_memory_access
  15. Dokumentacja zarządzania pamięcią Linux, NUMA, https: // www.jądro.org/doc/html/v4.18/VM/NUMA.html
  16. Pakiet Numactl dla Debian GNU/Linux, https: // pakiety.Debian.org/sid/admin/numactl
  17. Pakiet Numad dla Debian GNU/Linux, https: // pakiety.Debian.org/buster/numad
  18. Jak znaleźć, czy konfiguracja NUMA jest włączona lub wyłączona?, https: // www.Thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-exabled-albo-disabled/
  19. Procesor powinowactwa, Wikipedia, https: // en.Wikipedia.org/wiki/procesor_inficty

Dziękuję

Autorzy chcieliby podziękować Geroldowi Rupprechtowi za jego wsparcie podczas przygotowywania tego artykułu.

O Autorach

Plaxedes Nehanda to wielokartowana, wszechstronna wszechstronna osoba, która nosi wiele czapek, wśród nich planistę wydarzeń, wirtualny asystent, transkrybent, a także zapalony badacz z siedzibą w Johannesburgu w Południowej Afryce.

Prince k. Nehanda jest inżynierem oprzyrządowania i kontroli (Metrology) w Paeflow Metering w Harare w Zimbabwe.

Frank Hofmann pracuje na drodze - najlepiej z Berlina (Niemcy), Genewy (Szwajcaria) i Kapsztadu (Republika Południowej Afryki) - jako deweloper, trener i autor czasopism takich jak Linux -User i Linux Magazine. Jest także współautorem książki zarządzania pakietami Debian (http: // www.DPMB.org).