NUMA -arkkitehtuurin ymmärtäminen

Understanding Numa Architecture



Tietokoneiden suunnittelu on aina kompromissi. Tietokoneen neljä peruskomponenttia - keskusyksikkö (CPU) tai prosessori, muisti, tallennustila ja komponenttien liitäntäkortti (I/O -väyläjärjestelmä) - yhdistetään mahdollisimman taitavasti ja luodaan kone, joka on sekä kustannustehokas että tehokas. Suunnitteluprosessi sisältää enimmäkseen optimoinnin prosessoreille (rinnakkaisprosessorit, moniytiminen asennus), muistityypille ja -määrälle, tallennustilalle (levyt, tiedostojärjestelmä) sekä hinnalle. jakaa operaatiot mahdollisimman monelle yksittäiselle laskentayksikölle pienimmässä tilassa ja tehdä laskentaohjeiden rinnakkaisesta suorittamisesta saatavilla ja edullisempaa. Muistin osalta on kyse määrästä tai koosta, jonka yksittäinen laskentayksikkö voi käsitellä, ja mikä muistityyppi toimii mahdollisimman pienellä viiveellä. Tallennustila kuuluu ulkoiseen muistiin, ja sen suorituskyky riippuu levytyypistä, käytössä olevasta tiedostojärjestelmästä, säikeistyksestä, siirtoprotokollasta, viestintärakenteesta ja liitettyjen muistilaitteiden määrästä.

I/O -väylien rakenne edustaa tietokoneen valtimoita ja määrittää merkittävästi, kuinka paljon ja kuinka nopeasti tietoja voidaan vaihtaa yllä lueteltujen yksittäisten komponenttien välillä. Huippuluokkaa johtavat komponentit, joita käytetään korkean suorituskyvyn tietojenkäsittelyn (HPC) alalla. Vuoden 2020 puolivälistä lähtien HPC: n nykyaikaisten edustajien joukossa ovat Nvidia Tesla ja DGX, Radeon Instinct ja Intel Xeon Phi GPU -pohjaiset kiihdytintuotteet (katso vertailut [1,2]).







Ymmärtäminen NUMA

Non-Uniform Memory Access (NUMA) kuvaa jaetun muistin arkkitehtuuria, jota käytetään nykyaikaisissa moniprosessointijärjestelmissä. NUMA on tietokonejärjestelmä, joka koostuu useista yksittäisistä solmuista siten, että koko muisti jaetaan kaikkien solmujen kesken: kullekin suorittimelle on oma paikallinen muisti ja se voi käyttää muistia muista järjestelmän keskusyksiköistä [12,7].



NUMA on älykäs järjestelmä, jota käytetään useiden keskusyksiköiden (CPU) yhdistämiseen mihin tahansa tietokoneen muistiin. Yksittäiset NUMA -solmut on kytketty skaalautuvan verkon (I/O -väylän) kautta siten, että keskusyksikkö voi järjestelmällisesti käyttää muihin NUMA -solmuihin liittyvää muistia.



Paikallinen muisti on muisti, jota suoritin käyttää tietyssä NUMA -solmussa. Ulkoinen tai etämuisti on muisti, jonka suoritin ottaa toiselta NUMA -solmulta. Termi NUMA -suhde kuvaa vieraan muistin käyttökustannusten ja paikallisen muistin käyttökustannusten suhdetta. Mitä suurempi suhde, sitä suuremmat kustannukset ja siten kauemmin kestää käyttää muistia.





Se kestää kuitenkin kauemmin kuin silloin, kun kyseinen suoritin käyttää omaa paikallista muistiaan. Paikallisen muistin käyttö on suuri etu, koska se yhdistää alhaisen viiveen ja suuren kaistanleveyden. Sitä vastoin muille suorittimille kuuluvan muistin käyttämisellä on suurempi viive ja pienempi kaistanleveys.

Katse taaksepäin: Jaetun muistin moniprosessorien kehitys

Frank Dennemann [8] toteaa, että nykyaikaiset järjestelmäarkkitehtuurit eivät salli todella yhtenäistä muistipääsyä (UMA), vaikka nämä järjestelmät on erityisesti suunniteltu tätä tarkoitusta varten. Yksinkertaisesti sanottuna rinnakkaislaskennan ajatuksena oli saada joukko prosessoreita, jotka tekevät yhteistyötä tietyn tehtävän laskemiseksi, mikä nopeuttaa muuten klassista peräkkäistä laskentaa.



Kuten Frank Dennemann [8] selitti, 1970 -luvun alussa tarve järjestelmille, jotka pystyisivät palvelemaan useita samanaikaisia ​​käyttäjäoperaatioita ja liiallista tiedontuotantoa, tuli valtavirtaan relaatiotietokantajärjestelmien käyttöönoton myötä. Huolimatta vaikuttavasta yksiprosessorin suorituskyvystä, moniprosessorijärjestelmät olivat paremmin varustettuja käsittelemään tätä työtaakkaa. Kustannustehokkaan järjestelmän tarjoamiseksi jaetun muistin osoitetila tuli tutkimuksen painopisteeksi. Varhaisessa vaiheessa kannatettiin ristikytkimiä käyttäviä järjestelmiä, mutta tämä suunnittelun monimutkaisuus skaalautui yhdessä prosessorien kasvun kanssa, mikä teki väyläpohjaisesta järjestelmästä houkuttelevamman. Väyläjärjestelmän prosessorit [voivat] käyttää koko muistitilaa lähettämällä pyyntöjä väylällä, mikä on erittäin kustannustehokas tapa käyttää käytettävissä olevaa muistia mahdollisimman optimaalisesti.

Väyläpohjaisissa tietokonejärjestelmissä on kuitenkin pullonkaula-rajallinen kaistanleveys, joka johtaa skaalautuvuusongelmiin. Mitä enemmän järjestelmään lisätään suorittimia, sitä pienempi kaistanleveys solmua kohti on käytettävissä. Lisäksi mitä enemmän suorittimia lisätään, sitä pidempi väylä ja sitä suurempi viive.

Useimmat suorittimet rakennettiin kaksiulotteiseen tasoon. Suorittimiin oli myös lisättävä integroituja muistiohjaimia. Yksinkertainen ratkaisu, jossa on neljä muistiväylää (ylhäältä, alhaalta, vasemmalta, oikealta) kullekin CPU -ytimelle, mahdollisti täyden käytettävissä olevan kaistanleveyden, mutta tämä on vain toistaiseksi. Suorittimet pysähtyivät neljällä ytimellä pitkään. Jälkien lisääminen ylä- ja alapuolelle mahdollisti suorat bussit poikittain vastakkain oleville suorittimille, kun siruista tuli 3D. Neljän ytimen suorittimen asettaminen kortille, joka sitten liitettiin väylään, oli seuraava looginen askel.

Nykyään jokainen prosessori sisältää monia ytimiä, joissa on jaettu sirun välimuisti ja sirun ulkopuolinen muisti, ja sillä on vaihtelevat muistin käyttökustannukset palvelimen muistin eri osissa.

Tietojen käytön tehostaminen on yksi nykyaikaisen CPU -suunnittelun päätavoitteista. Jokaisella suorittimen ytimellä oli pieni yhden tason välimuisti (32 kt) ja suurempi (256 kt) tason 2 välimuisti. Eri ytimet jakavat myöhemmin usean megatavun tason 3 välimuistin, jonka koko on kasvanut huomattavasti ajan myötä.

Välttääksesi välimuistin virheet - pyytämällä tietoja, joita ei ole välimuistissa - paljon tutkimusaikaa käytetään oikean määrän CPU -välimuistien, välimuistin rakenteiden ja vastaavien algoritmien löytämiseen. Katso [8] tarkemmat selitykset välimuistin snoop -protokollasta [4] ja välimuistin koherenssista [3,5] sekä NUMA -suunnittelun ideoista.

Ohjelmistotuki NUMA: lle

On olemassa kaksi ohjelmiston optimointitoimenpidettä, jotka voivat parantaa NUMA -arkkitehtuuria tukevan järjestelmän suorituskykyä - prosessorin affiniteetti ja tietojen sijoittelu. Kuten kohdassa [19] selitetään, prosessorin affiniteetti […] mahdollistaa prosessin tai säikeen sitomisen ja purkamisen yhdelle suorittimelle tai prosessorialueelle siten, että prosessi tai säie suoritetaan vain nimetyllä suorittimella tai suorittimilla eikä mikä tahansa suoritin. Termi tietojen sijoittelu viittaa ohjelmistomuutoksiin, joissa koodi ja tiedot pidetään mahdollisimman lähellä muistissa.

Eri UNIX- ja UNIX-käyttöjärjestelmät tukevat NUMA-järjestelmää seuraavilla tavoilla (alla oleva luettelo on otettu osoitteesta [14]):

  • Silicon Graphics IRIX -tuki ccNUMA -arkkitehtuurille yli 1240 suorittimelle Origin -palvelinsarjan kanssa.
  • Microsoft Windows 7 ja Windows Server 2008 R2 lisäsivät tuen NUMA -arkkitehtuurille 64 loogisen ytimen yli.
  • Linux -ytimen versio 2.5 sisälsi jo NUMA -perustuen, jota parannettiin edelleen myöhemmissä ytimen julkaisuissa. Linux -ytimen versio 3.8 toi uuden NUMA -perustan, joka mahdollisti tehokkaampien NUMA -käytäntöjen kehittämisen myöhemmissä ytimen julkaisuissa [13]. Linux -ytimen versio 3.13 toi lukuisia käytäntöjä, joiden tarkoituksena on saattaa prosessi lähelle sen muistia ja käsitellä tapauksia, kuten muistisivujen jakaminen prosessien välillä tai läpinäkyvien valtavien sivujen käyttö; uudet järjestelmän ohjausasetukset mahdollistavat NUMA -tasapainottamisen ottamisen käyttöön tai poistamisen käytöstä sekä erilaisten NUMA -muistitasapainotusparametrien konfiguroinnin [15].
  • Sekä Oracle että OpenSolaris mallintavat NUMA -arkkitehtuuria loogisten ryhmien käyttöönotolla.
  • FreeBSD lisäsi alkuperäisen NUMA -affiniteetin ja käytäntömäärityksen versioon 11.0.

Kirjassa Computer Science and Technology, Proceedings of the International Conference (CST2016) Ning Cai ehdottaa, että NUMA-arkkitehtuurin tutkimus keskittyi pääasiassa huippuluokan tietokoneympäristöön ja ehdotti NUMA-tietoista Radix-osiota (NaRP), joka optimoi suorituskyvyn jaetuista välimuisteista NUMA -solmuissa liiketoimintatiedonsiirtosovellusten nopeuttamiseksi. Sellaisenaan NUMA edustaa keskitietä jaetun muistin (SMP) järjestelmien välillä, joissa on muutama prosessori [6].

NUMA ja Linux

Kuten edellä todettiin, Linux -ydin on tukenut NUMA: ta versiosta 2.5 lähtien. Sekä Debian GNU/Linux että Ubuntu tarjoavat NUMA -tuen prosessien optimointiin kahden ohjelmistopaketin numactl [16] ja numad [17] avulla. Numactl -komennon avulla voit luetella järjestelmässäsi käytettävissä olevien NUMA -solmujen luettelon [18]:

# numactl -laitteisto
saatavilla:2solmut(0-1)
solmu0cpus:0 1 2 3 4 5 6 7 16 17 18 19 kaksikymmentä kaksikymmentäyksi 22 2. 3
solmu0koko:8157MB
solmu0vapaa:88MB
solmu1cpus:8 9 10 yksitoista 12 13 14 viisitoista 24 25 26 27 28 29 30 31
solmu1koko:8191MB
solmu1vapaa:5176MB
solmujen etäisyydet:
solmu0 1
0:10 kaksikymmentä
1:kaksikymmentä 10

NumaTop on Intelin kehittämä hyödyllinen työkalu ajonaikaisen muistin sijainnin seurantaan ja prosessien analysointiin NUMA -järjestelmissä [10,11]. Työkalu voi tunnistaa mahdolliset NUMA-suorituskyvyn pullonkaulat ja auttaa siten tasapainottamaan muistin/suorittimen varaukset maksimoimaan NUMA-järjestelmän mahdollisuudet. Katso [9] tarkempi kuvaus.

Käyttöskenaariot

Tietokoneet, jotka tukevat NUMA -tekniikkaa, mahdollistavat kaikkien suorittimien pääsyn suoraan koko muistiin - suorittimet näkevät tämän yhtenä, lineaarisena osoitetilana. Tämä johtaa 64-bittisen osoitemallin tehokkaampaan käyttöön, mikä nopeuttaa tietojen liikettä, vähentää tietojen kopiointia ja helpottaa ohjelmointia.

NUMA-järjestelmät ovat varsin houkuttelevia palvelinpuolen sovelluksiin, kuten tiedon louhintaan ja päätöksenteon tukijärjestelmiin. Lisäksi pelisovellusten ja suorituskykyisten ohjelmistojen kirjoittaminen on paljon helpompaa tämän arkkitehtuurin ansiosta.

Johtopäätös

Yhteenvetona voidaan todeta, että NUMA -arkkitehtuuri käsittelee skaalautuvuutta, mikä on yksi sen tärkeimmistä eduista. NUMA -suorittimessa yhdellä solmulla on suurempi kaistanleveys tai pienempi viive päästä muistiin samassa solmussa (esim. Paikallinen suoritin pyytää muistin käyttöoikeutta samaan aikaan kuin etäkäyttö; prioriteetti on paikallisella suorittimella). Tämä parantaa dramaattisesti muistin suorituskykyä, jos tiedot lokalisoidaan tietyille prosesseille (ja siten prosessoreille). Haittoja ovat korkeammat kustannukset tietojen siirtämisestä prosessorista toiseen. Niin kauan kuin tämä tapaus ei tapahdu liian usein, NUMA -järjestelmä ylittää perinteisemmän arkkitehtuurin järjestelmät.

Linkit ja viitteet

  1. Vertaa NVIDIA Tesla vs.Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Vertaa NVIDIA DGX-1 vs.Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Välimuistin johdonmukaisuus, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Bussin nuuskiminen, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Välimuistin koherenssiprotokollat ​​moniprosessorijärjestelmissä, Geeks for geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Tietotekniikka ja tekniikka - kansainvälisen konferenssin (CST2016) artikkelit, Ning Cai (toim.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet ja Marco Cesati: Understanding NUMA architecture in Understanding the Linux Kernel, 3rd edition, O’Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive Part 1: From UMA to NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: NUMA -järjestelmän valvontatyökalu, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Paketti numatop Debian GNU / Linuxille, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Understanding Non-Uniform Memory Access/Architecture (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Linux -ytimen uutiset ytimelle 3.8, https://kernelnewbies.org/Linux_3.8
  14. Epätasainen muistin käyttö (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Linux Memory Management Documentation, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Paketti numactl Debian GNU/Linuxille, https://packages.debian.org/sid/admin/numactl
  17. Paketin numero Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Kuinka selvittää, onko NUMA -määritys käytössä tai pois käytöstä ?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Suorittimen affiniteetti, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Kiitos

Kirjoittajat haluavat kiittää Gerold Rupprechtia hänen tuestaan ​​tämän artikkelin valmistelussa.

Tietoja tekijöistä

Plaxedes Nehanda on monipuolinen, itseohjautuva ja monipuolinen henkilö, joka käyttää monia hattuja, muun muassa tapahtumien suunnittelijaa, virtuaalista avustajaa, transkriptoijaa ja innokasta tutkijaa Johannesburgissa, Etelä-Afrikassa.

Prinssi K. Nehanda on Instrumentation and Control (Metrology) -insinööri Paeflow Meteringissa Hararessa, Zimbabwessa.

Frank Hofmann työskentelee tiellä-mieluiten Berliinistä (Saksa), Genevestä (Sveitsi) ja Kapkaupungista (Etelä-Afrikka)-kehittäjänä, kouluttajana ja kirjoittajana aikakauslehdille, kuten Linux-User ja Linux Magazine. Hän on myös Debian-paketinhallintakirjan ( http://www.dpmb.org ).