Pochopenie architektúry NUMA

Understanding Numa Architecture



Navrhovanie počítačov je vždy kompromisom. Štyri základné súčasti počítača - centrálna procesorová jednotka (CPU) alebo procesor, pamäť, úložisko a doska na pripojenie komponentov (systém zbernice I/O) - sú čo najchytrejšie skombinované, aby vytvorili počítač, ktorý je nákladovo efektívny a zároveň výkonný. Proces návrhu väčšinou zahŕňa optimalizáciu smerom k procesorom (koprocesory, viacjadrové nastavenie), typu a veľkosti pamäte, úložiska (disky, súborový systém) a cene. Myšlienka koprocesorov a viacjadrovej architektúry je distribuovať operácie do čo najväčšieho počtu jednotlivých výpočtových jednotiek na najmenšom možnom priestore a zabezpečiť, aby bolo súbežné vykonávanie výpočtových pokynov dostupnejšie a dostupnejšie. Pokiaľ ide o pamäť, je to otázka veľkosti alebo veľkosti, ktorú môže jednotlivá výpočtová jednotka riešiť, a ktorý typ pamäte pracuje s najnižšou možnou latenciou. Úložisko patrí do externej pamäte a jeho výkon závisí od typu disku, systému súborov, ktorý sa používa, vlákien, prenosového protokolu, komunikačnej štruktúry a počtu pripojených pamäťových zariadení.

Konštrukcia I/O zberníc predstavuje počítačové tepny a výrazne určuje, koľko a ako rýchlo je možné vymieňať si údaje medzi jednotlivými vyššie uvedenými komponentmi. Najvyššiu kategóriu vedú komponenty používané v oblasti vysokovýkonných počítačov (HPC). V polovici roku 2020 patria medzi súčasných predstaviteľov HPC produkty Nvidia Tesla a DGX, Radeon Instinct a Intel Xeon Phi s akcelerátorom založeným na GPU (porovnania produktov nájdete v [1,2]).







Pochopenie NUMA

Non-Uniform Memory Access (NUMA) popisuje architektúru zdieľanej pamäte používanú v súčasných viacprocesových systémoch. NUMA je počítačový systém zložený z niekoľkých samostatných uzlov takým spôsobom, že súhrnná pamäť je zdieľaná medzi všetkými uzlami: každému CPU je priradená vlastná lokálna pamäť a do pamäte môže pristupovať z iných CPU v systéme [12,7].



NUMA je chytrý systém, ktorý sa používa na pripojenie viacerých centrálnych procesorových jednotiek (CPU) k ľubovoľnému množstvu pamäte počítača, ktorá je v počítači k dispozícii. Jednotlivé uzly NUMA sú prepojené prostredníctvom škálovateľnej siete (I/O zbernica), takže CPU môže systematicky pristupovať k pamäti spojenej s inými uzlami NUMA.



Miestna pamäť je pamäť, ktorú CPU používa v konkrétnom uzle NUMA. Cudzia alebo vzdialená pamäť je pamäť, ktorú CPU preberá z iného uzla NUMA. Termín pomer NUMA popisuje pomer nákladov na prístup do zahraničnej pamäte k nákladom na prístup do miestnej pamäte. Čím vyšší je pomer, tým vyššie sú náklady a tým dlhšie trvá prístup k pamäti.





Trvá to však dlhšie, ako keď tento procesor pristupuje k vlastnej lokálnej pamäti. Prístup k lokálnej pamäti je hlavnou výhodou, pretože kombinuje nízku latenciu a veľkú šírku pásma. Naproti tomu prístup k pamäti patriacej akémukoľvek inému CPU má vyššiu latenciu a nižší výkon šírky pásma.

Pohľad späť: Vývoj multiprocesorov so zdieľanou pamäťou

Frank Dennemann [8] uvádza, že moderné systémové architektúry neumožňujú skutočne Uniform Memory Access (UMA), aj keď sú tieto systémy špeciálne navrhnuté na tento účel. Jednoducho povedané, myšlienkou paralelného výpočtu bolo mať skupinu procesorov, ktoré spolupracujú na výpočte danej úlohy, čím sa urýchli inak klasický sekvenčný výpočet.



Ako vysvetlil Frank Dennemann [8], na začiatku 70. rokov sa so zavedením relačných databázových systémov stala potreba systémov, ktoré by mohli obsluhovať viac súbežných užívateľských operácií a nadmerné generovanie údajov, hlavným prúdom. Napriek pôsobivej rýchlosti výkonu jednoprocesora boli viacprocesorové systémy lepšie vybavené na zvládnutie tohto pracovného zaťaženia. S cieľom poskytnúť nákladovo efektívny systém sa stredobodom výskumu stal adresný priestor zdieľanej pamäte. Na začiatku boli obhajované systémy používajúce prepínač priečnikov, avšak s touto konštrukčnou zložitosťou zmenšenou spolu s nárastom procesorov, čo robilo systém na báze zbernice atraktívnejším. Procesory v systéme zbernice [môžu] pristupovať k celému pamäťovému priestoru odosielaním požiadaviek na zbernicu, čo je veľmi nákladovo efektívny spôsob, ako využiť dostupnú pamäť čo najoptimálnejšie.

Počítačové systémy založené na zbernici však majú úzke miesto-obmedzené množstvo šírky pásma, ktoré vedie k problémom so škálovateľnosťou. Čím viac procesorov je do systému pridaných, tým je menšia šírka pásma na jeden uzol k dispozícii. Navyše, čím viac CPU je pridaných, tým je zbernica dlhšia a výsledkom je vyššia latencia.

Väčšina CPU bola skonštruovaná v dvojrozmernej rovine. CPU muselo mať tiež pridané integrované radiče pamäte. Jednoduché riešenie so štyrmi pamäťovými zbernicami (hornou, dolnou, ľavou, pravou) ku každému jadru CPU umožňovalo plnú dostupnú šírku pásma, ale to ide len tak ďaleko. Procesory so štyrmi jadrami značnú dobu stagnovali. Pridanie stôp nad a pod umožnilo priamym zberniciam cez diagonálne protiľahlé CPU, pretože čipy sa stali 3D. Umiestnenie štvorjadrového procesora na kartu, ktorá sa potom pripojila k zbernici, bolo ďalším logickým krokom.

Dnes každý procesor obsahuje veľa jadier so zdieľanou vyrovnávacou pamäťou na čipe a mimo čipu a má variabilné náklady na prístup do pamäte v rôznych častiach pamäte na serveri.

Zlepšenie účinnosti prístupu k údajom je jedným z hlavných cieľov súčasného dizajnu CPU. Každé jadro CPU bolo vybavené malou vyrovnávacou pamäťou jednej úrovne (32 KB) a vyššou (256 KB) vyrovnávacou pamäťou úrovne 2. Rôzne jadrá by neskôr zdieľali vyrovnávaciu pamäť úrovne 3 niekoľko MB, ktorej veľkosť postupom času značne narástla.

Aby sa predišlo zmeškaniu pamäte cache - vyžiadaniu údajov, ktoré v nej nie sú, je veľa času na nájdenie správneho počtu vyrovnávacích pamätí CPU, štruktúr ukladania do vyrovnávacej pamäte a zodpovedajúcich algoritmov. Podrobnejšie vysvetlenie protokolu pre ukladanie do vyrovnávacej pamäte snoop [4] a vyrovnávaciu pamäť cache [3,5] nájdete v [8], ako aj nápady na dizajn za NUMA.

Softvérová podpora pre NUMA

Existujú dve opatrenia na optimalizáciu softvéru, ktoré môžu zlepšiť výkon systému podporujúceho architektúru NUMA - afinita procesora a umiestnenie údajov. Ako je vysvetlené v [19], afinita procesora […] umožňuje väzbu a uvoľnenie procesu alebo vlákna k jednému CPU alebo radu CPU, takže proces alebo vlákno bude fungovať iba na určenom CPU alebo CPU, a nie akýkoľvek CPU. Pojem umiestnenie údajov označuje softvérové ​​úpravy, v ktorých sú kód a údaje uložené čo najbližšie k pamäti.

Rôzne operačné systémy UNIX a UNIX podporujú NUMA nasledujúcimi spôsobmi (nasledujúci zoznam je prevzatý z [14]):

  • Silicon Graphics Podpora IRIX pre architektúru ccNUMA s viac ako 1240 CPU so serverom Origin.
  • Microsoft Windows 7 a Windows Server 2008 R2 pridali podporu pre architektúru NUMA cez 64 logických jadier.
  • Verzia 2.5 jadra Linuxu už obsahovala základnú podporu NUMA, ktorá bola ďalej vylepšená v nasledujúcich vydaniach jadra. Verzia 3.8 jadra Linux priniesla nový základ NUMA, ktorý umožnil vývoj efektívnejších politík NUMA v neskorších vydaniach jadra [13]. Verzia 3.13 jadra Linuxu prináša množstvo politík, ktorých cieľom je priblížiť proces jeho pamäti spolu s riešením prípadov, ako je zdieľanie stránok pamäte medzi procesmi alebo používanie transparentných veľkých stránok; nové nastavenia riadenia systému umožňujú zapnúť alebo vypnúť vyvažovanie NUMA, ako aj konfiguráciu rôznych parametrov vyvažovania pamäte NUMA [15].
  • Oracle aj OpenSolaris modelujú architektúru NUMA so zavedením logických skupín.
  • FreeBSD pridal počiatočnú konfiguráciu afinity a zásad NUMA vo verzii 11.0.

V knihe Computer Science and Technology, Proceedings of the International Conference (CST2016) Ning Cai naznačuje, že štúdium architektúry NUMA bolo zamerané hlavne na špičkové počítačové prostredie a navrhlo Radix Partitioning (NaRP), ktoré si je vedomé NUMA, optimalizujúce výkon. zdieľaných vyrovnávacích pamätí v uzloch NUMA na urýchlenie aplikácií business intelligence. NUMA ako taká predstavuje strednú cestu medzi systémami zdieľanej pamäte (SMP) s niekoľkými procesormi [6].

NUMA a Linux

Ako bolo uvedené vyššie, jadro Linuxu podporuje NUMA od verzie 2.5. Debian GNU/Linux aj Ubuntu ponúkajú podporu NUMA na optimalizáciu procesov pomocou dvoch softvérových balíkov numactl [16] a numad [17]. Pomocou príkazu numactl môžete vytvoriť zoznam dostupných uzlov NUMA vo vašom systéme [18]:

# numactl -hardvér
k dispozícii:2uzly(0-1)
uzol0cpus:0 1 2 3 4 5 6 7 16 17 18 19 dvadsať dvadsaťjeden 22 2. 3
uzol0veľkosť:8157MB
uzol0zadarmo:88MB
uzol1cpus:8 9 10 jedenásť 12 13 14 pätnásť 24 25 26 27 28 29 30 31
uzol1veľkosť:8191MB
uzol1zadarmo:5176MB
vzdialenosti uzlov:
uzol0 1
0:10 dvadsať
1:dvadsať 10

NumaTop je užitočný nástroj vyvinutý spoločnosťou Intel na monitorovanie lokality runtime pamäte a analýzu procesov v systémoch NUMA [10,11]. Tento nástroj dokáže identifikovať potenciálne prekážky výkonu súvisiace s NUMA, a preto pomôcť vyrovnať alokácie pamäte/procesora s cieľom maximalizovať potenciál systému NUMA. Podrobnejší popis nájdete v [9].

Scenáre použitia

Počítače, ktoré podporujú technológiu NUMA, umožňujú všetkým CPU priamy prístup do celej pamäte - CPU to vnímajú ako jeden lineárny priestor adries. To vedie k efektívnejšiemu využívaniu 64-bitovej schémy adresovania, čo má za následok rýchlejší pohyb údajov, menšiu replikáciu údajov a jednoduchšie programovanie.

Systémy NUMA sú celkom atraktívne pre aplikácie na strane servera, ako sú systémy na dolovanie údajov a podporu rozhodovania. Navyše, písanie aplikácií pre hry a vysokovýkonný softvér je s touto architektúrou oveľa jednoduchšie.

Záver

Na záver možno povedať, že architektúra NUMA rieši škálovateľnosť, ktorá je jednou z jej hlavných výhod. V CPU NUMA bude mať jeden uzol väčšiu šírku pásma alebo nižšiu latenciu na prístup k pamäti v tom istom uzle (napr. Miestny procesor požaduje prístup do pamäte súčasne so vzdialeným prístupom; priorita je na miestnom CPU). Ak sú údaje lokalizované do konkrétnych procesov (a teda procesorov), dramaticky sa tým zvýši priepustnosť pamäte. Nevýhodou sú vyššie náklady na presun údajov z jedného procesora do druhého. Pokiaľ sa tento prípad nestáva príliš často, systém NUMA prekoná systémy s tradičnejšou architektúrou.

Odkazy a referencie

  1. Porovnajte NVIDIA Tesla a Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Porovnanie NVIDIA DGX-1 vs. Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Cache coherence, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Snooping autobusu, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Protokoly koherentnej vyrovnávacej pamäte vo viacprocesorových systémoch, geekovia pre geekov, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Počítačová veda a technika - zborník z medzinárodnej konferencie (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet a Marco Cesati: Pochopenie architektúry NUMA v porozumení jadru Linuxu, 3. vydanie, O'Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive Časť 1: Od UMA k NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: nástroj na monitorovanie systému NUMA, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Balíček numatop pre Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Pochopenie nerovnomerného prístupu k pamäti/architektúr (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Novinky Linux Kernel pre Kernel 3.8, https://kernelnewbies.org/Linux_3.8
  14. Nejednotný prístup k pamäti (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Dokumentácia správy pamäte Linux, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Balíček numactl pre Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
  17. Číslo balíka pre Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Ako zistím, či je konfigurácia NUMA povolená alebo zakázaná ?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Afinita procesora, Wikipedia, https://en.wikipedia.org/wiki/Procesor_affinity

Ďakujem

Autori by chceli poďakovať Geroldovi Rupprechtovi za podporu pri príprave tohto článku.

O autoroch

Plaxedes Nehanda je všestranný a všestranný človek s mnohými zručnosťami, ktorý nosí mnoho klobúkov, medzi nimi plánovač udalostí, virtuálny asistent, prepisovač a zanietený výskumník so sídlom v Johannesburgu v Južnej Afrike.

Prince K. Nehanda je inžinier prístrojov a riadenia (metrológie) v Paeflow Metering v Harare v Zimbabwe.

Frank Hofmann pracuje na cestách-najlepšie z Berlína (Nemecko), Ženevy (Švajčiarsko) a Kapského Mesta (Južná Afrika)-ako vývojár, tréner a autor časopisov ako Linux-User a Linux Magazine. Je tiež spoluautorom knihy o správe balíkov Debian ( http://www.dpmb.org ).