NUMA arhitektuuri mõistmine

Understanding Numa Architecture



Arvutite projekteerimine on alati kompromiss. Arvuti neli põhikomponenti - keskprotsessor (CPU) või protsessor, mälu, salvestusruum ja komponentide ühendamise plaat (I/O siinisüsteem) - on ühendatud nii nutikalt kui võimalik, et luua masin, mis on nii kulutõhus kui ka võimas. Projekteerimisprotsess hõlmab enamasti optimeerimist protsessorite (kaasprotsessorid, mitmetuumalised seadistused), mälu tüübi ja koguse, salvestusruumi (kettad, failisüsteem) ja hinna osas. Kaasprotsessorite ja mitmetuumalise arhitektuuri idee on jaotada toimingud võimalikult paljudele üksikutele arvutusüksustele võimalikult väheses ruumis ning muuta arvutuskäskude paralleelne täitmine kättesaadavamaks ja taskukohasemaks. Mälu osas on küsimus selles, kui suur või suurusega saab üksikarvutusüksus tegeleda ja milline mälutüüp töötab madalaima võimaliku latentsusega. Salvestusruum kuulub välisele mälule ja selle jõudlus sõltub ketta tüübist, kasutatavast failisüsteemist, niidist, edastusprotokollist, sidekangast ja ühendatud mäluseadmete arvust.

I/O -siinide konstruktsioon esindab arvuti artereid ja määrab oluliselt, kui palju ja kui kiiresti saab andmeid vahetada eespool loetletud üksikute komponentide vahel. Tippkategooriat juhivad komponendid, mida kasutatakse suure jõudlusega andmetöötluse (HPC) valdkonnas. Alates 2020. aasta keskpaigast on HPC kaasaegsete esindajate hulgas Nvidia Tesla ja DGX, Radeon Instinct ja Intel Xeon Phi GPU-põhised kiirendustooted (vt toodete võrdlusi [1,2]).







NUMA mõistmine

Non-Uniform Memory Access (NUMA) kirjeldab jagatud mälu arhitektuuri, mida kasutatakse tänapäevastes mitmetöötlussüsteemides. NUMA on arvutisüsteem, mis koosneb mitmest üksikust sõlmest sellisel viisil, et koondmälu jagatakse kõigi sõlmede vahel: igale protsessorile on määratud oma kohalik mälu ja ta saab juurdepääsu mälule teistelt süsteemi protsessoritelt [12,7].



NUMA on nutikas süsteem, mida kasutatakse mitme keskseadme (CPU) ühendamiseks mis tahes arvutis oleva arvutimäluga. Üksikud NUMA sõlmed on ühendatud skaleeritava võrgu (I/O siin) kaudu, nii et protsessor saab süstemaatiliselt juurde pääseda teiste NUMA sõlmedega seotud mälule.



Kohalik mälu on mälu, mida protsessor kasutab konkreetses NUMA sõlmes. Välis- või kaugmälu on mälu, mille protsessor võtab teiselt NUMA sõlmest. Mõiste NUMA suhe kirjeldab välismälule juurdepääsu kulude ja kohaliku mälu juurdepääsu kulude suhet. Mida suurem on suhe, seda suuremad on kulud ja seega kauem kulub mälule juurdepääsu saamiseks.





See võtab aga kauem aega, kui see protsessor pääseb juurde oma kohalikule mälule. Juurdepääs kohalikule mälule on suur eelis, kuna see ühendab väikese latentsusaja ja suure ribalaiuse. Seevastu mis tahes teise protsessori mälule juurdepääsul on suurem latentsusaeg ja madalam ribalaiuse jõudlus.

Tagasi vaadates: jagatud mälu mitmeprotsessorite areng

Frank Dennemann [8] nendib, et tänapäevased süsteemiarhitektuurid ei võimalda tõeliselt ühtset mälujuurdepääsu (UMA), kuigi need süsteemid on spetsiaalselt selleks ette nähtud. Lihtsamalt öeldes oli paralleelse andmetöötluse idee luua protsessorite rühm, kes teevad antud ülesande arvutamiseks koostööd, kiirendades seeläbi muidu klassikalist järjestikust arvutamist.



Nagu selgitas Frank Dennemann [8], muutus relatsiooniliste andmebaasisüsteemide kasutuselevõtmisega 1970ndate alguses vajadus süsteemide järele, mis suudaksid teenindada mitut samaaegset kasutajaoperatsiooni ja liigset andmete genereerimist. Vaatamata muljetavaldavale üheprotsessorilise jõudluse kiirusele olid mitme protsessoriga süsteemid selle töökoormusega toime tulemiseks paremini varustatud. Kulusäästliku süsteemi tagamiseks sai uurimistöö keskmeks ühismälu aadressiruum. Varem pooldati ristlülitit kasutavaid süsteeme, kuid selle disaini keerukust suurendati koos protsessorite arvu suurenemisega, mis muutis bussipõhise süsteemi atraktiivsemaks. Siinis olevad protsessorid [saavad] juurdepääsu kogu mäluruumile, saates siinile päringuid, mis on väga tasuv viis olemasoleva mälu võimalikult optimaalseks kasutamiseks.

Bussipõhistel arvutisüsteemidel on aga kitsaskoht-piiratud ribalaius, mis põhjustab mastaapsuse probleeme. Mida rohkem protsessoreid süsteemile lisatakse, seda väiksem on ribalaius sõlme kohta. Veelgi enam, mida rohkem protsessoreid lisatakse, seda pikem on siin ja sellest tulenevalt ka suurem latentsusaeg.

Enamik protsessoreid ehitati kahemõõtmelisele tasapinnale. Samuti tuli protsessoritele lisada integreeritud mälukontrollerid. Lihtne lahendus, et igas protsessorituumas on neli mälusiini (üleval, all, vasakul, paremal), võimaldas täielikku saadaolevat ribalaiust, kuid see käib ainult seni. Protsessorid jäid märkimisväärselt seisma nelja südamikuga. Jälgede lisamine ülal ja all lubas otsebussid diagonaalselt vastanduvate protsessorite juurde, kuna kiibid muutusid 3D -deks. Nelja südamikuga protsessori paigutamine kaardile, mis seejärel ühendati siiniga, oli järgmine loogiline samm.

Praegu sisaldab iga protsessor palju südamikke, millel on jagatud kiibi vahemälu ja kiibiväline mälu ning sellel on muutuvad mälupöördumiskulud serveri mälu eri osades.

Andmetele juurdepääsu tõhususe parandamine on kaasaegse protsessori disaini üks peamisi eesmärke. Igal protsessori tuumal oli väike ühe taseme vahemälu (32 KB) ja suurem (256 KB) 2. taseme vahemälu. Erinevatel tuumadel oleks hiljem ühine 3. taseme vahemälu mitme MB ulatuses, mille suurus on aja jooksul märkimisväärselt kasvanud.

Vahemälu puudumise vältimiseks - andmete pärimine, mida pole vahemälus - kulutatakse palju uurimisaega õige arvu protsessori vahemälu, vahemällu salvestamise struktuuride ja vastavate algoritmide leidmiseks. Vaadake [8] täpsemat selgitust vahemällu salvestamise protokolli [4] ja vahemälu sidususe [3,5] kohta, samuti NUMA taga olevaid disainiideid.

Tarkvara tugi NUMA -le

Tarkvara optimeerimise meetmeid, mis võivad parandada NUMA arhitektuuri toetava süsteemi toimivust, on kaks - protsessori afiinsus ja andmete paigutus. Nagu on selgitatud punktis [19], võimaldab protsessori afiinsus […] siduda ja lahti siduda protsessi või lõime ühe protsessori või protsessorite vahemikuga, nii et protsess või niit käivitatakse ainult määratud protsessoril või protsessoritel, mitte mis tahes CPU. Mõiste andmete paigutus viitab tarkvara modifikatsioonidele, mille käigus kood ja andmed hoitakse mälus võimalikult lähedal.

Erinevad UNIX-i ja UNIX-iga seotud operatsioonisüsteemid toetavad NUMA-d järgmistel viisidel (allolev loend on võetud [14]):

  • Silicon Graphics IRIX tugi ccNUMA arhitektuurile üle 1240 protsessori koos Origin serverisarjaga.
  • Microsoft Windows 7 ja Windows Server 2008 R2 lisasid tugi NUMA arhitektuurile üle 64 loogilise tuuma.
  • Linuxi kerneli versioon 2.5 sisaldas juba põhilist NUMA -tugi, mida täiendati järgnevates kerneli väljaannetes. Linuxi kerneli versioon 3.8 tõi uue NUMA aluse, mis võimaldas hilisemates kerneli väljaannetes välja töötada tõhusamad NUMA -poliitikad [13]. Linuxi kerneli versioon 3.13 tõi kaasa arvukalt poliitikaid, mille eesmärk on panna protsess mälu lähedale koos juhtumite käsitlemisega, näiteks mälulehtede jagamine protsesside vahel või läbipaistvate tohutute lehtede kasutamine; uued süsteemi juhtimissätted võimaldavad lubada või keelata NUMA tasakaalustamist ning konfigureerida erinevaid NUMA mälu tasakaalustamise parameetreid [15].
  • Nii Oracle kui ka OpenSolaris modelleerivad NUMA arhitektuuri koos loogiliste rühmade kasutuselevõtuga.
  • FreeBSD lisas versiooni 11.0 esialgse NUMA afiinsuse ja reeglite konfiguratsiooni.

Raamatus Arvutiteadus ja tehnoloogia, rahvusvahelise konverentsi toimetised (CST2016) Ning Cai soovitab, et NUMA arhitektuuri uurimine keskendus peamiselt tipptasemel arvutuskeskkonnale ja pakkus välja NUMA-teadliku Radix-jaotuse (NaRP), mis optimeerib jõudlust jagatud vahemäludest NUMA sõlmedes, et kiirendada äriteabe rakendusi. Sellisena kujutab NUMA keskteed mõne protsessoriga jagatud mälu (SMP) süsteemide vahel [6].

NUMA ja Linux

Nagu eespool öeldud, toetab Linuxi kernel NUMA -d alates versioonist 2.5. Nii Debian GNU/Linux kui ka Ubuntu pakuvad NUMA tuge protsesside optimeerimiseks kahe tarkvarapaketi numactl [16] ja numad [17] abil. Käsu numactl abil saate loetleda oma süsteemis saadaolevate NUMA sõlmede loendi [18]:

# numactl -riistvara
saadaval:2sõlmed(0-1)
sõlm0cpus:0 1 2 3 4 5 6 7 16 17 18 19 kakskümmend kakskümmend üks 22 2. 3
sõlm0suurus:8157MB
sõlm0tasuta:88MB
sõlm1cpus:8 9 10 üksteist 12 13 14 viisteist 24 25 26 27 28 29 30 31
sõlm1suurus:8191MB
sõlm1tasuta:5176MB
sõlmede kaugused:
sõlm0 1
0:10 kakskümmend
1:kakskümmend 10

NumaTop on Inteli poolt välja töötatud kasulik tööriist käitusaja mälu asukoha jälgimiseks ja protsesside analüüsimiseks NUMA süsteemides [10,11]. Tööriist suudab tuvastada võimalikke NUMA-ga seotud jõudluse kitsaskohti ja aitab seega tasakaalustada mälu/protsessori eraldamist, et maksimeerida NUMA-süsteemi potentsiaali. Üksikasjalikumat kirjeldust vt [9].

Kasutusstsenaariumid

Arvutid, mis toetavad NUMA tehnoloogiat, võimaldavad kõigil protsessoritel kogu mälule otse juurde pääseda - protsessorid näevad seda kui ühte lineaarset aadressiruumi. See toob kaasa 64-bitise aadressiskeemi tõhusama kasutamise, mille tulemuseks on andmete kiirem liikumine, vähem andmete replikatsiooni ja lihtsam programmeerimine.

NUMA süsteemid on serveripoolsete rakenduste, näiteks andmekaevandamise ja otsuste tugisüsteemide jaoks üsna atraktiivsed. Lisaks muutub selle arhitektuuri abil mängude jaoks mõeldud rakenduste ja suure jõudlusega tarkvara kirjutamine palju lihtsamaks.

Järeldus

Kokkuvõtteks võib öelda, et NUMA arhitektuur käsitleb mastaapsust, mis on üks selle peamisi eeliseid. NUMA protsessoris on ühel sõlmel suurem ribalaius või väiksem latentsus, et pääseda juurde samale sõlmele (nt kohalik protsessor taotleb juurdepääsu mälule samal ajal kui kaugjuurdepääs; prioriteet on kohalik protsessor). See parandab oluliselt mälu läbilaskevõimet, kui andmed on lokaliseeritud konkreetsetele protsessidele (ja seega ka protsessoritele). Puudusteks on andmete ühelt protsessorilt teisele teisaldamise kõrgemad kulud. Kuni seda juhtumit ei juhtu liiga sageli, edestab NUMA süsteem traditsioonilisema arhitektuuriga süsteeme.

Viited ja viited

  1. Võrdle NVIDIA Tesla versiooni Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Võrrelge NVIDIA DGX-1 versiooni Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Vahemälu sidusus, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Busside nuhkimine, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Vahemälu sidususe protokollid mitme protsessori süsteemides, Geeks geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Arvutiteadus ja tehnoloogia - rahvusvahelise konverentsi (CST2016) toimetised, Ning Cai (toim.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet ja Marco Cesati: NUMA arhitektuuri mõistmine Linuxi kerneli mõistmisel, 3. väljaanne, O’Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive 1. osa: UMA -lt NUMA -le, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: NUMA süsteemi jälgimise tööriist, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Pakett on ette nähtud Debian GNU / Linuxile, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: arusaamine ebaühtlasest mälupöördusest/arhitektuurist (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Linuxi kerneli uudised kerneli 3.8 jaoks, https://kernelnewbies.org/Linux_3.8
  14. Ebaühtlane juurdepääs mälule (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Linuxi mäluhalduse dokumentatsioon, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Pakett numactl Debian GNU/Linuxile, https://packages.debian.org/sid/admin/numactl
  17. Pakett numad Debian GNU/Linuxile, https://packages.debian.org/buster/numad
  18. Kuidas teada saada, kas NUMA konfiguratsioon on lubatud või keelatud? https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Protsessori ühisus, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Aitäh

Autorid soovivad tänada Gerold Rupprechti toetuse eest selle artikli ettevalmistamisel.

Autorite kohta

Plaxedes Nehanda on mitmekülgne ja iseseisev mitmekülgne inimene, kes kannab palju mütse, nende hulgas sündmuste planeerijat, virtuaalset assistenti, transkribeerijat ja innukat teadlast, kes asub Lõuna-Aafrikas Johannesburgis.

Prints K. Nehanda on Instrumentation and Control (Metrology) insener Paeflow Meteringus Harares, Zimbabwes.

Frank Hofmann töötab teel-soovitavalt Berliinist (Saksamaa), Genfist (Šveits) ja Kaplinnast (Lõuna-Aafrika Vabariik)-ajakirjade, nagu Linux-User ja Linux Magazine, arendaja, koolitaja ja autorina. Ta on ka Debiani pakettide haldamise raamatu kaasautor ( http://www.dpmb.org ).