A NUMA architektúra megértése

Understanding Numa Architecture



A számítógépek tervezése mindig kompromisszum. A számítógép négy alapvető alkotóeleme - a központi processzor (CPU) vagy processzor, a memória, a tárhely és az alkatrészek csatlakoztatására szolgáló kártya (I/O buszrendszer) - a lehető legügyesebben kombinálva olyan gépet hoz létre, amely költséghatékony és erőteljes is. A tervezési folyamat többnyire a processzorok (társprocesszorok, többmagos beállítás), a memória típusa és mennyisége, tárhely (lemezek, fájlrendszer) és az ár irányába történő optimalizálást foglalja magában. A társfeldolgozók és a többmagos architektúra ötlete hogy a műveleteket a lehető legkisebb helyre terjessze el egyetlen számítási egységnek, és a számítási utasítások párhuzamos végrehajtását tegye elérhetőbbé és megfizethetőbbé. A memória szempontjából az a kérdés, hogy az egyes számítási egységek milyen mennyiségben vagy méretben kezelhetők, és melyik memória típus működik a lehető legalacsonyabb késleltetéssel. A tárolás a külső memóriához tartozik, és teljesítménye a lemez típusától, a használt fájlrendszertől, a szálazástól, az átviteli protokolltól, a kommunikációs struktúrától és a csatlakoztatott memóriaeszközök számától függ.

Az I/O buszok kialakítása a számítógépes artériákat képviseli, és jelentősen meghatározza, hogy mennyi és milyen gyorsan lehet adatot cserélni a fent felsorolt ​​egyes komponensek között. A felső kategóriát a nagy teljesítményű számítástechnika (HPC) területén használt alkatrészek vezetik. 2020 közepétől a HPC kortárs képviselői között vannak az Nvidia Tesla és a DGX, a Radeon Instinct és az Intel Xeon Phi GPU-alapú gyorsítótermékek (a termékek összehasonlítását lásd [1,2]).







A NUMA megértése

A nem egységes memóriahozzáférés (NUMA) a korszerű többprocesszoros rendszerekben használt megosztott memória-architektúrát írja le. A NUMA egy számítástechnikai rendszer, amely több egyedi csomópontból áll, és így az összesített memória minden csomópont között megoszlik: minden CPU saját helyi memóriával rendelkezik, és hozzáférhet a rendszer többi CPU -jának memóriájához [12,7].



A NUMA egy okos rendszer, amelyet több központi processzor (CPU) csatlakoztatására használnak a számítógépen rendelkezésre álló memóriamennyiséghez. Az egyes NUMA csomópontok egy skálázható hálózaton (I/O buszon) keresztül vannak összekötve, így a CPU szisztematikusan hozzáférhet a többi NUMA csomóponthoz társított memóriához.



A helyi memória az a memória, amelyet a CPU használ egy adott NUMA csomópontban. Az idegen vagy távoli memória az a memória, amelyet a CPU egy másik NUMA csomóponttól vesz. A NUMA arány kifejezés leírja az idegen memória elérésének és a helyi memória elérésének költségeinek arányát. Minél nagyobb az arány, annál nagyobb a költség, és így hosszabb ideig tart a memória elérése.





Ez azonban hosszabb időt vesz igénybe, mint amikor az adott CPU hozzáfér a saját helyi memóriájához. A helyi memóriahozzáférés nagy előny, mivel az alacsony késleltetést a nagy sávszélességgel ötvözi. Ezzel szemben bármely más CPU -hoz tartozó memória elérése nagyobb késleltetésű és alacsonyabb sávszélességű.

Visszatekintés: A megosztott memória többprocesszorok fejlődése

Frank Dennemann [8] kijelenti, hogy a modern rendszer -architektúrák nem teszik lehetővé a valóban egységes memóriahozzáférést (UMA), annak ellenére, hogy ezeket a rendszereket kifejezetten erre a célra tervezték. Egyszerűen fogalmazva, a párhuzamos számítás ötlete az volt, hogy legyen egy processzorcsoport, amely együttműködik egy adott feladat kiszámításához, ezáltal felgyorsítva az egyébként klasszikus szekvenciális számítást.



Amint azt Frank Dennemann [8] kifejtette, a 70 -es évek elején a relációs adatbázis -rendszerek bevezetésével vált mainstreamvé az olyan rendszerek iránti igény, amelyek több párhuzamos felhasználói műveletet és a túlzott adatgenerációt képesek kiszolgálni. Az egyprocesszoros teljesítmény lenyűgöző aránya ellenére a többprocesszoros rendszerek jobban felszereltek voltak ennek a munkaterhelésnek a kezelésére. A költséghatékony rendszer biztosítása érdekében a kutatás középpontjába a megosztott memória címtere került. Korábban a keresztléc-kapcsolót használó rendszereket javasolták, azonban ezzel a tervezési bonyolultsággal a processzorok számának növekedésével párosultak, ami vonzóbbá tette a buszos rendszert. A buszrendszerben lévő processzorok [elérhetik] a teljes memóriaterületet, ha kéréseket küldenek a buszon, ami nagyon költséghatékony módja a rendelkezésre álló memória lehető legoptimálisabb felhasználásának.

A busz-alapú számítógépes rendszerek azonban szűk keresztmetszettel rendelkeznek-a korlátozott sávszélesség, amely skálázhatósági problémákhoz vezet. Minél több CPU -t adnak a rendszerhez, annál kevesebb sávszélesség érhető el csomópontonként. Továbbá, minél több CPU -t adnak hozzá, annál hosszabb a busz, és ennek következtében nagyobb a késleltetés.

A legtöbb CPU kétdimenziós síkban készült. A CPU -khoz integrált memóriavezérlőket is hozzá kellett adni. Az az egyszerű megoldás, hogy négy memóriabusz (felül, lent, balra, jobbra) van minden CPU -maghoz, lehetővé tette a teljes rendelkezésre álló sávszélességet, de ez csak eddig. A CPU -k hosszú ideig stagnáltak négy maggal. A nyomok hozzáadása felül és alatt lehetővé tette a közvetlen buszokat az átlósan ellentétes CPU -kba, mivel a chipek 3D -vé váltak. A következő logikus lépés egy négymagos CPU elhelyezése egy kártyán, amely aztán buszhoz csatlakozott.

Napjainkban minden processzor sok magot tartalmaz, megosztott chip-gyorsítótárral és chipen kívüli memóriával, valamint változó memóriahozzáférési költségek a memória különböző részein a szerveren belül.

Az adathozzáférés hatékonyságának javítása a modern CPU -tervezés egyik fő célja. Minden CPU magot egy kis szintű gyorsítótár (32 KB) és egy nagyobb (256 KB) 2. szintű gyorsítótár látott el. A különböző magok később több MB méretű, 3. szintű gyorsítótárat osztanak meg, amelynek mérete az idő múlásával jelentősen megnőtt.

A gyorsítótár kihagyásának elkerülése érdekében - olyan adatok kérése, amelyek nincsenek a gyorsítótárban - sok kutatási időt fordítanak a megfelelő számú CPU -gyorsítótár, a gyorsítótárazási struktúrák és a megfelelő algoritmusok megtalálására. Lásd [8] a snoop gyorsítótárazási protokolljának [4] és a gyorsítótár koherenciájának [3,5] részletesebb magyarázatát, valamint a NUMA tervezési ötleteit.

Szoftvertámogatás a NUMA számára

Két szoftveroptimalizálási intézkedés javíthatja a NUMA architektúrát támogató rendszer teljesítményét - a processzor affinitása és az adatok elhelyezése. Amint azt a [19] fejezetben kifejtettük, a processzor -affinitás […] lehetővé teszi egy folyamat vagy szál egyetlen CPU -hoz vagy CPU -tartományhoz való kötését és lekötését úgy, hogy a folyamat vagy szál csak a kijelölt CPU -n vagy CPU -n fog végrehajtódni, nem pedig bármilyen CPU. Az adatelhelyezés kifejezés olyan szoftvermódosításokra vonatkozik, amelyek során a kódot és az adatokat a lehető legközelebb tárolják a memóriában.

A különböző UNIX és UNIX-hoz kapcsolódó operációs rendszerek a következő módokon támogatják a NUMA-t (az alábbi lista [14]):

  • Silicon Graphics IRIX támogatás 1240 CPU feletti ccNUMA architektúrához Origin szerver sorozatokkal.
  • A Microsoft Windows 7 és a Windows Server 2008 R2 támogatta a NUMA architektúrát 64 logikai magon keresztül.
  • A Linux -kernel 2.5 -ös verziója már tartalmazott alapvető NUMA -támogatást, amelyet a későbbi kernel -kiadások tovább javítottak. A Linux -kernel 3.8 -as verziója új NUMA -alapot hozott létre, amely lehetővé tette a hatékonyabb NUMA -házirendek kifejlesztését a későbbi kernelkiadásokban [13]. A Linux -kernel 3.13 -as verziója számos olyan házirendet hozott, amelyek célja egy folyamat memória közelébe helyezése, valamint az esetek kezelése, például a memóriaoldalak megosztása a folyamatok között vagy átlátszó hatalmas oldalak használata; az új rendszervezérlési beállítások lehetővé teszik a NUMA kiegyensúlyozásának engedélyezését vagy letiltását, valamint a különböző NUMA memóriakiegyenlítési paraméterek konfigurálását [15].
  • Mind az Oracle, mind az OpenSolaris modellezi a NUMA architektúrát logikai csoportok bevezetésével.
  • A FreeBSD hozzáadta a kezdeti NUMA affinitást és házirend -konfigurációt a 11.0 verzióban.

A Computer Science and Technology, Proceedings of the International Conference (CST2016) című könyvben Ning Cai azt sugallja, hogy a NUMA architektúra tanulmányozása elsősorban a csúcskategóriás számítástechnikai környezetre összpontosított, és javasolt a NUMA-tudatos Radix Partitioning (NaRP), amely optimalizálja a teljesítményt megosztott gyorsítótárak száma NUMA csomópontokban az üzleti intelligencia -alkalmazások felgyorsítása érdekében. Mint ilyen, a NUMA középutat jelent a néhány processzoros megosztott memória (SMP) rendszerek között [6].

NUMA és Linux

Amint fentebb említettük, a Linux kernel támogatja a NUMA -t a 2.5 verzió óta. Mind a Debian GNU/Linux, mind az Ubuntu NUMA támogatást kínál a folyamatoptimalizáláshoz a két szoftvercsomaggal: numactl [16] és numad [17]. A numactl parancs segítségével felsorolhatja a rendszerben rendelkezésre álló NUMA csomópontok listáját [18]:

# numactl -hardver
elérhető:2csomópontok(0-1)
csomópont0cpus:0 1 2 3 4 5 6 7 16 17 18 19 húsz huszonegy 22 2. 3
csomópont0méret:8157MB
csomópont0ingyenes:88MB
csomópont1cpus:8 9 10 tizenegy 12 13 14 tizenöt 24 25 26 27 28 29 30 31
csomópont1méret:8191MB
csomópont1ingyenes:5176MB
csomópont távolságok:
csomópont0 1
0:10 húsz
1:húsz 10

A NumaTop egy hasznos eszköz, amelyet az Intel fejlesztett ki a futásidejű memória helyének megfigyelésére és a folyamatok elemzésére NUMA rendszerekben [10,11]. Az eszköz képes azonosítani a lehetséges NUMA-val kapcsolatos teljesítmény szűk keresztmetszeteket, és ezáltal segít a memória/CPU-kiosztás egyensúlyának helyreállításában, hogy maximalizálja a NUMA rendszerben rejlő lehetőségeket. Lásd [9] a részletesebb leírást.

Használati forgatókönyvek

A NUMA technológiát támogató számítógépek lehetővé teszik, hogy minden CPU közvetlenül hozzáférjen a teljes memóriához - a CPU -k ezt egyetlen, lineáris címtérnek tekintik. Ez a 64 bites címzési séma hatékonyabb használatához vezet, ami gyorsabb adatmozgást, kevesebb adatreplikációt és könnyebb programozást eredményez.

A NUMA rendszerek meglehetősen vonzóak a szerveroldali alkalmazások számára, mint például az adatbányászat és a döntéstámogató rendszerek. Továbbá ezzel az architektúrával sokkal könnyebbé válik az alkalmazások írása a játékokhoz és a nagy teljesítményű szoftverekhez.

Következtetés

Összefoglalva, a NUMA architektúra a skálázhatósággal foglalkozik, ami az egyik fő előnye. A NUMA CPU -ban az egyik csomópont nagyobb sávszélességgel vagy alacsonyabb késleltetéssel rendelkezik az azonos csomópont memóriájának eléréséhez (pl. A helyi CPU a távoli hozzáféréssel egyidejűleg kér memóriahozzáférést; a prioritás a helyi CPU -n van). Ez drámaian javítja a memóriaátvitelt, ha az adatokat meghatározott folyamatokhoz (és így processzorokhoz) lokalizálják. A hátrányok az adatok egyik processzorról a másikra történő áthelyezésének magasabb költségei. Amíg ez az eset nem fordul elő túl gyakran, a NUMA rendszer felülmúlja a hagyományosabb architektúrájú rendszereket.

Hivatkozások és hivatkozások

  1. Az NVIDIA Tesla és a Radeon Instinct összehasonlítása, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Az NVIDIA DGX-1 és a Radeon Instinct összehasonlítása https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Gyorsítótár -koherencia, Wikipédia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Buszozgatás, Wikipédia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Gyorsítótár -koherencia protokollok többprocesszoros rendszerekben, Geeks for geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Számítástechnika és technológia - Nemzetközi konferencia (CST2016) közleményei, Ning Cai (szerk.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet és Marco Cesati: A NUMA architektúra megértése a Linux kernel megértésében, 3. kiadás, O’Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA mélymerülés 1. rész: Az UMA -tól a NUMA -ig, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: NUMA rendszerfigyelő eszköz, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. A csomag tervezett Debian GNU / Linux számára, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: A nem egységes memóriahozzáférés/architektúrák megértése (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. Nem egységes memóriahozzáférés (NUMA), Wikipédia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Linux memóriakezelési dokumentáció, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Numactl csomag Debian GNU/Linux számára, https://packages.debian.org/sid/admin/numactl
  17. Csomagszám Debian GNU/Linux számára, https://packages.debian.org/buster/numad
  18. Hogyan lehet megtudni, hogy a NUMA konfiguráció engedélyezve vagy letiltva van -e? https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Processzor affinitás, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Köszönöm

A szerzők szeretnék köszönetet mondani Gerold Rupprechtnek a cikk elkészítésekor nyújtott támogatásáért.

A szerzőkről

Plaxedes Nehanda egy sokoldalú, önvezető, sokoldalú személy, aki sok kalapot visel, köztük eseménytervezőt, virtuális asszisztenst, átírót, valamint lelkes kutatót, a dél-afrikai Johannesburgban.

K. Nehanda herceg a Zimbabwe -i Harare -i Paeflow Metering műszerezés és vezérlés (mérés) mérnöke.

Frank Hofmann úton dolgozik-lehetőleg Berlinből (Németország), Genfből (Svájc) és Fokvárosból (Dél-Afrika)-fejlesztőként, oktatóként és szerzőként olyan magazinokhoz, mint a Linux-User és a Linux Magazine. Társszerzője a Debian csomagkezelő könyvnek ( http://www.dpmb.org ).