Förstå NUMA -arkitektur

Understanding Numa Architecture



Att designa datorer är alltid en kompromiss. De fyra grundkomponenterna i en dator - den centrala processorenheten (CPU) eller processorn, minnet, lagringen och kortet för att ansluta komponenterna (I/O -bussystem) - kombineras så smart som möjligt för att skapa en maskin som är både kostnadseffektivt och kraftfullt. Designprocessen innebär mestadels en optimering mot processorer (samprocessorer, flerkärnig installation), minnestyp och mängd, lagring (diskar, filsystem), samt pris. Tanken bakom medprocessorer och flerkärnig arkitektur är att distribuera operationer till så många enskilda beräkningsenheter i det minsta möjliga utrymmet och att göra parallell körning av datainstruktioner mer tillgängligt och prisvärt. När det gäller minne är det en fråga om mängden eller storleken som kan tas upp av den enskilda beräkningsenheten, och vilken minnestyp som fungerar med lägsta möjliga latens. Lagring tillhör det externa minnet och dess prestanda beror på disktypen, filsystemet som används, trådning, överföringsprotokoll, kommunikationstyg och antalet anslutna minnesenheter.

Utformningen av I/O -bussar representerar datorns artärer och avgör avsevärt hur mycket och hur snabbt data kan utbytas mellan de enskilda komponenterna som anges ovan. Toppkategorin leds av komponenter som används inom High Performance Computing (HPC). Från mitten av 2020 är bland de samtida representanterna för HPC Nvidia Tesla och DGX, Radeon Instinct och Intel Xeon Phi GPU-baserade acceleratorprodukter (se [1,2] för produktjämförelser).







Förstå NUMA

Non-Uniform Memory Access (NUMA) beskriver en delad minnesarkitektur som används i samtida multiprocessingssystem. NUMA är ett datorsystem som består av flera enskilda noder på ett sådant sätt att det aggregerade minnet delas mellan alla noder: varje CPU tilldelas sitt eget lokala minne och kan komma åt minne från andra processorer i systemet [12,7].



NUMA är ett smart system som används för att ansluta flera centrala processorenheter (CPU) till vilken mängd datorminne som helst på datorn. De enda NUMA -noder är anslutna över ett skalbart nätverk (I/O -buss) så att en CPU systematiskt kan komma åt minne som är associerat med andra NUMA -noder.



Lokalt minne är det minne som CPU: n använder i en viss NUMA -nod. Utländskt eller fjärrminne är det minne som en CPU tar från en annan NUMA -nod. Termen NUMA -förhållande beskriver förhållandet mellan kostnaden för åtkomst till främmande minne och kostnaden för åtkomst till lokalt minne. Ju större förhållande, desto större kostnad, och därmed ju längre tid det tar att komma åt minnet.





Det tar dock längre tid än när den processorn har åtkomst till sitt eget lokala minne. Lokal minnesåtkomst är en stor fördel, eftersom den kombinerar låg latens med hög bandbredd. Däremot har åtkomst till minne som tillhör någon annan CPU högre latens och lägre bandbreddsprestanda.

Ser tillbaka: Utvecklingen av multiprocessorer med delat minne

Frank Dennemann [8] säger att moderna systemarkitekturer inte tillåter riktigt Uniform Memory Access (UMA), även om dessa system är speciellt utformade för detta ändamål. Enkelt sagt var tanken på parallell beräkning att ha en grupp processorer som samarbetar för att beräkna en given uppgift och därmed påskynda en annars klassisk sekventiell beräkning.



Som förklarats av Frank Dennemann [8], i början av 1970 -talet, blev behovet av system som kunde betjäna flera samtidiga användaroperationer och överdriven datagenerering mainstream med introduktionen av relationsdatabassystem. Trots den imponerande prestandan för enprocessorns prestanda var multiprocessorsystem bättre rustade för att hantera denna arbetsbelastning. För att tillhandahålla ett kostnadseffektivt system blev delat minnesadressutrymme i fokus för forskning. Tidigt förespråkades system som använder en tvärstångsbrytare, men med denna designkomplexitet skalades tillsammans med ökningen av processorer, vilket gjorde det bussbaserade systemet mer attraktivt. Processorer i ett bussystem [kan] komma åt hela minnesutrymmet genom att skicka förfrågningar på bussen, ett mycket kostnadseffektivt sätt att använda det tillgängliga minnet så optimalt som möjligt.

Bussbaserade datorsystem har dock en flaskhals-den begränsade mängd bandbredd som leder till skalbarhetsproblem. Ju fler processorer som läggs till i systemet, desto mindre bandbredd per nod är tillgänglig. Dessutom, ju fler processorer som läggs till, desto längre buss och desto högre latens.

De flesta processorer konstruerades i ett tvådimensionellt plan. CPU: er måste också ha integrerade minneskontroller. Den enkla lösningen att ha fyra minnesbussar (topp, botten, vänster, höger) till varje CPU -kärna tillät full tillgänglig bandbredd, men det går bara så långt. Processorer stagnerade med fyra kärnor under en avsevärd tid. Att lägga till spår ovan och under tillät direktbussar över till de diagonalt motsatta processorerna när chips blev 3D. Att placera en fyrkärnig CPU på ett kort, som sedan kopplades till en buss, var nästa logiska steg.

Idag innehåller varje processor många kärnor med en delad on-chip-cache och ett off-chip-minne och har varierande åtkomstkostnader för olika delar av minnet inom en server.

Att förbättra datatillgångens effektivitet är ett av huvudmålen med modern CPU -design. Varje CPU -kärna var utrustad med en liten nivå 1 -cache (32 KB) och en större (256 KB) nivå 2 -cache. De olika kärnorna skulle senare dela en nivå 3 -cache på flera MB, vars storlek har ökat avsevärt med tiden.

För att undvika cachemissar - begära data som inte finns i cacheminnet - läggs mycket forskningstid på att hitta rätt antal CPU -cachar, cachingstrukturer och motsvarande algoritmer. Se [8] för en mer detaljerad förklaring av protokollet för cachning av snoop [4] och cachekoherens [3,5], samt designidéerna bakom NUMA.

Programvarusupport för NUMA

Det finns två programoptimeringsåtgärder som kan förbättra prestanda för ett system som stöder NUMA -arkitektur - processoraffinitet och dataplacering. Såsom förklaras i [19] möjliggör processoraffinitet [...] bindning och avbindning av en process eller en tråd till en enda CPU eller ett intervall av processorer så att processen eller tråden endast kommer att köras på den eller de angivna CPU: erna i stället för vilken processor som helst. Termen dataplacering avser programvarumodifieringar där kod och data hålls så nära som möjligt i minnet.

De olika UNIX- och UNIX-relaterade operativsystemen stöder NUMA på följande sätt (listan nedan är hämtad från [14]):

  • Silicon Graphics IRIX -stöd för ccNUMA -arkitektur över 1240 CPU med Origin -serverserier.
  • Microsoft Windows 7 och Windows Server 2008 R2 har lagt till stöd för NUMA -arkitektur över 64 logiska kärnor.
  • Version 2.5 av Linux -kärnan innehöll redan grundläggande NUMA -stöd, vilket förbättrades ytterligare i efterföljande kärnversioner. Version 3.8 av Linux -kärnan gav en ny NUMA -grund som möjliggjorde utveckling av effektivare NUMA -policyer i senare kärnversioner [13]. Version 3.13 av Linux -kärnan tog med många policyer som syftar till att placera en process nära minnet, tillsammans med hantering av ärenden, till exempel att ha minnessidor delade mellan processer eller användning av transparenta stora sidor; nya systemkontrollinställningar gör att NUMA -balansering kan aktiveras eller inaktiveras, samt konfiguration av olika NUMA -minnesbalanseringsparametrar [15].
  • Både Oracle och OpenSolaris modell NUMA -arkitektur med introduktion av logiska grupper.
  • FreeBSD lade till Initial NUMA -affinitet och policykonfiguration i version 11.0.

I boken Computer Science and Technology, Proceedings of the International Conference (CST2016) föreslår Ning Cai att studiet av NUMA-arkitektur huvudsakligen var inriktat på den avancerade datormiljön och föreslagna NUMA-medvetna Radix Partitioning (NaRP), som optimerar prestandan av delade cachar i NUMA -noder för att påskynda business intelligence -applikationer. Som sådan representerar NUMA en mellanväg mellan SMP -system (shared memory) med några få processorer [6].

NUMA och Linux

Som nämnts ovan har Linux -kärnan stött NUMA sedan version 2.5. Både Debian GNU/Linux och Ubuntu erbjuder NUMA -stöd för processoptimering med de två programpaketen numactl [16] och numad [17]. Med hjälp av kommandot numactl kan du lista inventeringen av tillgängliga NUMA -noder i ditt system [18]:

# numactl -hårdvara
tillgängliga:2knutpunkter(0-1)
nod0cpus:0 1 2 3 4 5 6 7 16 17 18 19 tjugo tjugoett 22 2. 3
nod0storlek:8157MB
nod0fri:88MB
nod1cpus:8 9 10 elva 12 13 14 femton 24 25 26 27 28 29 30 31
nod1storlek:8191MB
nod1fri:5176MB
nodavstånd:
nod0 1
0:10 tjugo
1:tjugo 10

NumaTop är ett användbart verktyg som utvecklats av Intel för att övervaka körtidens minnesplats och analysera processer i NUMA -system [10,11]. Verktyget kan identifiera potentiella NUMA-relaterade flaskhalsar för prestanda och därmed hjälpa till att balansera minne/CPU-tilldelningar för att maximera potentialen i ett NUMA-system. Se [9] för en mer detaljerad beskrivning.

Användningsscenarier

Datorer som stöder NUMA -teknik tillåter alla processorer att komma åt hela minnet direkt - processorerna ser detta som ett enda, linjärt adressutrymme. Detta leder till effektivare användning av 64-bitars adresseringsschema, vilket resulterar i snabbare förflyttning av data, mindre replikering av data och enklare programmering.

NUMA-system är ganska attraktiva för applikationer på serversidan, till exempel datamining och beslutsstödssystem. Dessutom blir skrivprogram för spel och högpresterande programvara mycket enklare med denna arkitektur.

Slutsats

Sammanfattningsvis adresserar NUMA -arkitektur skalbarhet, vilket är en av dess främsta fördelar. I en NUMA -CPU kommer en nod att ha en högre bandbredd eller lägre latens för att komma åt minnet på samma nod (t.ex. kräver den lokala CPU -minnet åtkomst samtidigt som fjärråtkomst; prioriteten ligger på den lokala CPU: n). Detta kommer att dramatiskt förbättra minnesgenomströmningen om data lokaliseras till specifika processer (och därmed processorer). Nackdelarna är de högre kostnaderna för att flytta data från en processor till en annan. Så länge det här fallet inte händer för ofta kommer ett NUMA -system att överträffa system med en mer traditionell arkitektur.

Länkar och referenser

  1. Jämför NVIDIA Tesla vs.Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Jämför NVIDIA DGX-1 mot Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Cachekoherens, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Bussnackning, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Cachekoherensprotokoll i multiprocessorsystem, Nördar för nördar, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Datavetenskap och teknik - Proceedings of the International Conference (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet och 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: Från UMA till NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: Ett NUMA -systemövervakningsverktyg, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Paketnummer för Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Understanding Non-Uniform Memory Access/Architectures (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Linux Kernel News för Kernel 3.8, https://kernelnewbies.org/Linux_3.8
  14. Icke-enhetlig minnesåtkomst (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. Paketnummer för Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
  17. Paketnummer för Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Hur hittar jag om NUMA -konfiguration är aktiverad eller inaktiverad ?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Processoraffinitet, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Tack

Författarna vill tacka Gerold Rupprecht för hans stöd när han förbereder denna artikel.

Om Författarna

Plaxedes Nehanda är en mångkunnig, självdriven mångsidig person som bär många hattar, bland dem en evenemangsplanerare, en virtuell assistent, en transkriberare, samt en ivrig forskare, baserad i Johannesburg, Sydafrika.

Prince K. Nehanda är en Instrumentation and Control (Metrology) Engineer på Paeflow Metering i Harare, Zimbabwe.

Frank Hofmann arbetar på vägen-helst från Berlin (Tyskland), Genève (Schweiz) och Kapstaden (Sydafrika)-som utvecklare, tränare och författare för tidskrifter som Linux-User och Linux Magazine. Han är också medförfattare till Debians pakethanteringsbok ( http://www.dpmb.org ).