Forståelse af NUMA Arkitektur

Understanding Numa Architecture



Design af computere er altid et kompromis. De fire grundlæggende komponenter i en computer - den centrale behandlingsenhed (CPU) eller processor, hukommelsen, lageret og kortet til tilslutning af komponenterne (I/O -bussystem) - kombineres så smart som muligt for at oprette en maskine, der er både omkostningseffektiv og kraftfuld. Designprocessen involverer for det meste en optimering mod processorer (co-processorer, multi-core setup), hukommelsestype og -mængde, lagring (diske, filsystem) samt pris. Ideen bag co-processorer og multi-core arkitektur er at distribuere operationer til så mange enkelt computerenheder i det mindste mulige rum og at gøre parallel udførelse af computerinstruktioner mere tilgængelig og overkommelig. Med hensyn til hukommelse er det et spørgsmål om mængden eller størrelsen, der kan adresseres af den enkelte computerenhed, og hvilken hukommelsestype, der fungerer med den lavest mulige latenstid. Lagring tilhører den eksterne hukommelse, og dens ydeevne afhænger af disktypen, filsystemet, der er i brug, trådning, overførselsprotokol, kommunikationsstof og antallet af tilsluttede hukommelsesenheder.

Designet af I/O -busser repræsenterer computerarterierne og afgør betydeligt, hvor meget og hvor hurtigt data kan udveksles mellem de enkelte komponenter, der er anført ovenfor. Den øverste kategori ledes af komponenter, der bruges inden for High Performance Computing (HPC). Fra midten af ​​2020 er blandt de nutidige repræsentanter for HPC Nvidia Tesla og DGX, Radeon Instinct og Intel Xeon Phi GPU-baserede acceleratorprodukter (se [1,2] for produktsammenligninger).







Forståelse NUMA

Non-Uniform Memory Access (NUMA) beskriver en delt hukommelsesarkitektur, der bruges i moderne multiprocessingssystemer. NUMA er et computersystem, der består af flere enkelte noder på en sådan måde, at den samlede hukommelse deles mellem alle noder: hver CPU tildeles sin egen lokale hukommelse og kan få adgang til hukommelse fra andre CPU'er i systemet [12,7].



NUMA er et smart system, der bruges til at forbinde flere centrale processorenheder (CPU) til en hvilken som helst computerhukommelse, der er tilgængelig på computeren. De enkelte NUMA -noder er forbundet over et skalerbart netværk (I/O -bus), således at en CPU systematisk kan få adgang til hukommelse, der er forbundet med andre NUMA -noder.



Lokal hukommelse er den hukommelse, som CPU'en bruger i en bestemt NUMA -knude. Udenlandsk eller fjernhukommelse er den hukommelse, som en CPU tager fra en anden NUMA -knude. Udtrykket NUMA -forhold beskriver forholdet mellem omkostningerne ved adgang til fremmed hukommelse og omkostningerne ved at få adgang til lokal hukommelse. Jo større forholdet er, desto større er omkostningerne, og dermed længere tid tager det at få adgang til hukommelsen.





Det tager dog længere tid, end når den CPU får adgang til sin egen lokale hukommelse. Lokal hukommelsesadgang er en stor fordel, da den kombinerer lav latens med høj båndbredde. I modsætning hertil har adgang til hukommelse, der tilhører enhver anden CPU, højere latens og lavere båndbreddeydelse.

Ser tilbage: Udvikling af multiprocessorer med delt hukommelse

Frank Dennemann [8] udtaler, at moderne systemarkitekturer ikke tillader virkelig Uniform Memory Access (UMA), selvom disse systemer er specielt designet til det formål. Simpelthen var tanken om parallel computing at have en gruppe processorer, der samarbejder om at beregne en given opgave og derved fremskynde en ellers klassisk sekventiel beregning.



Som forklaret af Frank Dennemann [8] i begyndelsen af ​​1970'erne blev behovet for systemer, der kunne betjene flere samtidige brugeroperationer og overdreven datagenerering, mainstream med introduktionen af ​​relationelle databasesystemer. På trods af den imponerende hastighed af uniprocessors ydeevne var multiprocessorsystemer bedre rustet til at håndtere denne arbejdsbyrde. For at levere et omkostningseffektivt system blev delt hukommelsesadresserum fokus for forskning. Tidligt blev der anbefalet systemer, der brugte en tværstangskontakt, men med dette design kompleksitet skaleret sammen med stigningen i processorer, hvilket gjorde det busbaserede system mere attraktivt. Processorer i et bussystem [kan] få adgang til hele hukommelsesrummet ved at sende anmodninger på bussen, en meget omkostningseffektiv måde at bruge den tilgængelige hukommelse så optimalt som muligt.

Busbaserede computersystemer har imidlertid en flaskehals-den begrænsede mængde båndbredde, der fører til skalerbarhedsproblemer. Jo flere CPU'er der tilføjes til systemet, jo mindre båndbredde pr. Node er tilgængelig. Desuden, jo flere CPU'er der tilføjes, jo længere bussen og jo højere latens som følge heraf.

De fleste CPU'er blev konstrueret i et todimensionalt plan. CPU'er skulle også have tilføjet integrerede hukommelsescontrollere. Den enkle løsning med fire hukommelsesbusser (top, bund, venstre, højre) til hver CPU -kerne tillod fuld tilgængelig båndbredde, men det går kun så langt. CPU'er stagnerede med fire kerner i betragtelig tid. Tilføjelse af spor over og under tillod direkte busser på tværs til de diagonalt modstående CPU'er, da chips blev til 3D. Placering af en firekernet CPU på et kort, som derefter sluttede til en bus, var det næste logiske trin.

I dag indeholder hver processor mange kerner med en delt on-chip-cache og en off-chip-hukommelse og har variable omkostninger til hukommelsesadgang på tværs af forskellige dele af hukommelsen inden for en server.

Forbedring af effektiviteten af ​​dataadgang er et af hovedmålene med nutidig CPU -design. Hver CPU -kerne var udstyret med en lille cache på niveau 1 (32 KB) og en større (256 KB) niveau 2 -cache. De forskellige kerner ville senere dele et niveau 3 -cache på flere MB, hvis størrelse er vokset betydeligt over tid.

For at undgå cachemishandlinger - anmode om data, der ikke er i cachen - bruges meget forskningstid på at finde det rigtige antal CPU -caches, cachestrukturer og tilsvarende algoritmer. Se [8] for en mere detaljeret forklaring af protokollen til cache -snoop [4] og cachekoherens [3,5], samt designideerne bag NUMA.

Softwaresupport til NUMA

Der er to softwareoptimeringsforanstaltninger, der kan forbedre ydeevnen for et system, der understøtter NUMA -arkitektur - processoraffinitet og dataplacering. Som forklaret i [19] muliggør processoraffinitet […] binding og afbinding af en proces eller en tråd til en enkelt CPU eller et område af CPU'er, så processen eller tråden kun udføres på den eller de udpegede CPU'er i stedet for enhver CPU. Udtrykket dataplacering refererer til softwareændringer, hvor kode og data opbevares så tæt som muligt i hukommelsen.

De forskellige UNIX- og UNIX-relaterede operativsystemer understøtter NUMA på følgende måder (listen herunder er hentet fra [14]):

  • Silicon Graphics IRIX -understøttelse til ccNUMA -arkitektur over 1240 CPU med Origin -serverserier.
  • Microsoft Windows 7 og Windows Server 2008 R2 tilføjede understøttelse af NUMA -arkitektur over 64 logiske kerner.
  • Version 2.5 af Linux -kernen indeholdt allerede grundlæggende NUMA -understøttelse, som blev yderligere forbedret i efterfølgende kerneludgivelser. Version 3.8 af Linux -kernen bragte et nyt NUMA -fundament, der muliggjorde udvikling af mere effektive NUMA -politikker i senere kerneludgivelser [13]. Version 3.13 af Linux -kernen bragte adskillige politikker, der sigter mod at sætte en proces tæt på hukommelsen, sammen med håndteringen af ​​sager, såsom at have hukommelsessider delt mellem processer eller brug af gennemsigtige enorme sider; nye systemkontrolindstillinger gør det muligt at aktivere eller deaktivere NUMA -balancering samt konfiguration af forskellige NUMA -hukommelsesbalanceringsparametre [15].
  • Både Oracle og OpenSolaris model NUMA -arkitektur med introduktion af logiske grupper.
  • FreeBSD tilføjede Initial NUMA -affinitet og politikonfiguration i version 11.0.

I bogen Computer Science and Technology, Proceedings of the International Conference (CST2016) foreslår Ning Cai, at undersøgelsen af ​​NUMA-arkitektur hovedsageligt var fokuseret på high-end computermiljøet og foreslået NUMA-bevidst Radix Partitioning (NaRP), som optimerer ydelsen af delte caches i NUMA -noder for at fremskynde business intelligence -applikationer. Som sådan repræsenterer NUMA en mellemvej mellem systemer med delt hukommelse (SMP) med et par processorer [6].

NUMA og Linux

Som anført ovenfor har Linux -kernen understøttet NUMA siden version 2.5. Både Debian GNU/Linux og Ubuntu tilbyder NUMA -understøttelse til procesoptimering med de to softwarepakker numactl [16] og numad [17]. Ved hjælp af kommandoen numactl kan du liste opgørelsen over tilgængelige NUMA -noder i dit system [18]:

# numactl --hardware
ledig:2knudepunkter(0-1)
knudepunkt0cpus:0 1 2 3 4 5 6 7 16 17 18 19 tyve enogtyve 22 2. 3
knudepunkt0størrelse:8157MB
knudepunkt0gratis:88MB
knudepunkt1cpus:8 9 10 elleve 12 13 14 femten 24 25 26 27 28 29 30 31
knudepunkt1størrelse:8191MB
knudepunkt1gratis:5176MB
knudepunkter:
knudepunkt0 1
0:10 tyve
1:tyve 10

NumaTop er et nyttigt værktøj udviklet af Intel til overvågning af lokalitet for runtime -hukommelse og analyse af processer i NUMA -systemer [10,11]. Værktøjet kan identificere potentielle NUMA-relaterede ydelsesflaskehalse og dermed hjælpe med at genbalancere hukommelse/CPU-allokeringer for at maksimere potentialet i et NUMA-system. Se [9] for en mere detaljeret beskrivelse.

Brugsscenarier

Computere, der understøtter NUMA -teknologi, giver alle CPU'er direkte adgang til hele hukommelsen - CPU'erne ser dette som et enkelt, lineært adresserum. Dette fører til mere effektiv brug af 64-bit adresseringsskemaet, hvilket resulterer i hurtigere flytning af data, mindre replikation af data og lettere programmering.

NUMA-systemer er ret attraktive for server-side applikationer, såsom data mining og beslutningsstøttesystemer. Desuden bliver det meget lettere at skrive applikationer til spil og højtydende software med denne arkitektur.

Konklusion

Afslutningsvis adresserer NUMA -arkitektur skalerbarhed, hvilket er en af ​​dens største fordele. I en NUMA CPU vil en node have en højere båndbredde eller lavere latenstid for at få adgang til hukommelsen på den samme knude (f.eks. Anmoder den lokale CPU om hukommelsesadgang på samme tid som fjernadgangen; prioriteten er på den lokale CPU). Dette vil dramatisk forbedre hukommelsesgennemstrømningen, hvis dataene er lokaliseret til bestemte processer (og dermed processorer). Ulemperne er de højere omkostninger ved at flytte data fra en processor til en anden. Så længe denne sag ikke sker for ofte, vil et NUMA -system overgå systemer med en mere traditionel arkitektur.

Links og referencer

  1. Sammenlign NVIDIA Tesla vs.Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Sammenlign NVIDIA DGX-1 vs.Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Cachesammenhæng, Wikipedia, https://da.wikipedia.org/wiki/Cache_coherence
  4. Bus snooping, Wikipedia, https://da.wikipedia.org/wiki/Bus_snooping
  5. Cache -kohærensprotokoller i multiprocessorsystemer, Nørder til nørder, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Datalogi og teknologi - Proceedings of the International Conference (CST2016), Ning Cai (red.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet og 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 Del 1: Fra UMA til NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: Et NUMA systemovervågningsværktøj, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Pakke numatop til Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Forståelse af ikke-ensartet hukommelsesadgang/arkitekturer (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Linux Kernel News for Kernel 3.8, https://kernelnewbies.org/Linux_3.8
  14. Ikke-ensartet hukommelsesadgang (NUMA), Wikipedia, https://da.wikipedia.org/wiki/Non-uniform_memory_access
  15. Linux Memory Management Documentation, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Pakke numactl til Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
  17. Pakke nummer til Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Hvordan finder jeg ud af, om NUMA -konfiguration er aktiveret eller deaktiveret ?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Processoraffinitet, Wikipedia, https://da.wikipedia.org/wiki/Processor_affinity

Tak skal du have

Forfatterne vil gerne takke Gerold Rupprecht for hans støtte under udarbejdelsen af ​​denne artikel.

Om forfatterne

Plaxedes Nehanda er en multiskilled, selvkørende alsidig person, der bærer mange hatte, blandt dem en begivenhedsplanlægger, en virtuel assistent, en transskriber samt en ivrig forsker med base i Johannesburg, Sydafrika.

Prince K. Nehanda er en Instrumentation and Control (Metrology) Engineer hos Paeflow Metering i Harare, Zimbabwe.

Frank Hofmann arbejder på vejen-helst fra Berlin (Tyskland), Genève (Schweiz) og Cape Town (Sydafrika)-som udvikler, træner og forfatter til magasiner som Linux-User og Linux Magazine. Han er også medforfatter til Debians pakkehåndteringsbog ( http://www.dpmb.org ).