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]):
- Silicon Graphics IRIX-ondersteuning voor ccNUMA-architectuur via 1240 CPU met Origin-serverserie.
- Microsoft Windows 7 en Windows Server 2008 R2 hebben ondersteuning toegevoegd voor NUMA-architectuur via 64 logische kernen.
- Versie 2.5 van de Linux-kernel bevatte al basis NUMA-ondersteuning, die verder werd verbeterd in volgende kernel-releases. Versie 3.8 van de Linux-kernel bracht een nieuwe NUMA-basis die de ontwikkeling mogelijk maakte van een efficiënter NUMA-beleid in latere kernel-releases [13]. Versie 3.13 van de Linux-kernel bracht tal van beleidsregels met zich mee die erop gericht zijn een proces dichtbij zijn geheugen te plaatsen, samen met het afhandelen van zaken, zoals het delen van geheugenpagina's tussen processen of het gebruik van transparante grote pagina's; nieuwe systeembesturingsinstellingen maken het mogelijk om NUMA-balancering in of uit te schakelen, evenals de configuratie van verschillende NUMA-geheugenbalanceringsparameters [15].
- Zowel Oracle als OpenSolaris modelleren NUMA-architectuur met de introductie van logische groepen.
- FreeBSD heeft initiële NUMA-affiniteit en beleidsconfiguratie toegevoegd in versie 11.0.
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 --hardwarebeschikbaar: 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
- Vergelijk NVIDIA Tesla met. Radeon-instinct, https://www.itcentralstation.com/producten/vergelijkingen/nvidia-tesla_vs_radeon-instinct
- Vergelijk NVIDIA DGX-1 met. Radeon-instinct, https://www.itcentralstation.com/producten/vergelijkingen/nvidia-dgx-1_vs_radeon-instinct
- Cachecoherentie, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
- Bussnuffelen, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
- Cachecoherentieprotocollen in multiprocessorsystemen, Geeks voor geeks, https://www.geeksforgeeks.org/cache-coherentie-protocollen-in-multiprocessor-systeem/
- Informatica en technologie - Proceedings of the International Conference (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
- 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/
- Frank Dennemann: NUMA Deep Dive deel 1: Van UMA naar NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
- Colin Ian King: NumaTop: een NUMA-systeembewakingstool, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-systeem-monitoring-tool.html
- Numatop, https://github.com/intel/numatop
- Pakket numatop voor Debian GNU/Linux, https://packages.debian.org/buster/numatop
- Jonathan Kehayias: Inzicht in niet-uniforme geheugentoegang/architecturen (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
- Linux Kernel Nieuws voor Kernel 3.8, https://kernelnewbies.org/Linux_3.8
- Niet-uniforme geheugentoegang (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
- Documentatie voor Linux-geheugenbeheer, NUMA, https://www.kern.org/doc/html/laatste/vm/numa.html
- Pakket numactl voor Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
- Pakket numad voor Debian GNU/Linux, https://packages.debian.org/buster/numad
- 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/
- 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).