Non-Uniform Memory Access

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

NUMA - Non-Uniform Memory Accessarchitektura komputerowa, służąca do przetwarzania współbieżnego.

Architektura NUMA charakteryzuje się tym, że udostępnia użytkownikowi spójną logicznie przestrzeń adresową, chociaż pamięć jest fizycznie podzielona. Komputery zbudowane w tej architekturze posiadają wiele procesorów.

Niejednorodność w dostępie do pamięci polega na tym, że dany procesor szybciej uzyskuje dostęp do swojej lokalnej pamięci, niż do pamięci pozostałych procesorów lub pamięci współdzielonej.

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 lokalnej pamięci szybciej niż do innych, tzn. pamięci lokalnej do innego procesora 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 Burroughs (później Unisys), Convex Computer (później Hewlett-Packard), Silicon Graphics, Sequent Computer Systems, Data General i Digital w latach 90. Techniki opracowane przez te przedsiębiorstwa później były wykorzystywane w różnych systemach operacyjnych typu Unix, a także w pewnym stopniu w Windows NT.

Koncepcja[edytuj | edytuj kod]

Nowoczesne procesory działają znacznie szybciej niż pamięć operacyjna, z którą współpracują. Na początku rozwoju szybkich komputerów i superkomputerów, procesor zazwyczaj działał wolniej niż jego pamięć, aż do przekroczenia linii wydajności w 1970 roku. Od tego czasu procesory, w coraz większym stopniu oczekując na dane, spowalniały cały proces czekając na dostęp do pamięci. Wiele superkomputerów z 1980 i 90 r. koncentrowało się bardziej na zapewnieniu szybkiego dostępu do pamięci, niż użycia szybszych procesorów, co pozwalało im pracować z dużymi zbiorami danych z prędkością, której inne systemy nie mogły osiągnąć.

Ograniczenie liczby dostępów do pamięci było kluczem do wydobycia wysokiej wydajności z nowoczesnego komputera. Dla procesorów przetwarzających oznaczało to instalację coraz większej ilości szybkiej pamięci cache i korzystania z coraz bardziej zaawansowanych algorytmów w celu uniknięcia "cache misses". Ale gwałtowny wzrost wielkości systemów operacyjnych i aplikacji na nich działających zahamował rozwój systemów z wykorzystaniem cache. Wieloprocesorowe systemy sprawiają, że problem jest znacznie większy. System może wstrzymać kilka procesorów w tym samym czasie, w szczególności, że tylko jeden procesor może uzyskać dostęp do pamięci w tym czasie.

NUMA próbuje rozwiązać ten problem poprzez zapewnienie odrębnej pamięci dla każdego procesora, unikając spadku wydajności, kiedy to kilka procesorów próbuje połączyć się z tą samą pamięcią. Dla problemów związanych z rozsyłaniem danych (wspólne dla serwerów i podobnych aplikacji), NUMA może poprawić wydajność jednej współdzielonej pamięci w przybliżeniu proporcjonalnie do liczby procesorów (lub oddzielnych banków pamięci).

Oczywistym jest, że dane nie są przydzielane tylko do jednego zadania, co oznacza, że więcej niż jeden procesor może wymagać tych samych danych. Dla wsparcia takich przypadków, systemy NUMA zawierają dodatkowy sprzęt lub oprogramowania do przenoszenia danych pomiędzy bankami. Ta operacja powoduje spowolnienie procesorów związanych z tymi bankami, więc ogólny wzrost szybkości z uwagi na NUMA będzie zależeć w dużej mierze od specyfiki zadań uruchamianych w systemie w danej chwili.

Cache coherent NUMA (ccNUMA) – architektura NUMA ze spójną pamięcią podręczną[edytuj | edytuj kod]

Information icon.svg Osobny artykuł: CCNUMA.

Prawie wszystkie architektury procesorów używają małych, bardzo szybkich, nie-współdzielonych pamięci podręcznych zwanych cache, do których rdzenie procesorów mają bardzo szybki dostęp. Utrzymanie spójności pamięci cache procesora w kontekście pamięci współdzielonej w architekturze NUMA jest bardzo trudne.

Mimo powyższego nawet prostsze do zaprojektowania i budowy, non-cache-coherent NUMA systems 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ść cache, a więc określa się je jako cache-coherent NUMA lub ccNUMA.

W przypadku gdy więcej niż jeden cache 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. System operacyjny wspiera NUMA w celu zmniejszenia częstości tego rodzaju dostępów przez podział czasu procesora i pamięci w sposób przyjazny dla NUMA, unikając blokowania i szeregowania algorytmó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.

Obecne systemy ccNUMA są systemami wieloprocesorowymi opartymi na AMD Opteron, które mogą być realizowane bez zewnętrznej logiki oraz Intel Itanium, który wymaga 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 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 jego serwerów x86 i Itanium pod koniec 2007 roku, wraz z procesorami Nehalem i Tukwila. Obie rodziny procesorów będą dzielić wspólne chipsety; połączenia nazywa się Quick Path Interconnect Intel (QPI).

NUMA czy przetwarzanie klastrowe[edytuj | edytuj kod]

Niektórzy uważają NUMA za bardzo ściśle powiązaną formę klastrów komputerowych. Dodanie stronicowanej pamięci wirtualnej do architektury klastra może umożliwić wdrożenie NUMA w przypadku, gdy sprzętowe NUMA nie jest dostępne. Opóźnienie między węzłami NUMA opartymi na oprogramowaniu jest kilka rzędów wielkości większe niż w NUMA sprzętowym.

Zobacz też[edytuj | edytuj kod]

Bibliografia[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]