NUMA architektūros supratimas

Understanding Numa Architecture



Kompiuterių projektavimas visada yra kompromisas. Keturi pagrindiniai kompiuterio komponentai - centrinis procesorius (procesorius) arba procesorius, atmintis, saugykla ir komponentų prijungimo plokštė (įvesties/išvesties magistralės sistema) - yra sumaniai sujungti, kad būtų sukurta mašina, kuri yra ir ekonomiškas, ir galingas. Projektavimo procesas dažniausiai apima optimizavimą procesoriams (bendraprocesoriai, kelių branduolių sąranka), atminties tipas ir kiekis, saugykla (diskai, failų sistema), taip pat kaina. Bendro procesoriaus ir kelių branduolių architektūros idėja paskirstyti operacijas kuo daugiau atskirų skaičiavimo vienetų kuo mažesnėje erdvėje ir padaryti lygiagrečiau vykdomas skaičiavimo instrukcijas prieinamesnes ir prieinamesnes. Kalbant apie atmintį, tai yra kiekis ar dydis, kurį gali išspręsti atskiras skaičiavimo blokas, ir kuris atminties tipas veikia su mažiausiu įmanomu vėlavimu. Saugykla priklauso išorinei atminčiai, o jos veikimas priklauso nuo disko tipo, naudojamos failų sistemos, sriegimo, perdavimo protokolo, ryšio struktūros ir prijungtų atminties įrenginių skaičiaus.

Įvesties/išvesties magistralių dizainas atspindi kompiuterio arterijas ir žymiai lemia, kiek ir kaip greitai galima keistis duomenimis tarp aukščiau išvardytų atskirų komponentų. Aukščiausiajai kategorijai vadovauja komponentai, naudojami didelio našumo skaičiavimo (HPC) srityje. Nuo 2020 m. Vidurio tarp šiuolaikinių HPC atstovų yra „Nvidia Tesla“ ir „DGX“, „Radeon Instinct“ ir „Intel Xeon Phi“ GPU pagrįsti greitintuvai (produktų palyginimą žr. [1,2]).







NUMA supratimas

Nevienodos atminties prieiga (NUMA) apibūdina bendrosios atminties architektūrą, naudojamą šiuolaikinėse daugiaprocesinėse sistemose. NUMA yra skaičiavimo sistema, sudaryta iš kelių atskirų mazgų taip, kad bendra atmintis būtų dalijama tarp visų mazgų: kiekvienam procesoriui priskiriama sava vietinė atmintis ir jis gali pasiekti atmintį iš kitų sistemos procesorių [12,7].



NUMA yra protinga sistema, naudojama prijungti kelis centrinius procesorius (CPU) prie bet kokio kompiuterio atminties kiekio. Pavieniai NUMA mazgai yra sujungti per keičiamą tinklą (įvesties/išvesties magistralę) taip, kad procesorius galėtų sistemingai pasiekti atmintį, susietą su kitais NUMA mazgais.



Vietinė atmintis yra atmintis, kurią procesorius naudoja tam tikrame NUMA mazge. Užsienio ar nuotolinė atmintis yra atmintis, kurią CPU perima iš kito NUMA mazgo. Sąvoka NUMA koeficientas apibūdina prieigos prie užsienio atminties ir prieigos prie vietinės atminties išlaidų santykį. Kuo didesnis santykis, tuo didesnė kaina, taigi ilgiau užtrunka prieiga prie atminties.





Tačiau tai užtrunka ilgiau nei tada, kai tas procesorius pasiekia savo vietinę atmintį. Prieiga prie vietinės atminties yra pagrindinis privalumas, nes ji sujungia mažą delsą ir didelį pralaidumą. Priešingai, prieiga prie atminties, priklausančios bet kuriam kitam procesoriui, turi didesnį delsą ir mažesnį pralaidumą.

Žvelgiant atgal: bendros atminties daugiaprocesorių raida

Frankas Dennemannas [8] teigia, kad šiuolaikinės sistemų architektūros neleidžia iš tikrųjų vienodos atminties prieigos (UMA), nors šios sistemos yra specialiai tam sukurtos. Paprasčiau tariant, lygiagretaus skaičiavimo idėja buvo turėti procesorių grupę, kuri bendradarbiauja apskaičiuodama tam tikrą užduotį, taip paspartindama kitaip klasikinį nuoseklųjį skaičiavimą.



Kaip paaiškino Frankas Dennemannas [8], aštuntojo dešimtmečio pradžioje, pradėjus taikyti santykių duomenų bazių sistemas, poreikis sistemoms, galinčioms aptarnauti kelias vienu metu veikiančias vartotojų operacijas ir perteklinį duomenų generavimą, tapo pagrindine. Nepaisant įspūdingo vienprocesoriaus našumo, daugiaprocesorinės sistemos buvo geriau įrengtos šiam darbo krūviui valdyti. Siekiant užtikrinti ekonomiškai efektyvią sistemą, bendros atminties adresų erdvė tapo tyrimų centru. Anksčiau buvo propaguojamos sistemos, kuriose naudojamas skersinis jungiklis, tačiau dėl šio dizaino sudėtingumo padidėjo procesorių skaičius, todėl autobusų sistema tapo patrauklesnė. Magistralės sistemos procesoriai [gali] pasiekti visą atminties erdvę, siunčiant užklausas magistralėje-tai labai ekonomiškas būdas maksimaliai optimaliai išnaudoti turimą atmintį.

Tačiau magistralinėse kompiuterinėse sistemose yra kliūtis-ribotas pralaidumas, dėl kurio kyla mastelio keitimo problemų. Kuo daugiau procesorių pridedama prie sistemos, tuo mažesnis pralaidumas vienam mazgui. Be to, kuo daugiau procesorių pridedama, tuo ilgesnė magistralė ir dėl to didesnė delsos trukmė.

Dauguma procesorių buvo sukonstruoti dvimatėje plokštumoje. CPU taip pat turėjo būti pridėti integruoti atminties valdikliai. Paprastas sprendimas, turintis keturias atminties magistrales (viršuje, apačioje, kairėje, dešinėje) prie kiekvieno procesoriaus branduolio, leido visą prieinamą pralaidumą, tačiau tai tik iki šiol. CPU ilgą laiką stagnavo keturiais branduoliais. Pridėjus pėdsakų aukščiau ir žemiau, tiesioginiai autobusai buvo įstrižai priešinguose procesoriuose, nes lustai tapo 3D. Kitas logiškas žingsnis buvo keturių branduolių procesoriaus įdėjimas į kortelę, kuri vėliau buvo prijungta prie magistralės.

Šiandien kiekviename procesoriuje yra daug branduolių su bendra mikroschemos talpykla ir ne mikroschemos atmintimi, o kintamos prieigos prie atminties išlaidos įvairiose serverio atminties dalyse.

Prieigos prie duomenų efektyvumo gerinimas yra vienas iš pagrindinių šiuolaikinio procesoriaus projektavimo tikslų. Kiekvienas procesoriaus branduolys buvo aprūpintas maža vieno lygio talpykla (32 KB) ir didesne (256 KB) 2 lygio talpykla. Įvairūs branduoliai vėliau pasidalins 3 lygio keleto MB talpykla, kurios dydis laikui bėgant labai išaugo.

Siekiant išvengti talpyklos praleidimų - prašant duomenų, kurių nėra talpykloje - daug laiko skiriama ieškant reikiamo skaičiaus procesoriaus talpyklų, talpyklos struktūrų ir atitinkamų algoritmų. Žiūrėkite [8], jei norite išsamiau paaiškinti „snoop“ talpyklos protokolą [4] ir talpyklos nuoseklumą [3,5], taip pat NUMA dizaino idėjas.

Programinės įrangos palaikymas NUMA

Yra dvi programinės įrangos optimizavimo priemonės, kurios gali pagerinti NUMA architektūrą palaikančios sistemos našumą - procesoriaus giminingumas ir duomenų talpinimas. Kaip paaiškinta [19], procesoriaus giminingumas […] leidžia susieti ir atsieti procesą ar giją prie vieno procesoriaus arba procesorių diapazono, kad procesas ar gija būtų vykdomi tik nurodytu procesoriumi ar procesoriais, o ne bet koks procesorius. Terminas „duomenų talpinimas“ reiškia programinės įrangos pakeitimus, kurių metu kodas ir duomenys yra kuo arčiau atminties.

Įvairios su UNIX ir su UNIX susijusios operacinės sistemos palaiko NUMA šiais būdais (toliau pateiktas sąrašas paimtas iš [14]):

  • „Silicon Graphics IRIX“ palaikymas „ccNUMA“ architektūrai virš 1240 procesorių su „Origin“ serverių serijomis.
  • „Microsoft Windows 7“ ir „Windows Server 2008 R2“ papildė NUMA architektūros palaikymą per 64 loginius branduolius.
  • „Linux“ branduolio 2.5 versijoje jau buvo pagrindinis NUMA palaikymas, kuris buvo dar labiau patobulintas vėlesniuose branduolio leidimuose. „Linux“ branduolio 3.8 versija suteikė naują NUMA pagrindą, leidusį sukurti veiksmingesnę NUMA politiką vėlesniuose branduolio leidimuose [13]. „Linux“ branduolio 3.13 versija atnešė daugybę politikos krypčių, kuriomis siekiama priartinti procesą prie jo atminties ir tvarkyti bylas, pvz., Bendrinti atminties puslapius tarp procesų arba naudoti skaidrius didžiulius puslapius; nauji sistemos valdymo nustatymai leidžia įjungti arba išjungti NUMA balansavimą, taip pat konfigūruoti įvairius NUMA atminties balansavimo parametrus [15].
  • Tiek „Oracle“, tiek „OpenSolaris“ modeliuoja NUMA architektūrą su loginių grupių įvedimu.
  • „FreeBSD“ 11.0 versijoje pridėjo pradinį NUMA giminingumą ir politikos konfigūraciją.

Ning Cai knygoje „Kompiuterių mokslas ir technologijos, tarptautinės konferencijos medžiaga“ (CST2016) teigia, kad NUMA architektūros tyrimas daugiausia buvo sutelktas į aukščiausios klasės kompiuterių aplinką ir pasiūlė NUMA žinantį „Radix“ skaidymą (NaRP), kuris optimizuoja našumą bendrinamų talpyklų NUMA mazguose, kad paspartintų verslo žvalgybos programas. Taigi NUMA yra vidurinis kelias tarp bendrosios atminties (SMP) sistemų su keliais procesoriais [6].

NUMA ir „Linux“

Kaip minėta aukščiau, „Linux“ branduolys palaiko NUMA nuo 2.5 versijos. Tiek „Debian GNU/Linux“, tiek „Ubuntu“ siūlo NUMA palaikymą procesų optimizavimui naudojant du programinės įrangos paketus: numactl [16] ir numad [17]. Naudodamiesi komanda numactl, galite išvardyti galimų NUMA mazgų sąrašą savo sistemoje [18]:

# numactl -aparatinė įranga
galima:2mazgai(0-1)
mazgas0cpus:0 1 2 3 4 5 6 7 16 17 18 19 dvidešimt dvidešimt vienas 22 2. 3
mazgas0dydis:8157MB
mazgas0Laisvas:88MB
mazgas1cpus:8 9 10 vienuolika 12 13 14 penkiolika 24 25 26 27 28 29 30 31
mazgas1dydis:8191MB
mazgas1Laisvas:5176MB
mazgų atstumai:
mazgas0 1
0:10 dvidešimt
1:dvidešimt 10

„NumaTop“ yra naudingas „Intel“ sukurtas įrankis, skirtas stebėti veikimo laiko atminties vietą ir analizuoti procesus NUMA sistemose [10,11]. Įrankis gali nustatyti galimas su NUMA susijusias našumo kliūtis ir taip padėti iš naujo subalansuoti atminties/procesoriaus paskirstymą, kad maksimaliai padidintų NUMA sistemos galimybes. Išsamesnį aprašymą rasite [9].

Naudojimo scenarijai

Kompiuteriai, palaikantys NUMA technologiją, leidžia visiems procesoriams tiesiogiai pasiekti visą atmintį - procesoriai tai mato kaip vieną linijinę adresų erdvę. Tai lemia efektyvesnį 64 bitų adresavimo schemos naudojimą, o tai lemia greitesnį duomenų judėjimą, mažesnį duomenų replikaciją ir lengvesnį programavimą.

NUMA sistemos yra gana patrauklios serverio programoms, tokioms kaip duomenų gavyba ir sprendimų palaikymo sistemos. Be to, naudojant šią architektūrą daug lengviau rašyti programas žaidimams ir aukštos kokybės programinei įrangai.

Išvada

Apibendrinant galima pasakyti, kad NUMA architektūra skirta mastelio keitimui, o tai yra vienas pagrindinių jo privalumų. NUMA procesoriuje vienas mazgas turės didesnį pralaidumą arba mažesnį delsą, kad galėtų pasiekti to paties mazgo atmintį (pvz., Vietinis procesorius prašo prieigos prie atminties tuo pačiu metu kaip ir nuotolinė prieiga; pirmenybė teikiama vietiniam procesoriui). Tai žymiai pagerins atminties pralaidumą, jei duomenys bus lokalizuoti konkrečiuose procesuose (taigi ir procesoriuose). Trūkumai yra didesnės duomenų perkėlimo iš vieno procesoriaus į kitą išlaidos. Kol šis atvejis neįvyks per dažnai, NUMA sistema pranoks sistemas, turinčias labiau tradicinę architektūrą.

Nuorodos ir nuorodos

  1. Palyginkite „NVIDIA Tesla“ ir „Radeon Instinct“, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Palyginkite „NVIDIA DGX-1“ ir „Radeon Instinct“, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Talpyklos nuoseklumas, Vikipedija, https://en.wikipedia.org/wiki/Cache_coherence
  4. Autobusų šnipinėjimas, Vikipedija, https://en.wikipedia.org/wiki/Bus_snooping
  5. Talpyklos nuoseklumo protokolai daugiaprocesorinėse sistemose, „Geeks for geeks“, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Kompiuterių mokslas ir technologijos. Tarptautinės konferencijos pranešimai (CST2016), Ning Cai (red.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet ir Marco Cesati: NUMA architektūros supratimas supratus „Linux“ branduolį, trečiasis leidimas, O’Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA gilusis nardymas 1 dalis: Nuo UMA iki NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: NUMA sistemos stebėjimo įrankis, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. „Debian GNU / Linux“ numatytas paketas, https://packages.debian.org/buster/numatop
  12. Jonathanas Kehayiasas: Nevienodos atminties prieigos supratimas/architektūros (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. „Linux“ branduolio naujienos, skirtos 3.8 branduoliui, https://kernelnewbies.org/Linux_3.8
  14. Prieiga prie nevienodos atminties (NUMA), „Wikipedia“, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. „Linux“ atminties valdymo dokumentacija, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Paketas „numactl“, skirtas „Debian GNU/Linux“, https://packages.debian.org/sid/admin/numactl
  17. „Debian GNU/Linux“ paketo numadas, https://packages.debian.org/buster/numad
  18. Kaip sužinoti, ar NUMA konfigūracija įjungta, ar išjungta? https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Procesoriaus giminingumas, „Wikipedia“, https://en.wikipedia.org/wiki/Processor_affinity

Ačiū

Autoriai norėtų padėkoti Geroldui Rupprechtui už paramą rengiant šį straipsnį.

Apie Autorius

Plaxedesas Nehanda yra daugialypis, savarankiškas, universalus žmogus, nešiojantis daug skrybėlių, tarp jų-renginių planuotojas, virtualus asistentas, perrašinėtojas ir aistringas tyrinėtojas, įsikūręs Johanesburge, Pietų Afrikoje.

Princas K. Nehanda yra prietaisų ir valdymo (metrologijos) inžinierius, dirbantis „Paeflow Metering“ Harare, Zimbabvėje.

Frank Hofmann dirba kelyje-pageidautina iš Berlyno (Vokietija), Ženevos (Šveicarija) ir Keiptauno (Pietų Afrika)-kaip žurnalų, tokių kaip „Linux-User“ ir „Linux Magazine“, kūrėjas, treneris ir autorius. Jis taip pat yra „Debian“ paketų valdymo knygos ( http://www.dpmb.org ).