Razumijevanje NUMA arhitekture

Understanding Numa Architecture



Dizajniranje računala uvijek je kompromis. Četiri osnovne komponente računala - središnja procesorska jedinica (CPU) ili procesor, memorija, memorija i ploča za povezivanje komponenti (sustav I/O sabirnice) - kombinirane su što je moguće spretnije kako bi se stvorio stroj koji je isplativ i moćan. Proces projektiranja uglavnom uključuje optimizaciju prema procesorima (ko-procesori, višejezgreno postavljanje), vrstu i količinu memorije, pohranu (diskovi, datotečni sustav), kao i cijenu. Ideja iza koprocesora i višejezgrene arhitekture je raspodijeliti operacije na što više pojedinačnih računalnih jedinica na što je moguće manjem prostoru te učiniti paralelno izvršavanje računalnih uputa dostupnijim i pristupačnijim. Što se tiče memorije, pitanje je količine ili veličine koju pojedinačna računalna jedinica može riješiti i koji tip memorije radi s najmanjom mogućom latencijom. Pohrana pripada vanjskoj memoriji, a njezina izvedba ovisi o vrsti diska, datotečnom sustavu koji se koristi, niti, protokolu prijenosa, komunikacijskom tkivu i broju priključenih memorijskih uređaja.

Dizajn I/O sabirnica predstavlja računalne arterije i značajno određuje koliko se i koliko brzo mogu razmjenjivati ​​podaci između gore navedenih pojedinačnih komponenti. Vrhunsku kategoriju vode komponente korištene u području računarstva visokih performansi (HPC). Od sredine 2020. među suvremenim predstavnicima HPC-a su Nvidia Tesla i DGX, Radeon Instinct i Intel Xeon Phi GPU-bazirani proizvodi za ubrzavanje (za usporedbe proizvoda pogledajte [1,2]).







Razumijevanje NUMA

Neuniformni pristup memoriji (NUMA) opisuje arhitekturu dijeljene memorije koja se koristi u suvremenim višeprocesnim sustavima. NUMA je računalni sustav sastavljen od nekoliko pojedinačnih čvorova na način da se zbirna memorija dijeli između svih čvorova: svakom CPU -u dodijeljena je vlastita lokalna memorija i može pristupiti memoriji s drugih CPU -a u sustavu [12,7].



NUMA je pametan sustav koji se koristi za povezivanje više centralnih procesorskih jedinica (CPU) na bilo koju količinu memorije računala koja je dostupna na računalu. Pojedinačni NUMA čvorovi povezani su preko skalabilne mreže (I/O sabirnica) tako da CPU može sustavno pristupiti memoriji pridruženoj s drugim NUMA čvorovima.



Lokalna memorija je memorija koju CPU koristi u određenom NUMA čvoru. Strana ili udaljena memorija je memorija koju CPU uzima s drugog NUMA čvora. Pojam NUMA ratio opisuje omjer cijene pristupa stranoj memoriji i cijene pristupa lokalnoj memoriji. Što je veći omjer, to su veći troškovi, a time i duže vrijeme za pristup memoriji.





Međutim, potrebno je više vremena nego kada taj CPU pristupa vlastitoj lokalnoj memoriji. Pristup lokalnoj memoriji velika je prednost jer kombinira nisku latenciju s velikom propusnošću. Nasuprot tome, pristup memoriji koja pripada bilo kojem drugom CPU -u ima veće kašnjenje i manje performanse propusnosti.

Osvrt unatrag: Evolucija multiprocesora sa zajedničkom memorijom

Frank Dennemann [8] navodi da moderne arhitekture sustava ne dopuštaju uistinu Uniform Memory Access (UMA), iako su ti sustavi posebno dizajnirani za tu svrhu. Jednostavno rečeno, ideja paralelnog računalstva bila je imati grupu procesora koji surađuju pri izračunavanju zadanog zadatka, čime se ubrzava inače klasično sekvencijalno računanje.



Kao što je objasnio Frank Dennemann [8], početkom 1970 -ih, potreba za sustavima koji bi mogli opsluživati ​​više istovremenih korisničkih operacija i prekomjerno generiranje podataka postala je glavna uz uvođenje relacijskih sustava baza podataka. Unatoč impresivnoj stopi jednoprocesorskih performansi, višeprocesorski sustavi bili su bolje opremljeni za podnošenje ovog radnog opterećenja. Kako bi se osigurao isplativ sustav, adresni prostor zajedničke memorije postao je fokus istraživanja. Rano su se zagovarali sustavi koji koriste poprečni prekidač, međutim s obzirom na to da je složenost dizajna smanjena zajedno s povećanjem procesora, što je sustav sa sabirnicom učinilo privlačnijim. Procesori u sustavu sabirnica [mogu] pristupiti cijelom memorijskom prostoru slanjem zahtjeva na sabirnici, što je vrlo isplativ način za korištenje optimalne dostupne memorije.

Međutim, računalni sustavi sa sabirnicama dolaze do uskog grla-ograničene količine propusnosti koja dovodi do problema s skalabilnošću. Što je više CPU -a dodano u sustav, manja je propusnost po čvoru dostupna. Nadalje, što je više CPU -a dodano, sabirnica je dulja i veća je latencija.

Većina CPU-a izgrađena je u dvodimenzionalnoj ravnini. CPU -i su također morali imati integrirane memorijske kontrolere. Jednostavno rješenje s četiri memorijske sabirnice (gornja, donja, lijeva, desna) za svaku jezgru procesora dopuštalo je punu dostupnu propusnost, ali to ide samo do sada. CPU -i su dosta dugo stagnirali s četiri jezgre. Dodavanje tragova iznad i ispod omogućilo je izravne sabirnice preko dijagonalno suprotnih CPU -a jer su čipovi postali 3D. Sljedeći logičan korak bio je postavljanje četverojezgrenog CPU-a na karticu koja se zatim spojila na sabirnicu.

Danas svaki procesor sadrži mnogo jezgri sa zajedničkom predmemorijom na čipu i memorijom izvan čipa te ima promjenjive troškove pristupa memoriji kroz različite dijelove memorije unutar poslužitelja.

Poboljšanje učinkovitosti pristupa podacima jedan je od glavnih ciljeva suvremenog dizajna CPU -a. Svaka jezgra CPU -a bila je obdarena malim predmemorijom prve razine (32 KB) i većom (256 KB) predmemorijom razine 2. Različita jezgra kasnije će dijeliti predmemoriju razine 3 od nekoliko MB, čija je veličina s vremenom znatno porasla.

Kako bi se izbjegli propusti predmemorije - zahtijevanje podataka koji se ne nalaze u predmemoriji - puno se istraživanja troši na pronalaženje pravog broja predmemorije procesora, struktura predmemorije i odgovarajućih algoritama. Vidi [8] za detaljnije objašnjenje protokola za predmemoriranje snoop -a [4] i koherencije predmemorije [3,5], kao i ideje dizajna iza NUMA -e.

Softverska podrška za NUMA

Postoje dvije mjere optimizacije softvera koje mogu poboljšati performanse sustava koji podržava NUMA arhitekturu - afinitet prema procesoru i postavljanje podataka. Kao što je objašnjeno u [19], afinitet prema procesoru […] omogućuje povezivanje i odvajanje procesa ili niti za jedan CPU ili niz CPU -a, tako da će se proces ili nit izvršavati samo na određenom CPU -u ili CPU -u, a ne bilo koji CPU. Izraz postavljanje podataka odnosi se na softverske izmjene u kojima se kôd i podaci drže što je moguće bliže u memoriji.

Različiti operacijski sustavi povezani s UNIX-om i UNIX-om podržavaju NUMA na sljedeće načine (donji popis je preuzet iz [14]):

  • Silicon Graphics IRIX podrška za ccNUMA arhitekturu preko 1240 CPU -a s Origin serijom poslužitelja.
  • Microsoft Windows 7 i Windows Server 2008 R2 dodali su podršku za NUMA arhitekturu preko 64 logičke jezgre.
  • Verzija 2.5 jezgre Linuxa već je sadržavala osnovnu NUMA podršku, koja je dodatno poboljšana u sljedećim izdanjima jezgre. Verzija 3.8 jezgre Linuxa donijela je novu osnovu NUMA koja je omogućila razvoj učinkovitijih pravila NUMA u kasnijim izdanjima jezgre [13]. Verzija 3.13 jezgre Linuxa donijela je brojne politike koje imaju za cilj staviti proces blizu njegove memorije, zajedno s rukovanjem slučajevima, kao što je dijeljenje memorijskih stranica između procesa ili upotreba prozirnih ogromnih stranica; nove postavke upravljanja sustavom omogućuju ili onemogućuju balansiranje NUMA, kao i konfiguraciju različitih parametara uravnoteženja memorije NUMA [15].
  • Oracle i OpenSolaris modeliraju NUMA arhitekturu s uvođenjem logičkih grupa.
  • FreeBSD je dodao početni NUMA afinitet i konfiguraciju politike u verziji 11.0.

U knjizi Computer Science and Technology, Proceedings of the International Conference (CST2016) Ning Cai sugerira da je proučavanje NUMA arhitekture uglavnom bilo usmjereno na vrhunsko računalno okruženje te je predložio NUMA-svjesno Radix particioniranje (NaRP), što optimizira performanse dijeljenih predmemorija u NUMA čvorovima za ubrzanje aplikacija poslovne inteligencije. Kao takav, NUMA predstavlja sredinu između sustava zajedničke memorije (SMP) s nekoliko procesora [6].

NUMA i Linux

Kao što je gore navedeno, Linux kernel podržava NUMA od verzije 2.5. I Debian GNU/Linux i Ubuntu nude NUMA podršku za optimizaciju procesa s dva programska paketa numactl [16] i numad [17]. Uz pomoć naredbe numactl možete popisati popis dostupnih NUMA čvorova u vašem sustavu [18]:

# numactl -hardverski
dostupno:2čvorova(0-1)
čvor0cpus:0 1 2 3 4 5 6 7 16 17 18 19 dvadeset dvadeset i jedan 22 2. 3
čvor0veličina:8157MB
čvor0besplatno:88MB
čvor1cpus:8 9 10 jedanaest 12 13 14 petnaest 24 25 26 27 28 29 30 31
čvor1veličina:8191MB
čvor1besplatno:5176MB
udaljenosti čvorova:
čvor0 1
0:10 dvadeset
1:dvadeset 10

NumaTop je koristan alat koji je razvio Intel za praćenje lokaliteta memorije tijekom izvođenja i analizu procesa u NUMA sustavima [10,11]. Alat može identificirati potencijalna uska grla performansi povezana s NUMA-om i stoga pomoći u ponovnoj ravnoteži dodjele memorije/CPU-a kako bi se povećao potencijal NUMA sustava. Vidi [9] za detaljniji opis.

Scenariji korištenja

Računala koja podržavaju NUMA tehnologiju omogućuju svim CPU -ima pristup izravno cijeloj memoriji - CPU -i to vide kao jedan, linearni adresni prostor. To dovodi do učinkovitije uporabe 64-bitne sheme adresiranja, što ima za posljedicu brže kretanje podataka, manje replikacije podataka i lakše programiranje.

Sustavi NUMA prilično su privlačni za aplikacije na poslužitelju, poput sustava za rudarenje podataka i podršku odlučivanju. Nadalje, pisanje aplikacija za igre i softver visokih performansi postaje mnogo lakše s ovom arhitekturom.

Zaključak

Zaključno, NUMA arhitektura rješava skalabilnost, što je jedna od njegovih glavnih prednosti. U NUMA CPU -u će jedan čvor imati veću propusnost ili manju latenciju za pristup memoriji na tom čvoru (npr. Lokalni CPU traži pristup memoriji u isto vrijeme kao i udaljeni pristup; prioritet je na lokalnom CPU -u). To će dramatično poboljšati protok memorije ako su podaci lokalizirani na određene procese (a time i procesore). Nedostaci su veći troškovi premještanja podataka s jednog procesora na drugi. Sve dok se ovaj slučaj ne događa previše često, sustav NUMA nadmašit će sustave s tradicionalnijom arhitekturom.

Linkovi i reference

  1. Usporedite NVIDIA Tesla u odnosu na Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Usporedite NVIDIA DGX-1 i Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Koherentnost predmemorije, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Špijuniranje autobusa, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Protokoli usklađenosti predmemorije u višeprocesorskim sustavima, Štreberi za štrebere, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Računalne znanosti i tehnologija - Zbornik radova s ​​međunarodne konferencije (CST2016), Ning Cai (ur.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet i Marco Cesati: Razumijevanje NUMA arhitekture u razumijevanju jezgre Linuxa, 3. izdanje, O’Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive 1. dio: Od UMA do NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: alat za praćenje sustava NUMA, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Paket numatop za Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Razumijevanje neuniformnog pristupa memoriji/arhitektura (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitecture-numa/
  13. Linux Kernel News za Kernel 3.8, https://kernelnewbies.org/Linux_3.8
  14. Neujednačen pristup memoriji (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Linux dokumentacija za upravljanje memorijom, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Paket numactl za Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
  17. Numad paketa za Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Kako saznati je li konfiguracija NUMA omogućena ili onemogućena ?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Afinitet prema procesoru, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Hvala vam

Autori se zahvaljuju Geroldu Rupprechtu na podršci pri pripremi ovog članka.

O autorima

Plaxedes Nehanda je višenamjenska, svestrana i samostalna osoba koja nosi mnoge šešire, među kojima su planeri događanja, virtualni asistent, prepisivač, kao i strastveni istraživač, sa sjedištem u Johannesburgu, Južna Afrika.

Princ K. Nehanda je inženjer instrumentacije i upravljanja (mjeriteljstvo) u Paeflow Metering u Harareu, Zimbabve.

Frank Hofmann radi na cesti-po mogućnosti iz Berlina (Njemačka), Ženeve (Švicarska) i Cape Towna (Južna Afrika)-kao programer, trener i autor za časopise poput Linux-User i Linux Magazine. On je i koautor knjige o upravljanju paketima Debian ( http://www.dpmb.org ).