Razumevanje arhitekture NUMA

Understanding Numa Architecture



Oblikovanje računalnikov je vedno kompromis. Štiri osnovne komponente računalnika - osrednja procesorska enota (CPU) ali procesor, pomnilnik, pomnilnik in plošča za povezovanje komponent (sistem V/I vodila) - so združene čim bolj pametno, da ustvarijo stroj, ki je hkrati stroškovno učinkovit in močan. Proces oblikovanja večinoma vključuje optimizacijo procesorjev (soprocesorji, večjedrna nastavitev), vrste in količine pomnilnika, prostora za shranjevanje (diski, datotečni sistem) in cene. Ideja za soprocesorje in večjedrno arhitekturo je razporediti operacije na čim več posameznih računalniških enot na najmanjšem možnem prostoru in narediti vzporedno izvajanje računalniških navodil bolj dostopno in cenovno dostopno. Kar zadeva pomnilnik, gre za količino ali velikost, ki jo lahko obravnava posamezna računalniška enota, in kateri tip pomnilnika deluje z najmanjšo možno zakasnitvijo. Shramba pripada zunanjemu pomnilniku in njena zmogljivost je odvisna od vrste diska, datotečnega sistema, ki je v uporabi, navojev, protokola prenosa, komunikacijskega tkiva in števila priključenih pomnilniških naprav.

Zasnova I/O vodila predstavlja računalniške arterije in pomembno določa, koliko in kako hitro je mogoče izmenjati podatke med zgoraj navedenimi posameznimi komponentami. Najvišjo kategorijo vodijo komponente, ki se uporabljajo na področju visokozmogljivega računalništva (HPC). Od sredine leta 2020 so med sodobnimi predstavniki HPC Nvidia Tesla in DGX, Radeon Instinct ter izdelki za pospeševanje na osnovi GPU na osnovi Intel Xeon Phi (za primerjavo izdelkov glejte [1,2]).







Razumevanje NUMA

Neenakomeren dostop do pomnilnika (NUMA) opisuje arhitekturo pomnilnika v skupni rabi, ki se uporablja v sodobnih sistemih z več procesi. NUMA je računalniški sistem, sestavljen iz več posameznih vozlišč, tako da je skupni pomnilnik v skupni rabi med vsemi vozlišči: vsakemu procesorju je dodeljen lasten lokalni pomnilnik in lahko dostopa do pomnilnika iz drugih procesorjev v sistemu [12,7].



NUMA je pameten sistem, ki se uporablja za povezovanje več centralnih procesnih enot (CPE) s poljubno količino računalniškega pomnilnika, ki je na voljo v računalniku. Posamezna vozlišča NUMA so povezana prek razširljivega omrežja (V/I vodilo), tako da lahko CPE sistematično dostopa do pomnilnika, povezanega z drugimi vozlišči NUMA.



Lokalni pomnilnik je pomnilnik, ki ga CPE uporablja v določenem vozlišču NUMA. Tuji ali oddaljeni pomnilnik je pomnilnik, ki ga procesor jemlje iz drugega vozlišča NUMA. Izraz razmerje NUMA opisuje razmerje med stroški dostopa do tujega pomnilnika in stroški dostopa do lokalnega pomnilnika. Večje kot je razmerje, večji so stroški in s tem dlje časa za dostop do pomnilnika.





Vendar traja dlje kot takrat, ko ta procesor dostopa do lastnega lokalnega pomnilnika. Dostop do lokalnega pomnilnika je velika prednost, saj združuje nizko zakasnitev z visoko pasovno širino. Nasprotno pa ima dostop do pomnilnika, ki pripada kateremu koli drugemu procesorju, večjo zamudo in nižjo pasovno širino.

Če pogledamo nazaj: Evolucija večprocesorjev v skupnem pomnilniku

Frank Dennemann [8] navaja, da sodobne sistemske arhitekture ne dovoljujejo resnično enotnega dostopa do pomnilnika (UMA), čeprav so ti sistemi posebej zasnovani za ta namen. Preprosto povedano, ideja vzporednega računalništva je bila imeti skupino procesorjev, ki sodelujejo pri izračunu dane naloge in s tem pospešijo sicer klasično zaporedno računanje.



Kot je pojasnil Frank Dennemann [8], je v začetku sedemdesetih let potreba po sistemih, ki bi lahko servisirali več sočasnih uporabniških operacij in prekomerno ustvarjanje podatkov, postala glavna z uvedbo sistemov relacijskih baz podatkov. Kljub impresivni stopnji zmogljivosti enoprocesorja so bili večprocesorski sistemi bolje opremljeni za to delovno obremenitev. Da bi zagotovili stroškovno učinkovit sistem, je središče raziskav postal naslovni prostor v skupnem pomnilniku. Zgodaj so se zagovarjali sistemi, ki uporabljajo prečno stikalo, vendar se je ta kompleksnost načrtovanja povečala skupaj s povečanjem procesorjev, zaradi česar je bil sistem, ki temelji na vodilih, privlačnejši. Procesorji v sistemu vodila [lahko] dostopajo do celotnega pomnilniškega prostora s pošiljanjem zahtev po vodilu, kar je zelo stroškovno učinkovit način za čim bolj optimalno uporabo razpoložljivega pomnilnika.

Računalniški sistemi, ki temeljijo na vodilih, imajo ozko grlo-omejeno količino pasovne širine, ki vodi v težave z razširljivostjo. Več procesorjev, ki so dodani sistemu, manj pasovne širine na vozlišče je na voljo. Poleg tega je dodanih več procesorjev, daljše je vodilo in posledično večja zamuda.

Večina procesorjev je bila zgrajena v dvodimenzionalni ravnini. CPE -ji so morali dodati tudi integrirane pomnilniške krmilnike. Preprosta rešitev, ki vključuje štiri pomnilniška vodila (zgoraj, spodaj, levo, desno) do vsakega jedra CPE -ja, je omogočila polno razpoložljivo pasovno širino, vendar to velja le doslej. CPU -ji so precej časa stagnirali s štirimi jedri. Dodajanje sledi zgoraj in spodaj je omogočilo neposredne vodila po diagonalno nasprotnih procesorjih, ko so čipi postali 3D. Naslednji logičen korak je bil namestitev štirijedrnega procesorja na kartico, ki se je nato priključila na vodilo.

Danes vsak procesor vsebuje veliko jeder s skupnim predpomnilnikom na čipu in pomnilnikom zunaj čipa ter ima različne stroške dostopa do pomnilnika v različnih delih pomnilnika v strežniku.

Izboljšanje učinkovitosti dostopa do podatkov je eden glavnih ciljev sodobnega oblikovanja procesorjev. Vsako jedro procesorja je bilo opremljeno z majhnim predpomnilnikom prve stopnje (32 KB) in večjim (256 KB) predpomnilnikom druge stopnje. Različna jedra bodo kasneje delila predpomnilnik 3. stopnje v višini nekaj MB, katerega velikost se je sčasoma precej povečala.

Da bi se izognili napakam v predpomnilniku - zahtevanju podatkov, ki niso v predpomnilniku - veliko časa za raziskovanje porabimo za iskanje pravega števila predpomnilnikov procesorja, struktur predpomnjenja in ustreznih algoritmov. Za podrobnejšo razlago protokola za predpomnjenje snoopa [4] in skladnosti predpomnilnika [3,5] glej [8], pa tudi oblikovalske ideje za NUMA.

Programska podpora za NUMA

Obstajata dva ukrepa za optimizacijo programske opreme, ki lahko izboljšata delovanje sistema, ki podpira arhitekturo NUMA - afiniteta procesorja in postavitev podatkov. Kot je razloženo v [19], afiniteta procesorja [...] omogoča vezavo in razvezovanje procesa ali niti na en CPU ali vrsto CPE -jev, tako da se bo proces ali nit izvedel samo na določenih CPU -jih ali CPU -jih, ne pa kateri koli CPU. Izraz namestitev podatkov se nanaša na spremembe programske opreme, pri katerih so koda in podatki čim bližje v pomnilniku.

Različni operacijski sistemi UNIX in UNIX podpirajo NUMA na naslednje načine (spodnji seznam je vzet iz [14]):

  • Silicon Graphics IRIX podpora za ccNUMA arhitekturo nad 1240 CPU s serijo strežnikov Origin.
  • Microsoft Windows 7 in Windows Server 2008 R2 sta dodala podporo za arhitekturo NUMA nad 64 logičnimi jedri.
  • Različica 2.5 jedra Linuxa je že vsebovala osnovno podporo NUMA, ki je bila v naslednjih izdajah jedra dodatno izboljšana. Različica 3.8 jedra Linuxa je prinesla nov temelj NUMA, ki je omogočal razvoj učinkovitejših pravilnikov NUMA v kasnejših izdajah jedra [13]. Različica 3.13 jedra Linuxa je prinesla številne politike, katerih cilj je približati proces njegovemu pomnilniku, skupaj z obravnavo primerov, na primer souporabo pomnilniških strani med procesi ali uporabo preglednih ogromnih strani; nove nastavitve sistemskega nadzora omogočajo omogočanje ali onemogočanje uravnoteženja NUMA ter konfiguracijo različnih parametrov uravnoteženja pomnilnika NUMA [15].
  • Tako Oracle kot OpenSolaris modelirata arhitekturo NUMA z uvedbo logičnih skupin.
  • FreeBSD je v različici 11.0 dodal začetno konfiguracijo afinitete in politike NUMA.

V knjigi Computer Science and Technology, Proceedings of the International Conference (CST2016) Ning Cai kaže, da je bila študija arhitekture NUMA osredotočena predvsem na vrhunsko računalniško okolje in je predlagala NUMA-zavedanje Radix Partitioning (NaRP), ki optimizira delovanje deljenih predpomnilnikov v vozliščih NUMA za pospešitev aplikacij poslovne inteligence. Tako NUMA predstavlja vmesno pot med sistemi v skupnem pomnilniku (SMP) z nekaj procesorji [6].

NUMA in Linux

Kot je navedeno zgoraj, jedro Linuxa podpira različico NUMA od različice 2.5. Tako Debian GNU/Linux kot Ubuntu ponujata NUMA podporo za optimizacijo procesov z dvema programskima paketoma numactl [16] in numad [17]. S pomočjo ukaza numactl lahko navedete seznam razpoložljivih vozlišč NUMA v vašem sistemu [18]:

# numactl -strojna oprema
na voljo:2vozlišča(0-1)
vozlišče0cpus:0 1 2 3 4 5 6 7 16 17 18 19 dvajset enaindvajset 22 2. 3
vozlišče0velikost:8157MB
vozlišče0prost:88MB
vozlišče1cpus:8 9 10 enajst 12 13 14 petnajst 24 25 26 27 28 29 30 31
vozlišče1velikost:8191MB
vozlišče1prost:5176MB
razdalje vozlišč:
vozlišče0 1
0:10 dvajset
1:dvajset 10

NumaTop je uporabno orodje, ki ga je razvil Intel za spremljanje lokacije pomnilnika med izvajanjem in analizo procesov v sistemih NUMA [10,11]. Orodje lahko identificira morebitna ozka grla, povezana z NUMA, in tako pomaga pri ponovnem uravnoteženju dodeljevanja pomnilnika/CPU-ja, da se poveča potencial sistema NUMA. Za podrobnejši opis glejte [9].

Scenariji uporabe

Računalniki, ki podpirajo tehnologijo NUMA, vsem procesorjem omogočajo neposreden dostop do celotnega pomnilnika - procesorji to vidijo kot en sam, linearni naslovni prostor. To vodi k učinkovitejši uporabi 64-bitne sheme naslavljanja, kar ima za posledico hitrejše premikanje podatkov, manjše podvajanje podatkov in lažje programiranje.

Sistemi NUMA so zelo privlačni za strežniške aplikacije, kot so sistemi za pridobivanje podatkov in podporo pri odločanju. Poleg tega je s to arhitekturo pisanje aplikacij za igre na srečo in visoko zmogljivo programsko opremo veliko lažje.

Zaključek

Skratka, arhitektura NUMA obravnava razširljivost, kar je ena njegovih glavnih prednosti. V procesorju NUMA bo eno vozlišče imelo večjo pasovno širino ali manjšo zakasnitev za dostop do pomnilnika na istem vozlišču (npr. Lokalni CPE zahteva dostop do pomnilnika hkrati z oddaljenim dostopom; prednost ima lokalni CPE). To bo dramatično izboljšalo prepustnost pomnilnika, če so podatki lokalizirani na določene procese (in s tem na procesorje). Slabosti so višji stroški prenosa podatkov iz enega procesorja v drugega. Dokler se ta primer ne zgodi prepogosto, bo sistem NUMA presegel sisteme z bolj tradicionalno arhitekturo.

Povezave in reference

  1. Primerjajte NVIDIA Tesla z Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Primerjajte NVIDIA DGX-1 z Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Skladnost predpomnilnika, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Vohljanje avtobusa, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Protokoli skladnosti predpomnilnika v večprocesorskih sistemih, Geeki za geeke, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Računalništvo in tehnologija - Zbornik z mednarodne konference (CST2016), Ning Cai (ur.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet in Marco Cesati: Razumevanje arhitekture NUMA v Understanding the Linux Kernel, 3rd edition, O’Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive 1. del: Od UMA do NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: orodje za spremljanje sistema 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: Razumevanje neenotnega dostopa do pomnilnika/arhitektur (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Novice o jedru Linuxa za jedro 3.8, https://kernelnewbies.org/Linux_3.8
  14. Neenakomeren dostop do pomnilnika (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Dokumentacija za upravljanje pomnilnika Linux, 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. Paket numad za Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Kako ugotoviti, ali je konfiguracija NUMA omogočena ali onemogočena ?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Afiniteta do procesorja, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Hvala vam

Avtorji bi se radi zahvalili Geroldu Rupprechtu za podporo pri pripravi tega članka.

O avtorjih

Plaxedes Nehanda je vsestranska oseba, ki se samostojno upravlja in ima veliko klobukov, med njimi pa so tudi načrtovalci dogodkov, virtualni pomočnik, prepisovalec in navdušen raziskovalec s sedežem v Johannesburgu v Južni Afriki.

Princ K. Nehanda je inženir instrumentacije in nadzora (meroslovje) pri Paeflow Metering v Harareju v Zimbabveju.

Frank Hofmann dela na cesti-po možnosti iz Berlina (Nemčija), Ženeve (Švica) in Cape Towna (Južna Afrika)-kot razvijalec, trener in avtor za revije, kot sta Linux-User in Linux Magazine. Je tudi soavtor knjige o upravljanju paketov Debian ( http://www.dpmb.org ).