Niejednolity dostęp do pamięci
Ten artykuł należy dopracować |
Niejednolity dostęp do pamięci, NUMA (od ang. non-uniform memory access) – architektura komputerowa wykorzystywana do realizacji 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 zawierają co najmniej dwa procesory, z których każdy kontroluje określoną pulę pamięci operacyjnej. Niejednolitość czasu dostępu do pamięci polega na tym, że dany procesor w krótszym czasie uzyskuje dostęp do pamięci operacyjnej obsługiwanej przez niego samego, niż do pamięci kontrolowanej przez pozostałe procesory.
Non-Uniform Memory Access – architektura z niejednolitym dostępem do pamięci
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 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
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. Wiele superkomputerów z lat 80. i 90. koncentrowało się bardziej na zapewnieniu szybkiego dostępu do pamięci niż użycia wydajniejszych 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 uzyskania 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 chybionych odwołań do pamięci podręcznej (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ą
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. 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 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ątrzprocesorowej 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 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 realizowane są poprzez połączenia QuickPath Interconnect (QPI).
NUMA czy przetwarzanie klastrowe
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 transmisji danych między węzłami NUMA opartymi na oprogramowaniu (np. vSMP) jest kilka rzędów wielkości większe niż w NUMA sprzętowym.
Zobacz też
Bibliografia
- Przetłumaczone z Free On-line Dictionary of Computing
Linki zewnętrzne
- NUMA FAQ
- Page-based distributed shared memory. cs.gmu.edu. [zarchiwizowane z tego adresu (2015-02-01)].
- OpenSolaris NUMA Project. opensolaris.org. [zarchiwizowane z tego adresu (2009-10-24)].
- Introduction video for the Alpha EV7 system architecture. h18002.www1.hp.com. [zarchiwizowane z tego adresu (2004-06-06)].
- NUMA optimization in Windows Applications. developer.amd.com. [zarchiwizowane z tego adresu (2012-06-19)].
- NUMA Support in Linux at SGI. oss.sgi.com. [zarchiwizowane z tego adresu (2011-01-28)].
- Intel Tukwila. realworldtech.com. [zarchiwizowane z tego adresu (2012-05-10)].
- Intel QPI (CSI) explained
- current Itanium NUMA systems