NUMA

NUMA-architectuur begrijpen

NUMA-architectuur begrijpen
Het ontwerpen van computers is altijd een compromis. De vier basiscomponenten van een computer - de centrale verwerkingseenheid (CPU) of processor, het geheugen, de opslag en het bord voor het aansluiten van de componenten (I/O-bussysteem) - worden zo slim mogelijk gecombineerd om een ​​machine te creëren die is zowel kosteneffectief als krachtig. Het ontwerpproces omvat meestal een optimalisatie naar processors (co-processors, multi-core setup), geheugentype en -hoeveelheid, opslag (schijven, bestandssysteem), evenals prijs.Het idee achter co-processors en multi-core architectuur is om bewerkingen te distribueren naar zoveel afzonderlijke rekeneenheden in de kleinst mogelijke ruimte en om parallelle uitvoering van rekeninstructies meer beschikbaar en betaalbaar te maken. In termen van geheugen is het een kwestie van de hoeveelheid of grootte die kan worden aangesproken door de individuele rekeneenheid, en welk geheugentype werkt met de laagst mogelijke latentie. Opslag behoort tot het externe geheugen en de prestaties zijn afhankelijk van het schijftype, het bestandssysteem dat in gebruik is, threading, overdrachtsprotocol, communicatiestructuur en het aantal aangesloten geheugenapparaten.

Het ontwerp van I/O-bussen vertegenwoordigt de computerslagaders en bepaalt in belangrijke mate hoeveel en hoe snel gegevens kunnen worden uitgewisseld tussen de hierboven genoemde afzonderlijke componenten. De topcategorie wordt geleid door componenten die worden gebruikt op het gebied van High Performance Computing (HPC). Vanaf medio 2020 zijn onder de hedendaagse vertegenwoordigers van HPC Nvidia Tesla en DGX, Radeon Instinct en Intel Xeon Phi GPU-gebaseerde acceleratorproducten (zie [1,2] voor productvergelijkingen).

NUMA . begrijpen

Non-Uniform Memory Access (NUMA) beschrijft een gedeelde geheugenarchitectuur die wordt gebruikt in hedendaagse multiprocessing-systemen. NUMA is een computersysteem dat is samengesteld uit verschillende afzonderlijke knooppunten op een zodanige manier dat het totale geheugen wordt gedeeld tussen alle knooppunten: "elke CPU krijgt zijn eigen lokale geheugen toegewezen en heeft toegang tot geheugen van andere CPU's in het systeem" [12,7].

NUMA is een slim systeem dat wordt gebruikt om meerdere centrale verwerkingseenheden (CPU's) aan te sluiten op elke hoeveelheid computergeheugen die op de computer beschikbaar is. De enkele NUMA-knooppunten zijn verbonden via een schaalbaar netwerk (I/O-bus) zodat een CPU systematisch toegang kan krijgen tot geheugen dat is gekoppeld aan andere NUMA-knooppunten.

Lokaal geheugen is het geheugen dat de CPU gebruikt in een bepaald NUMA-knooppunt. Vreemd of extern geheugen is het geheugen dat een CPU van een ander NUMA-knooppunt haalt. De term NUMA-ratio beschrijft de verhouding tussen de kosten van toegang tot vreemd geheugen en de kosten van toegang tot lokaal geheugen. Hoe groter de verhouding, hoe hoger de kosten, en dus hoe langer het duurt om toegang te krijgen tot het geheugen.

Het duurt echter langer dan wanneer die CPU zijn eigen lokale geheugen gebruikt. Lokale geheugentoegang is een groot voordeel, omdat het een lage latentie combineert met een hoge bandbreedte. Daarentegen heeft toegang tot geheugen van een andere CPU een hogere latentie en lagere bandbreedteprestaties.

Terugkijkend: evolutie van multiprocessors met gedeeld geheugen

Frank Dennemann [8] stelt dat moderne systeemarchitecturen geen echte Uniform Memory Access (UMA) toelaten, ook al zijn deze systemen specifiek voor dat doel ontworpen. Simpel gezegd, het idee van parallel computing was om een ​​groep processors te hebben die samenwerken om een ​​bepaalde taak te berekenen, waardoor een anders klassieke sequentiële berekening wordt versneld.

Zoals uitgelegd door Frank Dennemann [8], werd in het begin van de jaren zeventig "de behoefte aan systemen die meerdere gelijktijdige gebruikersbewerkingen en overmatige gegevensgeneratie konden ondersteunen", met de introductie van relationele databasesystemen. “Ondanks de indrukwekkende snelheid van uniprocessor-prestaties, waren multiprocessorsystemen beter uitgerust om deze werklast aan te kunnen. Om een ​​kosteneffectief systeem te bieden, werd de adresruimte in het gedeelde geheugen de focus van onderzoek. In het begin werd gepleit voor systemen die een crossbar-switch gebruikten, maar met deze ontwerpcomplexiteit schaalde de toename van processors mee, wat het busgebaseerde systeem aantrekkelijker maakte. Processoren in een bussysteem [kunnen] toegang krijgen tot de volledige geheugenruimte door verzoeken op de bus te verzenden, een zeer kosteneffectieve manier om het beschikbare geheugen zo optimaal mogelijk te gebruiken.”

Busgebaseerde computersystemen hebben echter een knelpunt: de beperkte hoeveelheid bandbreedte die leidt tot schaalbaarheidsproblemen. Hoe meer CPU's aan het systeem worden toegevoegd, hoe minder bandbreedte per node beschikbaar is. Bovendien, hoe meer CPU's er worden toegevoegd, hoe langer de bus en hoe hoger de latentie als resultaat.

De meeste CPU's zijn geconstrueerd in een tweedimensionaal vlak. Aan CPU's moesten ook geïntegreerde geheugencontrollers worden toegevoegd. De eenvoudige oplossing om vier geheugenbussen (boven, onder, links, rechts) naar elke CPU-kern te hebben, maakte de volledige beschikbare bandbreedte mogelijk, maar dat gaat alleen zo ver. CPU's stagneerden geruime tijd met vier cores. Door sporen boven en onder toe te voegen, konden directe bussen naar de diagonaal tegenover elkaar liggende CPU's worden geleid toen chips 3D werden. Een vieraderige CPU op een kaart plaatsen, die vervolgens op een bus werd aangesloten, was de volgende logische stap.

Tegenwoordig bevat elke processor veel kernen met een gedeelde on-chip cache en een off-chip geheugen en heeft hij variabele geheugentoegangskosten over verschillende delen van het geheugen binnen een server.

Het verbeteren van de efficiëntie van gegevenstoegang is een van de belangrijkste doelen van het hedendaagse CPU-ontwerp. Elke CPU-kern was voorzien van een kleine niveau één cache (32 KB) en een grotere (256 KB) niveau 2 cache. De verschillende kernen zouden later een niveau 3-cache van enkele MB delen, waarvan de omvang in de loop van de tijd aanzienlijk is gegroeid.

Om cache missers - het opvragen van gegevens die niet in de cache zitten - te voorkomen wordt er veel onderzoekstijd besteed aan het vinden van het juiste aantal CPU-caches, caching-structuren en bijbehorende algoritmen. Zie [8] voor een meer gedetailleerde uitleg van het protocol voor caching snoop [4] en cachecoherentie [3,5], evenals de ontwerpideeën achter NUMA.

Software-ondersteuning voor NUMA

Er zijn twee software-optimalisatiemaatregelen die de prestaties kunnen verbeteren van een systeem dat NUMA-architectuur ondersteunt: processoraffiniteit en gegevensplaatsing. Zoals uitgelegd in [19], maakt "processoraffiniteit [... ] het mogelijk om een ​​proces of een thread aan een enkele CPU of een reeks CPU's te binden en te ontbinden, zodat het proces of de thread alleen op de aangewezen CPU of CPU's wordt uitgevoerd. dan welke CPU dan ook.De term 'dataplaatsing' verwijst naar softwareaanpassingen waarbij code en gegevens zo dicht mogelijk in het geheugen worden bewaard.

De verschillende UNIX- en UNIX-gerelateerde besturingssystemen ondersteunen NUMA op de volgende manieren (de onderstaande lijst is overgenomen uit [14]):

In het boek "Computer Science and Technology, Proceedings of the International Conference (CST2016)" suggereert Ning Cai dat de studie van NUMA-architectuur voornamelijk was gericht op de high-end computeromgeving en stelde hij NUMA-aware Radix Partitioning (NaRP) voor, die optimaliseert de prestaties van gedeelde caches in NUMA-knooppunten om business intelligence-toepassingen te versnellen. Als zodanig vertegenwoordigt NUMA een middenweg tussen systemen met gedeeld geheugen (SMP) met een paar processors [6].

NUMA en Linux

Zoals hierboven vermeld, ondersteunt de Linux-kernel NUMA sinds versie 2.5. Zowel Debian GNU/Linux als Ubuntu bieden NUMA-ondersteuning voor procesoptimalisatie met de twee softwarepakketten numactl [16] en numad [17]. Met behulp van het numactl-commando kunt u de inventaris van beschikbare NUMA-knooppunten in uw systeem weergeven [18]:

# numactl --hardware
beschikbaar: 2 knooppunten (0-1)
knooppunt 0 CPU: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
knooppunt 0 grootte: 8157 MB
node 0 gratis: 88 MB
knooppunt 1 processor: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
knooppunt 1 grootte: 8191 MB
knooppunt 1 gratis: 5176 MB
knoop afstanden:
knoop 0 1
0: 10 20
1: 20 10

NumaTop is een handig hulpmiddel ontwikkeld door Intel voor het bewaken van de locatie van het runtime-geheugen en het analyseren van processen in NUMA-systemen [10,11]. De tool kan potentiële NUMA-gerelateerde prestatieknelpunten identificeren en zo helpen om de geheugen-/CPU-toewijzingen opnieuw in evenwicht te brengen om het potentieel van een NUMA-systeem te maximaliseren. Zie [9] voor een meer gedetailleerde beschrijving.

Gebruiksscenario's

Met computers die NUMA-technologie ondersteunen, hebben alle CPU's rechtstreeks toegang tot het volledige geheugen - de CPU's zien dit als een enkele, lineaire adresruimte. Dit leidt tot een efficiënter gebruik van het 64-bits adresseringsschema, wat resulteert in een snellere verplaatsing van gegevens, minder replicatie van gegevens en eenvoudiger programmeren.

NUMA-systemen zijn behoorlijk aantrekkelijk voor server-side toepassingen, zoals datamining en beslissingsondersteunende systemen. Bovendien wordt het schrijven van applicaties voor gaming en krachtige software veel gemakkelijker met deze architectuur.

Conclusie

Concluderend, NUMA-architectuur richt zich op schaalbaarheid, wat een van de belangrijkste voordelen is. In een NUMA-CPU heeft één knooppunt een hogere bandbreedte of lagere latentie om toegang te krijgen tot het geheugen op datzelfde knooppunt (bijv.g., de lokale CPU vraagt ​​om toegang tot het geheugen op hetzelfde moment als de toegang op afstand; de prioriteit ligt bij de lokale CPU). Dit zal de geheugendoorvoer drastisch verbeteren als de gegevens worden gelokaliseerd op specifieke processen (en dus processors). De nadelen zijn de hogere kosten om gegevens van de ene processor naar de andere te verplaatsen. Zolang dit geval niet te vaak voorkomt, zal een NUMA-systeem beter presteren dan systemen met een meer traditionele architectuur.

Links en referenties

  1. Vergelijk NVIDIA Tesla met. Radeon-instinct, https://www.itcentralstation.com/producten/vergelijkingen/nvidia-tesla_vs_radeon-instinct
  2. Vergelijk NVIDIA DGX-1 met. Radeon-instinct, https://www.itcentralstation.com/producten/vergelijkingen/nvidia-dgx-1_vs_radeon-instinct
  3. Cachecoherentie, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Bussnuffelen, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Cachecoherentieprotocollen in multiprocessorsystemen, Geeks voor geeks, https://www.geeksforgeeks.org/cache-coherentie-protocollen-in-multiprocessor-systeem/
  6. Informatica en technologie - Proceedings of the International Conference (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet en Marco Cesati: NUMA-architectuur begrijpen in de Linux-kernel begrijpen, 3e editie, O'Reilly, https://www.oreilly.com/bibliotheek/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive deel 1: Van UMA naar NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: een NUMA-systeembewakingstool, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-systeem-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Pakket numatop voor Debian GNU/Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Inzicht in niet-uniforme geheugentoegang/architecturen (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Linux Kernel Nieuws voor Kernel 3.8, https://kernelnewbies.org/Linux_3.8
  14. Niet-uniforme geheugentoegang (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Documentatie voor Linux-geheugenbeheer, NUMA, https://www.kern.org/doc/html/laatste/vm/numa.html
  16. Pakket numactl voor Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
  17. Pakket numad voor Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Hoe te vinden of de NUMA-configuratie is ingeschakeld of uitgeschakeld??, https://www.het geekdagboek.com/centos-rhel-hoe-vinden-als-numa-configuratie-is-in-of-uitgeschakeld/
  19. Processor affiniteit, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Dank u

De auteurs willen Gerold Rupprecht bedanken voor zijn steun bij het opstellen van dit artikel.

Over de Auteurs

Plaxedes Nehanda is een veelzijdige, zelfgestuurde veelzijdige persoon die veel hoeden draagt, waaronder een evenementenplanner, een virtuele assistent, een transcribent en een fervent onderzoeker, gevestigd in Johannesburg, Zuid-Afrika.

Prins K. Nehanda is een ingenieur instrumentatie en controle (metrologie) bij Paeflow Metering in Harare, Zimbabwe.

Frank Hofmann werkt onderweg - bij voorkeur vanuit Berlijn (Duitsland), Genève (Zwitserland) en Kaapstad (Zuid-Afrika) - als ontwikkelaar, trainer en auteur voor tijdschriften als Linux-User en Linux Magazine. Hij is ook de co-auteur van het Debian-boek voor pakketbeheer (http://www.dpmb.organisatie).

Hoe u uw gamesessie op Linux kunt vastleggen en streamen
In het verleden werd het spelen van games alleen als een hobby beschouwd, maar met de tijd zag de game-industrie een enorme groei in termen van techno...
Beste spellen om te spelen met handtracking
Oculus Quest introduceerde onlangs het geweldige idee van handtracking zonder controllers. Met een steeds toenemend aantal games en activiteiten die f...
OSD-overlay tonen in Linux-apps en -games op volledig scherm
Het spelen van games op volledig scherm of het gebruik van apps in de modus volledig scherm zonder afleiding kan u afsnijden van relevante systeeminfo...