Przejdź do zawartości

Niejednolity dostęp do pamięci

Z Wikipedii, wolnej encyklopedii
(Przekierowano z Non-Uniform Memory Access)

Niejednolity dostęp do pamięci, NUMA (ang. Non-Uniform Memory Access) – architektura komputerowa wykorzystywana do realizacji przetwarzania współbieżnego[1]. Jest to architektura komputerowa zapewniająca oddzielną pamięć operacyjną dla każdego procesora. Każdy procesor kontroluje własną pulę pamięci, dlatego czas dostępu do tej pamięci zależy od jego położenia. NUMA dąży do zminimalizowania opóźnień dostępu do pamięci poprzez przydzielenie pamięci lokalnej dla każdego procesora[2].

Non-Uniform Memory Access – architektura z niejednolitym dostępem do pamięci

[edytuj | edytuj kod]

Non-Uniform Memory Access lub Non-Uniform Memory Architecture (NUMA) jest sposobem organizacji dostępu do pamięci komputera stosowanej w maszynach wieloprocesorowych, gdzie czas dostępu do pamięci zależy od miejsca pamięci względem procesora. Pod NUMA procesor może uzyskać dostęp do własnej pamięci lokalnej szybciej niż do innych, tzn. pamięci lokalnej obsługiwanej przez inne procesory lub pamięci współdzielonej pomiędzy procesorami.

Logicznie, architektury NUMA wywodzą się od symetrycznych architektur wieloprocesorowych (SMP). Ich komercyjny rozwój nastąpił dzięki przedsiębiorstwom Burroughs (później Unisys), Convex Computer (później Hewlett-Packard), Silicon Graphics, Sequent Computer Systems(inne języki), Data General(inne języki) i Digital w latach 90. Techniki opracowane przez te przedsiębiorstwa były później wykorzystywane w różnych systemach operacyjnych typu Unix, a także w pewnym stopniu, w Windows NT.

Koncepcja

[edytuj | edytuj kod]

Architektura ta zakłada, że każdy procesor ma przydzieloną oddzielną pamięć operacyjną, choć fizycznie pamięć jest podzielona. Komputery oparte na tej architekturze zwykle posiadają co najmniej dwa procesory, z których każdy kontroluje określoną pulę pamięci operacyjnej. Niejednolity czas dostępu oznacza, że procesor szybciej uzyskuje dostęp do pamięci, którą kontroluje, niż do pamięci obsługiwanej przez inne procesory. W efekcie czas dostępu do pamięci zależy od jej położenia względem procesora.

Cache coherent NUMA (ccNUMA) – architektura NUMA ze spójną pamięcią podręczną

[edytuj | edytuj kod]
 Osobny artykuł: CCNUMA.

Prawie wszystkie architektury procesorów używają małych, bardzo szybkich, niewspółdzielonych pamięci podręcznych zwanych cache, do których rdzenie procesorów mają wielokrotnie krótszy czas dostępu. W architekturze NUMA utrzymanie spójności pamięci podręcznej wiąże się z dużym obciążeniem

Nawet prostsze do zaprojektowania i budowy systemy non-cache-coherent NUMA okazały się wyjątkowo trudne do zaprogramowania w standardowym modelu programowania architektury von Neumanna. W rezultacie wszystkie komputery NUMA sprzedawane na rynku używają specjalnego sprzętu, aby utrzymać spójność pamięci cache i nazywa się je cache-coherent NUMA – w skrócie ccNUMA.

W przypadku, gdy więcej niż jedna pamięć podręczna odwzorowuje ten sam obszar pamięci wspólnej, zazwyczaj spójność pamięci podręcznej realizowana jest za pomocą wewnątrz procesorowej komunikacji pomiędzy kontrolerami pamięci podręcznej. Z tego powodu ccNUMA wypada słabo, gdy wiele procesorów próbuje uzyskać dostęp do tego samego obszaru pamięci w krótkim odstępie czasu. Systemy operacyjne wspierające NUMA starają się minimalizować częstotliwość dostępu do odległej pamięci poprzez przydzielanie procesorów i pamięci w sposób uwzględniający architekturę NUMA. Oznacza to unikanie sytuacji, w których wątki są przydzielane do procesorów znajdujących się w innym węźle NUMA niż ich pamięć, a także stosowanie mechanizmów szeregowania i blokowania zapobiegających nieefektywnym dostępom do zdalnych zasobów.

Alternatywnie, protokoły spójności cache, takie jak protokół MESIF, próbują ograniczyć komunikację do minimum niezbędnego do zachowania spójności cache. Scalable Coherent Interface (SCI) to standard opracowany przez IEEE, który definiuje sposób zarządzania spójnością pamięci podręcznej w systemach wieloprocesorowych. W przeciwieństwie do wcześniejszych rozwiązań, które miały ograniczoną skalowalność, SCI wykorzystuje mechanizm katalogowy do śledzenia stanu pamięci podręcznej, co pozwala na efektywniejszą komunikację między procesorami. Technologia ta została zastosowana m.in. w rozwiązaniu NumaConnect, usprawniającym działanie systemów NUMA.

Obecne systemy ccNUMA mogą być realizowane bez zewnętrznej logiki, za pomocą odpowiedniego chipsetu dla wsparcia NUMA. Przykładami aktywnych chipsetów ccNUMA są SGI Shub (Super hub), Intel E8870, HP sx2000 (stosowane w serwerach Integrity i Superdome), ostatnie w systemach NEC oparte na procesorach Itanium. Wcześniejsze systemy ccNUMA, takie jak te z Silicon Graphics, były oparte na procesorach MIPS i DEC Alpha 21364 (EV7).

Intel zapowiedział wprowadzenie NUMA do swoich serwerów x86 i Itanium pod koniec 2007 roku, wraz z procesorami Nehalem i Tukwila. Obie rodziny procesorów dzielą wspólne chipsety; komunikacja między procesorami realizowana jest poprzez połączenia QuickPath Interconnect (QPI).

NUMA czy przetwarzanie klastrowe

[edytuj | edytuj kod]

NUMA bywa porównywana do ściśle powiązanej formy klastrów komputerowych. Wdrożenie NUMA jest możliwe także w środowiskach bez dedykowanego wsparcia sprzętowego, poprzez zastosowanie stronicowanej pamięci wirtualnej w architekturze klastra. Jednakże w NUMA realizowanej programowo (np. vSMP) opóźnienia transmisji danych między węzłami są znacznie większe niż w rozwiązaniach sprzętowych.

Zobacz też

[edytuj | edytuj kod]

Przypisy

[edytuj | edytuj kod]
  1. Obsługa NUMA i Hyperthreading [online], students.mimuw.edu.pl [dostęp 2024-12-13].
  2. Non-Uniform Memory Access from FOLDOC [online], foldoc.org [dostęp 2024-12-13].

Bibliografia

[edytuj | edytuj kod]

Linki zewnętrzne

[edytuj | edytuj kod]