Utformningen av I / O-bussar representerar datorns artärer och avgör betydligt hur mycket och hur snabbt data kan utbytas mellan de enskilda komponenterna som listas ovan. Toppkategorin leds av komponenter som används inom området High Performance Computing (HPC). Från och med mitten av 2020 är Nvidia Tesla och DGX, Radeon Instinct och Intel Xeon Phi GPU-baserade acceleratorprodukter bland samtida representanter för HPC (se [1,2] för produktjämförelser).
Förstå NUMA
Icke-enhetlig minnesåtkomst (NUMA) beskriver en delad minnesarkitektur som används i samtida flerbearbetningssystem. NUMA är ett datorsystem som består av flera enskilda noder på ett sådant sätt att det samlade 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 som finns på datorn. De enskilda NUMA-noderna är anslutna via 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 minnet 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 högre 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. Lokalt minnesåtkomst är en stor fördel, eftersom det 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 bandbredd.
Ser tillbaka: Evolution of Shared-Memory Multiprocessors
Frank Dennemann [8] säger att moderna systemarkitekturer inte tillåter verkligt enhetlig minnesåtkomst (UMA), även om dessa system är speciellt utformade för det ändamålet. Enkelt sagt var tanken med parallell beräkning att ha en grupp processorer som samarbetar för att beräkna en given uppgift och därigenom påskynda en annars klassisk beräkning i följd.
Som förklarats av Frank Dennemann [8], i början av 1970-talet, "blev behovet av system som kunde tjäna flera samtidiga användaroperationer och överdriven datagenerering vanligt" med introduktionen av relationsdatabassystem. ”Trots den imponerande hastigheten på uniprocessorprestanda var multiprocessorsystem bättre rustade för att hantera denna arbetsbelastning. För att tillhandahålla ett kostnadseffektivt system blev delat minnesadressutrymme fokus för forskningen. Tidigt förespråkades system som använder en tvärstångsbrytare, men med denna designkomplexitet skalad 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ängden bandbredd som leder till skalbarhetsproblem. Ju fler processorer som läggs till i systemet, desto mindre bandbredd per tillgänglig nod. Dessutom, ju fler processorer som läggs till, desto längre blir bussen och desto högre latens som ett resultat.
De flesta processorer konstruerades i ett tvådimensionellt plan. Processorer måste också ha integrerade minneskontrollanter tillagda. Den enkla lösningen att ha fyra minnesbussar (uppe, nedre, vänster, höger) till varje CPU-kärna möjliggjorde full tillgänglig bandbredd, men det går bara så långt. Processorer stagnerade med fyra kärnor under en längre tid. Lägga till spår ovanför och under tillät direktbussar till de diagonalt motsatta processorerna när marker blev 3D. Att placera en fyrkärnig CPU på ett kort, som sedan anslöt 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 variabla minneskostnader för åtkomst över olika delar av minnet på en server.
Att förbättra effektiviteten för datatillgång är ett av huvudmålen för modern CPU-design. Varje CPU-kärna var utrustad med en liten nivå en 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 vuxit avsevärt över tiden.
För att undvika cachemissar - begär data som inte finns i cacheminnet - mycket forskningstid spenderas på att hitta rätt antal CPU-cacheminnen, cachingstrukturer och motsvarande algoritmer. Se [8] för en mer detaljerad förklaring av protokollet för caching snoop [4] och cache-koherens [3,5], samt designidéerna bakom NUMA.
Programvarusupport för NUMA
Det finns två mjukvaruoptimeringsåtgärder som kan förbättra prestanda för ett system som stöder NUMA-arkitektur - processoraffinitet och dataplacering. 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 antal CPU: er så att processen eller tråden endast körs på den angivna CPU: n eller CPU: erna snarare än någon processor.”Termen” dataplacering ”avser programvaruändringar där kod och data hålls så nära minnet som möjligt.
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-serverserien.
- 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 i Linux-kärnan gav en ny NUMA-stiftelse som möjliggjorde utveckling av effektivare NUMA-policyer i senare kärnversioner [13]. Version 3.13 i Linux-kärnan förde flera policyer som syftar till att placera en process nära dess minne, tillsammans med hanteringen av ärenden, såsom att minnessidor delas mellan processer eller användning av transparenta stora sidor; nya systeminställningar gör att NUMA-balansering kan aktiveras eller inaktiveras, samt konfigurering av olika NUMA-minnesbalanseringsparametrar [15].
- Både Oracle och OpenSolaris modellerar 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 studien av NUMA-arkitektur främst var inriktad på avancerad datormiljö och föreslog NUMA-medveten Radix Partitioning (NaRP), vilket optimerar prestanda för delade cachar i NUMA-noder för att påskynda business intelligence-applikationer. Som sådan representerar NUMA en mellanväg mellan delade minnessystem (SMP) med några 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å mjukvarupaketen numactl [16] och numad [17]. Med hjälp av numactl-kommandot kan du lista inventeringen av tillgängliga NUMA-noder i ditt system [18]:
# numactl - hårdvaratillgängligt: 2 noder (0-1)
nod 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
nod 0 storlek: 8157 MB
nod 0 ledig: 88 MB
nod 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
nod 1 storlek: 8191 MB
nod 1 ledig: 5176 MB
nodavstånd:
nod 0 1
0: 10 20
1: 20 10
NumaTop är ett användbart verktyg som utvecklats av Intel för att övervaka runtime-minnesplats och analysera processer i NUMA-system [10,11]. Verktyget kan identifiera potentiella NUMA-relaterade prestandaflaskhalsar och därmed hjälpa till att balansera minne / CPU-allokeringar 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 en mer effektiv användning av 64-bitars adresseringsschemat, vilket resulterar i snabbare datarörelse, mindre replikering av data och enklare programmering.
NUMA-system är ganska attraktiva för serverapplikationer, till exempel data mining och beslutsstödsystem. Dessutom blir skrivning av applikationer 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-processor kommer en nod att ha högre bandbredd eller lägre latens för att komma åt minnet på samma nod (e.g., den lokala CPU begär minnesåtkomst samtidigt som fjärråtkomst; prioriteten är på den lokala processorn). Detta kommer att förbättra minnesgenomströmningen dramatiskt om data är lokaliserade 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 detta fall inte händer för ofta kommer ett NUMA-system att överträffa system med en mer traditionell arkitektur.
Länkar och referenser
- Jämför NVIDIA Tesla vs. Radeon Instinct, https: // www.itcentralstation.com / produkter / jämförelser / nvidia-tesla_vs_radeon-instinct
- Jämför NVIDIA DGX-1 vs. Radeon Instinct, https: // www.itcentralstation.com / produkter / jämförelser / nvidia-dgx-1_vs_radeon-instinct
- Cache-koherens, Wikipedia, https: // sv.wikipedia.org / wiki / Cache_coherence
- Buss snooping, Wikipedia, https: // sv.wikipedia.org / wiki / Bus_snooping
- Cache-koherensprotokoll i multiprocessorsystem, Geeks for geeks, https: // www.geeksforgeeks.org / cache-coherence-protocols-in-multiprocessor-system /
- Datavetenskap och teknik - Proceedings of the International Conference (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
- Daniel P. Bovet och Marco Cesati: Understanding NUMA architecture in Understanding the Linux Kernel, 3rd edition, O'Reilly, https: // www.oreilly.com / bibliotek / visa / förstå-linux / 0596005652 /
- 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 /
- Colin Ian King: NumaTop: Ett NUMA-systemövervakningsverktyg, http: // smackerelofopinion.blogspot.com / 2015/09 / numatop-numa-system-övervakningsverktyg.html
- Numatop, https: // github.com / intel / numatop
- Paket numatop för Debian GNU / Linux, https: // paket.debian.org / buster / numatop
- Jonathan Kehayias: Förstå icke-enhetlig minnesåtkomst / arkitektur (NUMA), https: // www.sqlskills.com / bloggar / jonathan / förståelse-icke-enhetligt-minne-åtkomstarkitekturer-numa /
- Linux Kernel News för Kernel 3.8, https: // kernelnewbies.org / Linux_3.8
- Icke-enhetlig minnesåtkomst (NUMA), Wikipedia, https: // sv.wikipedia.org / wiki / Non-uniform_memory_access
- Dokumentation om Linux-minneshantering, NUMA, https: // www.kärna.org / doc / html / senaste / vm / numa.html
- Paket numactl för Debian GNU / Linux, https: // paket.debian.org / sid / admin / numactl
- Paketnummer för Debian GNU / Linux, https: // paket.debian.org / buster / numad
- Hur man hittar om NUMA-konfiguration är aktiverad eller inaktiverad?, https: // www.thegeekdiary.com / centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled /
- Processoraffinitet, Wikipedia, https: // sv.wikipedia.org / wiki / Processor_affinity
Tack
Författarna vill tacka Gerold Rupprecht för hans stöd när de förbereder denna artikel.
Om Författarna
Plaxedes Nehanda är en mångsidig, 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.
Prins K. Nehanda är en Instrumentation and Control (Metrology) ingenjör vid 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 tidningar som Linux-User och Linux Magazine. Han är också medförfattare till Debians pakethanteringsbok (http: // www.dpmb.org).