Niejednolity dostęp do pamięci

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

Niejednolity dostęp do pamięci, NUMA (od ang. Non-Uniform Memory Access) – architektura komputerowa wykorzystywana do realizacji przetwarzania współbieżnego.

Jest to architektura komputerowa zapewniająca oddzielną pamięć operacyjną dla każdego procesora. Każdy procesor kontroluje własną pulę pamięci, co oznacza, że czas dostępu do tej pamięci zależy od położenia procesora. W skrócie, NUMA dąży do minimalizowania opóźnień dostępu do pamięci poprzez przydzielenie pamięci lokalnej dla każdego procesora.

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 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]

Architektura zakłada dostarczenie każdemu procesorowi oddzielnej pamięci operacyjnej, pomimo że 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. To, co oznacza 'niejednolitość czasu dostępu do pamięci', polega na tym, że dany procesor uzyskuje szybszy dostęp do pamięci operacyjnej, którą kontroluje, niż do pamięci obsługiwanej przez inne procesory. Oznacza to, że czas dostępu do pamięci zależy od położenia pamięci 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. Utrzymanie spójności pamięci cache procesora 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 realizowana jest poprzez połączenia QuickPath Interconnect (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 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ż[edytuj | edytuj kod]

Bibliografia[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]