Izpratne par NUMA arhitektūru

Understanding Numa Architecture



Datoru projektēšana vienmēr ir kompromiss. Četras datora pamatkomponentes - centrālais procesors (CPU) vai procesors, atmiņa, krātuve un komponentu savienošanas plate (I/O kopņu sistēma) - ir apvienotas pēc iespējas gudrāk, lai izveidotu mašīnu, kas ir gan rentabla, gan jaudīga. Projektēšanas process galvenokārt ietver optimizāciju attiecībā uz procesoriem (līdzprocesori, daudzkodolu iestatīšana), atmiņas veidu un apjomu, krātuvi (diski, failu sistēma), kā arī cenu. Līdzapstrādātāju un daudzkodolu arhitektūras ideja ir izplatīt operācijas pēc iespējas vairākām atsevišķām skaitļošanas vienībām pēc iespējas mazākā telpā un padarīt skaitļošanas instrukciju paralēlo izpildi pieejamāku un pieejamāku. Atmiņas ziņā tas ir jautājums par apjomu vai lielumu, ko var risināt atsevišķa skaitļošanas vienība, un kurš atmiņas veids darbojas ar zemāko iespējamo latentumu. Krātuve pieder ārējai atmiņai, un tās veiktspēja ir atkarīga no diska veida, izmantotās failu sistēmas, pavedieniem, pārsūtīšanas protokola, sakaru struktūras un pievienoto atmiņas ierīču skaita.

I/O kopņu dizains attēlo datora artērijas un būtiski nosaka, cik daudz un cik ātri var apmainīties ar datiem starp iepriekš uzskaitītajām atsevišķajām sastāvdaļām. Augstāko kategoriju vada komponenti, ko izmanto augstas veiktspējas skaitļošanas (HPC) jomā. Sākot ar 2020. gada vidu, HPC mūsdienu pārstāvju vidū ir Nvidia Tesla un DGX, Radeon Instinct un Intel Xeon Phi GPU bāzes paātrinātāji (produktu salīdzinājumus skatīt [1,2]).







Izpratne par NUMA

Non-Uniform Memory Access (NUMA) apraksta koplietojamās atmiņas arhitektūru, ko izmanto mūsdienu daudzprocesu sistēmās. NUMA ir skaitļošanas sistēma, kas sastāv no vairākiem atsevišķiem mezgliem tādā veidā, ka kopējā atmiņa tiek sadalīta starp visiem mezgliem: katram CPU ir piešķirta sava vietējā atmiņa un tā var piekļūt atmiņai no citiem sistēmas centrālajiem procesoriem [12,7].



NUMA ir gudra sistēma, ko izmanto vairāku centrālo procesoru (CPU) savienošanai ar jebkuru datora atmiņas apjomu. Atsevišķi NUMA mezgli ir savienoti, izmantojot mērogojamu tīklu (I/O kopne), lai CPU varētu sistemātiski piekļūt atmiņai, kas saistīta ar citiem NUMA mezgliem.



Vietējā atmiņa ir atmiņa, ko CPU izmanto noteiktā NUMA mezglā. Ārzemju vai attālā atmiņa ir atmiņa, ko CPU ņem no cita NUMA mezgla. Termins NUMA koeficients apraksta ārējās atmiņas piekļuves izmaksu un vietējās atmiņas piekļuves izmaksu attiecību. Jo lielāka attiecība, jo lielākas izmaksas un līdz ar to ilgāks laiks, lai piekļūtu atmiņai.





Tomēr tas prasa ilgāku laiku nekā tad, kad šis centrālais procesors piekļūst savai vietējai atmiņai. Piekļuve vietējai atmiņai ir galvenā priekšrocība, jo tā apvieno zemu latentumu ar lielu joslas platumu. Turpretim piekļūšanai jebkuram citam CPU piederošai atmiņai ir lielāks latentums un zemāka joslas platuma veiktspēja.

Atskatoties pagātnē: koplietojamās atmiņas daudzprocesoru attīstība

Frenks Dennemans [8] norāda, ka mūsdienu sistēmu arhitektūra nepieļauj patiesi vienotu atmiņas piekļuvi (UMA), lai gan šīs sistēmas ir īpaši paredzētas šim nolūkam. Vienkārši runājot, paralēlās skaitļošanas ideja bija izveidot procesoru grupu, kas sadarbojas, lai aprēķinātu noteiktu uzdevumu, tādējādi paātrinot citādi klasisko secīgo aprēķinu.



Kā paskaidroja Frenks Denemans [8], 70. gadu sākumā, ieviešot relāciju datu bāzu sistēmas, vajadzība pēc sistēmām, kas varētu apkalpot vairākas vienlaicīgas lietotāju darbības un pārmērīgu datu ģenerēšanu. Neskatoties uz iespaidīgo vienprocesora veiktspēju, daudzprocesoru sistēmas bija labāk aprīkotas, lai tiktu galā ar šo darba slodzi. Lai nodrošinātu rentablu sistēmu, pētniecības uzmanības centrā kļuva koplietojamās atmiņas adrešu telpa. Sākotnēji tika atbalstītas sistēmas, kurās izmantots šķērsslēdža slēdzis, tomēr šī dizaina sarežģītība tika palielināta līdz ar procesoru skaita pieaugumu, kas padarīja autobusu sistēmu pievilcīgāku. Autobusu sistēmas procesori [var] piekļūt visai atmiņas vietai, nosūtot pieprasījumus kopnē, kas ir ļoti rentabls veids, kā pēc iespējas optimālāk izmantot pieejamo atmiņu.

Tomēr autobusu datorsistēmām ir sašaurinājums-ierobežots joslas platums, kas rada mērogojamības problēmas. Jo vairāk centrālo procesoru tiek pievienoti sistēmai, jo mazāks ir joslas platums vienam mezglam. Turklāt, jo vairāk CPU tiek pievienots, jo garāka kopne un lielāks latentums.

Lielākā daļa CPU tika konstruēti divdimensiju plaknē. CPU bija jāpievieno arī integrēti atmiņas kontrolieri. Vienkāršs risinājums, kurā katram CPU kodolam ir četras atmiņas kopnes (augšējā, apakšējā, kreisā, labā), ļāva nodrošināt pilnu pieejamo joslas platumu, taču tas ir tikai tik tālu. CPU ilgu laiku stagnēja ar četriem kodoliem. Pievienojot pēdas virs un zem, tika atļauti tiešie autobusi pāri CPU, kas atrodas pretēji diagonāli, jo mikroshēmas kļuva par 3D. Četru kodolu CPU ievietošana kartē, kas pēc tam tika pievienota kopnei, bija nākamais loģiskais solis.

Mūsdienās katrā procesorā ir daudz kodolu ar kopīgu mikroshēmas kešatmiņu un atmiņu bez mikroshēmas, un tai ir mainīgas piekļuves izmaksas dažādām atmiņas daļām serverī.

Datu piekļuves efektivitātes uzlabošana ir viens no mūsdienu CPU dizaina galvenajiem mērķiem. Katram CPU kodolam bija neliela pirmā līmeņa kešatmiņa (32 KB) un lielāka (256 KB) 2. līmeņa kešatmiņa. Dažādiem kodoliem vēlāk būs kopīga 3. līmeņa kešatmiņa ar vairākiem MB, kuras lielums laika gaitā ir ievērojami pieaudzis.

Lai izvairītos no kešatmiņas izlaišanas - pieprasot datus, kas nav kešatmiņā -, tiek pētīts daudz laika, lai atrastu pareizo CPU kešatmiņu skaitu, kešatmiņas struktūras un atbilstošos algoritmus. Skatiet [8], lai iegūtu sīkāku skaidrojumu par snoop kešatmiņas saglabāšanas protokolu [4] un kešatmiņas vienotību [3,5], kā arī NUMA dizaina idejas.

Programmatūras atbalsts NUMA

Ir divi programmatūras optimizācijas pasākumi, kas var uzlabot NUMA arhitektūru atbalstošas ​​sistēmas veiktspēju - procesora saistība un datu izvietošana. Kā paskaidrots [19], procesora afinitāte […] ļauj saistīt un atsaistīt procesu vai pavedienu vienam CPU vai virknei CPU tā, lai process vai pavediens darbotos tikai ar norādīto CPU vai CPU, nevis jebkurš CPU. Termins datu izvietojums attiecas uz programmatūras modifikācijām, kurās kods un dati tiek glabāti pēc iespējas tuvāk atmiņā.

Dažādas ar UNIX un UNIX saistītās operētājsistēmas atbalsta NUMA šādos veidos (saraksts ir ņemts no [14]):

  • Silicon Graphics IRIX atbalsts ccNUMA arhitektūrai virs 1240 CPU ar Origin serveru sērijām.
  • Microsoft Windows 7 un Windows Server 2008 R2 pievienoja atbalstu NUMA arhitektūrai virs 64 loģiskajiem kodoliem.
  • Linux kodola 2.5. Versijā jau bija pamata NUMA atbalsts, kas tika vēl vairāk uzlabots turpmākajos kodola laidienos. Linux kodola 3.8 versija radīja jaunu NUMA pamatu, kas ļāva izstrādāt efektīvākas NUMA politikas vēlākos kodola laidienos [13]. Linux kodola 3.13. Versijā tika iekļautas daudzas politikas, kuru mērķis ir procesa tuvināšana tās atmiņai, kā arī lietu apstrāde, piemēram, atmiņas lapu koplietošana starp procesiem vai pārredzamu milzīgu lapu izmantošana; jaunie sistēmas vadības iestatījumi ļauj iespējot vai atspējot NUMA balansēšanu, kā arī konfigurēt dažādus NUMA atmiņas balansēšanas parametrus [15].
  • Gan Oracle, gan OpenSolaris modelē NUMA arhitektūru ar loģisko grupu ieviešanu.
  • FreeBSD pievienoja sākotnējo NUMA interešu un politikas konfigurāciju versijā 11.0.

Grāmatā Datorzinātne un tehnoloģija, Starptautiskās konferences materiāli (CST2016) Ning Cai norāda, ka NUMA arhitektūras izpēte galvenokārt bija vērsta uz augstākās klases skaitļošanas vidi un ierosināja NUMA apzinošu Radix sadalīšanu (NaRP), kas optimizē veiktspēju koplietoto kešatmiņu NUMA mezglos, lai paātrinātu biznesa informācijas lietojumprogrammas. Tādējādi NUMA ir vidusceļš starp koplietojamās atmiņas (SMP) sistēmām ar dažiem procesoriem [6].

NUMA un Linux

Kā minēts iepriekš, Linux kodols ir atbalstījis NUMA kopš versijas 2.5. Gan Debian GNU/Linux, gan Ubuntu piedāvā NUMA atbalstu procesu optimizēšanai ar divām programmatūras pakotnēm numactl [16] un numad [17]. Ar komandas numactl palīdzību jūs varat uzskaitīt savā sistēmā pieejamo NUMA mezglu sarakstu [18]:

# numactl -aparatūra
pieejams:2mezgli(0-1)
mezgls0cpus:0 1 2 3 4 5 6 7 16 17 18 19 divdesmit divdesmitviens 22 2. 3
mezgls0Izmērs:8157MB
mezgls0bezmaksas:88MB
mezgls1cpus:8 9 10 vienpadsmit 12 13 14 piecpadsmit 24 25 26 27 28 29 30 31
mezgls1Izmērs:8191MB
mezgls1bezmaksas:5176MB
mezglu attālumi:
mezgls0 1
0:10 divdesmit
1:divdesmit 10

NumaTop ir noderīgs Intel izstrādāts rīks, lai uzraudzītu izpildlaika atmiņas atrašanās vietu un analizētu procesus NUMA sistēmās [10,11]. Šis rīks var identificēt iespējamās ar NUMA saistītās veiktspējas vājās vietas un tādējādi palīdzēt līdzsvarot atmiņas/CPU sadalījumu, lai maksimāli palielinātu NUMA sistēmas potenciālu. Sīkāku aprakstu skatiet [9].

Lietošanas scenāriji

Datori, kas atbalsta NUMA tehnoloģiju, ļauj visiem centrālajiem procesoriem tieši piekļūt visai atmiņai - CPU to uztver kā vienu, lineāru adrešu telpu. Tas noved pie 64 bitu adresēšanas shēmas efektīvākas izmantošanas, kā rezultātā paātrinās datu kustība, mazāka datu replikācija un vienkāršāka programmēšana.

NUMA sistēmas ir diezgan pievilcīgas servera puses lietojumprogrammām, piemēram, datu ieguvei un lēmumu atbalsta sistēmām. Turklāt ar šo arhitektūru kļūst daudz vieglāk rakstīt lietojumprogrammas spēlēm un augstas veiktspējas programmatūru.

Secinājums

Visbeidzot, NUMA arhitektūra pievēršas mērogojamībai, kas ir viena no tās galvenajām priekšrocībām. NUMA CPU vienam mezglam būs lielāks joslas platums vai zemāks latentums, lai piekļūtu atmiņai tajā pašā mezglā (piemēram, vietējais centrālais procesors pieprasa piekļuvi atmiņai vienlaikus ar attālo piekļuvi; prioritāte ir lokālajam CPU). Tas ievērojami uzlabos atmiņas caurlaidspēju, ja dati tiks lokalizēti noteiktos procesos (un līdz ar to arī procesoros). Trūkumi ir lielākas izmaksas par datu pārvietošanu no viena procesora uz citu. Kamēr šis gadījums nenotiek pārāk bieži, NUMA sistēma pārspēs sistēmas ar tradicionālāku arhitektūru.

Saites un atsauces

  1. Salīdziniet NVIDIA Tesla pret Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Salīdziniet NVIDIA DGX-1 pret Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Kešatmiņas saskaņotība, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Autobusu snooping, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Kešatmiņas saskaņotības protokoli daudzprocesoru sistēmās, Geeks for geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Datorzinātne un tehnoloģijas - Starptautiskās konferences materiāli (CST2016), Ning Cai (red.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet un Marco Cesati: NUMA arhitektūras izpratne Linux kodola izpratnē, 3. izdevums, O’Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frenks Denemans: NUMA Deep Dive 1. daļa: No UMA līdz NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Kolins Īans Kings: NumaTop: NUMA sistēmas uzraudzības rīks, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Paredzētā pakotne Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Izpratne par vienveidīgu atmiņas piekļuvi/arhitektūras (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Linux kodola ziņas kodolam 3.8, https://kernelnewbies.org/Linux_3.8
  14. Piekļuve nevienādai atmiņai (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Linux atmiņas pārvaldības dokumentācija, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Pakotne numactl priekš Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
  17. Pakotnes numurs Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Kā uzzināt, vai NUMA konfigurācija ir iespējota vai atspējota? https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Procesora radniecība, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Paldies

Autori vēlas pateikties Geroldam Rupprehtam par atbalstu, sagatavojot šo rakstu.

Par Autoriem

Plaxedes Nehanda ir daudzkvalificēts, pašpārliecināts, daudzpusīgs cilvēks, kurš nēsā daudzas cepures, tostarp pasākumu plānotāju, virtuālu asistentu, pārrakstītāju, kā arī dedzīgu pētnieku, kas atrodas Johannesburgā, Dienvidāfrikā.

Princis K. Nehanda ir Instrumentu un kontroles (metroloģijas) inženieris Paeflow Metering Harare, Zimbabve.

Frenks Hofmans strādā ceļā-vēlams no Berlīnes (Vācija), Ženēvas (Šveice) un Keiptaunas (Dienvidāfrika)-kā žurnālu, piemēram, Linux-User un Linux Magazine, izstrādātājs, treneris un autors. Viņš ir arī Debian pakotņu pārvaldības grāmatas līdzautors ( http://www.dpmb.org ).