NUMA

Forstå NUMA-arkitektur

Forstå NUMA-arkitektur
Å designe datamaskiner er alltid et kompromiss. De fire grunnleggende komponentene til en datamaskin - den sentrale prosessorenheten (CPU) eller prosessoren, minnet, lagringen og kortet for tilkobling av komponentene (I / O-bussystemet) - kombineres så smart som mulig for å lage en maskin som er både kostnadseffektiv og kraftig. Designprosessen innebærer for det meste en optimalisering mot prosessorer (co-prosessorer, multi-core setup), minnetype og mengde, lagring (disker, filsystem), samt pris.Ideen bak medprosessorer og flerkjernearkitektur er å distribuere operasjoner til så mange enkeltenheter i det minste mulig rom og å gjøre parallell gjennomføring av databehandlingsinstruksjoner mer tilgjengelig og rimelig. Når det gjelder minne, er det et spørsmål om mengden eller størrelsen som kan adresseres av den enkelte databehandlingsenheten, og hvilken minnetype som fungerer med lavest mulig ventetid. Lagring tilhører det eksterne minnet, og ytelsen avhenger av disktypen, filsystemet som er i bruk, threading, overføringsprotokoll, kommunikasjonsmateriale og antall tilkoblede minneenheter.

Utformingen av I / O-busser representerer dataartene og bestemmer betydelig hvor mye og hvor raskt data kan utveksles mellom de enkelte komponentene som er oppført ovenfor. Toppkategorien ledes av komponenter som brukes innen High Performance Computing (HPC). Fra midten av 2020 er blant samtidsrepresentantene for HPC Nvidia Tesla og DGX, Radeon Instinct og Intel Xeon Phi GPU-baserte akseleratorprodukter (se [1,2] for produktsammenligning).

Forstå NUMA

Non-Uniform Memory Access (NUMA) beskriver en delt minnearkitektur som brukes i moderne flerbehandlingssystemer. NUMA er et databehandlingssystem sammensatt av flere enkeltnoder på en slik måte at det samlede minnet deles mellom alle nodene: "hver CPU tildeles sitt eget lokale minne og kan få tilgang til minne fra andre CPUer i systemet" [12,7].

NUMA er et smart system som brukes til å koble flere sentrale prosesseringsenheter (CPU) til en hvilken som helst mengde dataminne som er tilgjengelig på datamaskinen. De enkelte NUMA-nodene er koblet over et skalerbart nettverk (I / O-buss) slik at en CPU systematisk kan få tilgang til minne tilknyttet andre NUMA-noder.

Lokalt minne er minnet som CPUen bruker i en bestemt NUMA-node. Fremmed eller eksternt minne er minnet som en CPU tar fra en annen NUMA-node. Begrepet NUMA-forhold beskriver forholdet mellom kostnadene ved å få tilgang til fremmed minne og kostnadene ved å få tilgang til lokalt minne. Jo større forhold, jo større kostnad, og dermed jo lengre tid det tar å få tilgang til minnet.

Det tar imidlertid lengre tid enn når den CPUen får tilgang til sitt eget lokale minne. Lokal minnetilgang er en stor fordel, siden den kombinerer lav ventetid med høy båndbredde. I kontrast har tilgang til minne som tilhører en hvilken som helst annen CPU høyere latens og lavere båndbreddeytelse.

Ser tilbake: Evolusjon av delte minneprosessorer

Frank Dennemann [8] uttaler at moderne systemarkitekturer ikke tillater virkelig enhetlig minnetilgang (UMA), selv om disse systemene er spesielt designet for det formålet. Enkelt sagt var ideen med parallell databehandling å ha en gruppe prosessorer som samarbeider om å beregne en gitt oppgave, og dermed øke hastigheten på en ellers klassisk sekvensiell beregning.

Som forklart av Frank Dennemann [8], på begynnelsen av 1970-tallet, “ble behovet for systemer som kunne betjene flere samtidige brukeroperasjoner og overdreven generering av data mainstream” med innføringen av relasjonelle databasesystemer. Til tross for den imponerende hastigheten på enprosessorytelse, var flerprosessorsystemer bedre rustet til å håndtere denne arbeidsmengden. For å gi et kostnadseffektivt system ble delt minneadresseplass fokus for forskning. Tidlig ble det anbefalt systemer som bruker en tverrstangsbryter, men med denne designkompleksiteten skalert sammen med økningen av prosessorer, noe som gjorde det bussbaserte systemet mer attraktivt. Prosessorer i et bussystem [kan] få tilgang til hele minneplassen ved å sende forespørsler på bussen, en veldig kostnadseffektiv måte å bruke tilgjengelig minne så optimalt som mulig.”

Imidlertid kommer bussbaserte datasystemer med en flaskehals - den begrensede mengden båndbredde som fører til skalerbarhetsproblemer. Jo flere CPUer som legges til systemet, desto mindre båndbredde per tilgjengelig node. Videre, jo flere CPUer som legges til, jo lenger buss og jo høyere latens som et resultat.

De fleste CPUer ble konstruert i et todimensjonalt plan. CPUer måtte også ha integrerte minnekontroller lagt til. Den enkle løsningen med å ha fire minnebusser (øverst, nederst, venstre, høyre) til hver CPU-kjerne tillot full tilgjengelig båndbredde, men det går bare så langt. CPUer stagnerte med fire kjerner i lang tid. Å legge til spor over og under tillot direkte busser over til de diagonalt motsatte prosessorer da sjetonger ble 3D. Å plassere en firekjernet CPU på et kort, som deretter ble koblet til en buss, var det neste logiske trinnet.

I dag inneholder hver prosessor mange kjerner med en delt cache på chip og et off-chip-minne og har variable minnetilgangskostnader på tvers av forskjellige deler av minnet på en server.

Å forbedre effektiviteten til datatilgang er et av hovedmålene med moderne CPU-design. Hver CPU-kjerne ble utstyrt med en liten nivå en cache (32 KB) og en større (256 KB) nivå 2 cache. De forskjellige kjernene ville senere dele en nivå 3 cache på flere MB, hvis størrelse har vokst betraktelig over tid.

For å unngå feil i hurtigbufferen - be om data som ikke er i hurtigbufferen - brukes mye forskningstid på å finne riktig antall CPU-hurtigbuffere, hurtigbufringstrukturer og tilhørende algoritmer. Se [8] for en mer detaljert forklaring av protokollen for caching snoop [4] og cache coherency [3,5], samt designideene bak NUMA.

Programvarestøtte for NUMA

Det er to programvareoptimaliseringstiltak som kan forbedre ytelsen til et system som støtter NUMA-arkitektur - prosessoraffinitet og dataplassering. Som forklart i [19], “prosessoraffinitet [...] muliggjør binding og binding av en prosess eller en tråd til en enkelt CPU, eller en rekke CPUer slik at prosessen eller tråden bare vil kjøres på den angitte CPU eller CPUer enn noen CPU.”Begrepet“ dataplassering ”refererer til programvareendringer der kode og data holdes så nært som mulig i minnet.

De forskjellige UNIX- og UNIX-relaterte operativsystemene støtter NUMA på følgende måter (listen nedenfor er hentet fra [14]):

I boken “Computer Science and Technology, Proceedings of the International Conference (CST2016)” antyder Ning Cai at studien av NUMA-arkitektur hovedsakelig var fokusert på high-end databehandlingsmiljø og foreslåtte NUMA-bevisste Radix Partitioning (NaRP), som optimaliserer ytelsen til delte cacher i NUMA-noder for å akselerere business intelligence-applikasjoner. Som sådan representerer NUMA en mellomgrunn mellom delt minnesystemer (SMP) med noen få prosessorer [6].

NUMA og Linux

Som nevnt ovenfor har Linux-kjernen støttet NUMA siden versjon 2.5. Både Debian GNU / Linux og Ubuntu tilbyr NUMA-støtte for prosessoptimalisering med de to programvarepakkene numactl [16] og numad [17]. Ved hjelp av numactl-kommandoen kan du liste oversikten over tilgjengelige NUMA-noder i systemet ditt [18]:

# numactl - maskinvare
tilgjengelig: 2 noder (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node 0 størrelse: 8157 MB
node 0 ledig: 88 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node 1 størrelse: 8191 MB
node 1 ledig: 5176 MB
node avstander:
node 0 1
0: 20 20
1: 20 10

NumaTop er et nyttig verktøy utviklet av Intel for å overvåke kjøretidsminnelokalitet og analysere prosesser i NUMA-systemer [10,11]. Verktøyet kan identifisere potensielle NUMA-relaterte ytelsesflaskehalser og dermed bidra til å balansere minne / CPU-allokeringer for å maksimere potensialet til et NUMA-system. Se [9] for en mer detaljert beskrivelse.

Bruksscenarier

Datamaskiner som støtter NUMA-teknologi gir alle CPUer tilgang til hele minnet direkte - CPUene ser dette som et enkelt, lineært adresserom. Dette fører til mer effektiv bruk av 64-biters adresseringsskjema, noe som resulterer i raskere bevegelse av data, mindre replikering av data og enklere programmering.

NUMA-systemer er ganske attraktive for server-side applikasjoner, for eksempel data mining og beslutningsstøttesystemer. Videre blir det lettere å skrive applikasjoner for spill og programvare med høy ytelse med denne arkitekturen.

Konklusjon

Avslutningsvis adresserer NUMA-arkitektur skalerbarhet, som er en av hovedfordelene. I en NUMA-CPU vil en node ha høyere båndbredde eller lavere ventetid for å få tilgang til minnet på den samme noden (e.g., den lokale CPUen ber om minnetilgang samtidig med ekstern tilgang; prioriteten er på den lokale CPUen). Dette vil forbedre minnegjennomstrømningen dramatisk hvis dataene er lokalisert til spesifikke prosesser (og dermed prosessorer). Ulempene er de høyere kostnadene ved å flytte data fra en prosessor til en annen. Så lenge dette tilfellet ikke skjer for ofte, vil et NUMA-system overgå systemer med en mer tradisjonell arkitektur.

Lenker og referanser

  1. Sammenlign NVIDIA Tesla vs. Radeon Instinct, https: // www.itcentralstation.no / produkter / sammenligninger / nvidia-tesla_vs_radeon-instinct
  2. Sammenlign NVIDIA DGX-1 vs. Radeon Instinct, https: // www.itcentralstation.no / produkter / sammenligninger / nvidia-dgx-1_vs_radeon-instinct
  3. Cache-koherens, Wikipedia, https: // no.wikipedia.org / wiki / Cache_coherence
  4. Bussnoking, Wikipedia, https: // no.wikipedia.org / wiki / Bus_snooping
  5. Cache-koherensprotokoller i flerprosessorsystemer, Geeks for geeks, https: // www.geeksforgeeks.org / cache-coherence-protocols-in-multiprocessor-system /
  6. Informatikk og teknologi - Proceedings of the International Conference (CST2016), Ning Cai (Ed.), 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.no / bibliotek / visning / Linux-forståelse / 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åkingsverktøy, http: // smackerelofopinion.blogspot.no / 2015/09 / numatop-numa-system-monitoring-tool.html
  10. Numatop, https: // github.com / intel / numatop
  11. Pakke numatop for Debian GNU / Linux, https: // pakker.debian.org / buster / numatop
  12. Jonathan Kehayias: Forstå ikke-enhetlig minnetilgang / arkitekturer (NUMA), https: // www.sqlskills.no / blogger / jonathan / forståelse-ikke-enhetlig-minne-tilgangarkitekturer-numa /
  13. Linux Kernel News for Kernel 3.8, https: // kernelnewbies.org / Linux_3.8
  14. Ikke-enhetlig minnetilgang (NUMA), Wikipedia, https: // no.wikipedia.org / wiki / Non-uniform_memory_access
  15. Linux Memory Management Documentation, NUMA, https: // www.kjernen.org / doc / html / siste / vm / numa.html
  16. Pakke numactl for Debian GNU / Linux, https: // pakker.debian.org / sid / admin / numactl
  17. Pakke numad for Debian GNU / Linux, https: // pakker.debian.org / buster / numad
  18. Hvordan finne ut om NUMA-konfigurasjon er aktivert eller deaktivert?, https: // www.thegeekdiary.com / centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled /
  19. Prosessoraffinitet, Wikipedia, https: // no.wikipedia.org / wiki / Processor_affinity

Takk skal du ha

Forfatterne vil takke Gerold Rupprecht for hans støtte mens de forbereder denne artikkelen.

Om forfatterne

Plaxedes Nehanda er en multidrevet, selvdrevet allsidig person som bærer mange hatter, blant dem en arrangørplanlegger, en virtuell assistent, en transkribering, samt en ivrig forsker, basert i Johannesburg, Sør-Afrika.

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

Frank Hofmann jobber på veien - helst fra Berlin (Tyskland), Geneve (Sveits) og Cape Town (Sør-Afrika) - som utvikler, trener og forfatter for magasiner som Linux-User og Linux Magazine. Han er også medforfatter av Debian-pakkehåndteringsboken (http: // www.dpmb.org).

Installer det siste OpenRA-strategispillet på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spillmotor som gjenskaper de tidlige Westwood-spillene som den klassiske Command & Conquer: Red Alert. Di...
Installer nyeste Dolphin Emulator for Gamecube & Wii på Linux
Dolphin Emulator lar deg spille de valgte Gamecube- og Wii-spillene dine på Linux Personal Computers (PC). Som en fritt tilgjengelig og åpen kildekod...
Hvordan bruke GameConqueror Cheat Engine i Linux
Artikkelen dekker en guide om bruk av GameConqueror-juksemotoren i Linux. Mange brukere som spiller spill på Windows bruker ofte "Cheat Engine" -appli...