Pochopení architektury NUMA

Understanding Numa Architecture



Navrhování počítačů je vždy kompromis. Čtyři základní komponenty počítače - centrální procesorová jednotka (CPU) nebo procesor, paměť, úložiště a deska pro připojení komponent (systém sběrnice I/O) - jsou spojeny tak chytře, jak je to jen možné, a vytvořit tak stroj, který je nákladově efektivní a výkonný. Proces návrhu většinou zahrnuje optimalizaci směrem k procesorům (koprocesory, vícejádrové nastavení), typu a velikosti paměti, úložišti (disky, souborový systém) a také ceně. Myšlenkou koprocesorů a vícejádrové architektury je distribuovat operace do co největšího počtu jednotlivých výpočetních jednotek na co nejmenším prostoru a učinit paralelní provádění výpočetních instrukcí dostupnějším a dostupnějším. Pokud jde o paměť, je to otázka množství nebo velikosti, kterou může jednotlivá výpočetní jednotka řešit, a který typ paměti pracuje s nejnižší možnou latencí. Úložiště patří do externí paměti a jeho výkon závisí na typu disku, používaném systému souborů, vláknech, přenosovém protokolu, komunikační struktuře a počtu připojených paměťových zařízení.

Konstrukce I/O sběrnic představuje počítačové tepny a významně určuje, jak moc a jak rychle lze data vyměňovat mezi jednotlivými výše uvedenými součástmi. Nejvyšší kategorii vedou komponenty používané v oblasti High Performance Computing (HPC). V polovině roku 2020 jsou mezi současnými zástupci HPC produkty Nvidia Tesla a DGX, Radeon Instinct a Intel Xeon Phi s akcelerátorem založeným na GPU (porovnání produktů najdete [1,2]).







Pochopení NUMA

Non-Uniform Memory Access (NUMA) popisuje architekturu sdílené paměti používanou v současných víceprocesních systémech. NUMA je výpočetní systém složený z několika jednotlivých uzlů takovým způsobem, že je agregovaná paměť sdílena mezi všechny uzly: každému CPU je přiřazena vlastní lokální paměť a může přistupovat k paměti z jiných CPU v systému [12,7].



NUMA je chytrý systém používaný pro připojení více centrálních procesorových jednotek (CPU) k libovolnému množství počítačové paměti dostupné v počítači. Jednotlivé uzly NUMA jsou propojeny prostřednictvím škálovatelné sítě (sběrnice I/O), takže procesor může systematicky přistupovat k paměti přidružené k jiným uzlům NUMA.



Místní paměť je paměť, kterou CPU používá v konkrétním uzlu NUMA. Cizí nebo vzdálená paměť je paměť, kterou CPU odebírá z jiného uzlu NUMA. Termín poměr NUMA popisuje poměr nákladů na přístup k cizí paměti k nákladům na přístup k místní paměti. Čím vyšší je tento poměr, tím vyšší jsou náklady a tím déle trvá přístup do paměti.





Trvá to však déle, než když tento procesor přistupuje k vlastní místní paměti. Přístup k místní paměti je hlavní výhodou, protože kombinuje nízkou latenci s velkou šířkou pásma. Naproti tomu přístup k paměti patřící k jakémukoli jinému CPU má vyšší latenci a nižší výkon šířky pásma.

Ohlédnutí: Vývoj multiprocesorů se sdílenou pamětí

Frank Dennemann [8] uvádí, že moderní systémové architektury neumožňují skutečně Uniform Memory Access (UMA), přestože tyto systémy jsou pro tento účel speciálně navrženy. Jednoduše řečeno, myšlenkou paralelního výpočtu bylo mít skupinu procesorů, které spolupracují na výpočtu daného úkolu, čímž se zrychlí jinak klasický sekvenční výpočet.



Jak vysvětlil Frank Dennemann [8], na začátku 70. let se zavedením systémů relačních databází stala hlavním proudem potřeba systémů, které by mohly obsluhovat více souběžných uživatelských operací a nadměrné generování dat. Navzdory působivé rychlosti výkonu jednoprocesoru byly víceprocesorové systémy lépe vybaveny, aby zvládly toto pracovní zatížení. Aby byl zajištěn nákladově efektivní systém, stal se středobodem výzkumu adresní prostor sdílené paměti. Na počátku byly prosazovány systémy využívající křížový přepínač, avšak s touto konstrukční složitostí škálovanou spolu s nárůstem procesorů, což zatraktivnilo systém na sběrnici. Procesory v systému sběrnice [mohou] přistupovat k celému paměťovému prostoru odesíláním požadavků na sběrnici, což je velmi nákladově efektivní způsob, jak využít dostupnou paměť co nejoptimálněji.

Počítačové systémy založené na sběrnici však mají úzké místo-omezené množství šířky pásma, které vede k problémům se škálovatelností. Čím více procesorů je do systému přidáno, tím menší je šířka pásma na uzel. Kromě toho platí, že čím více CPU je přidáno, tím delší sběrnice a tím vyšší latence.

Většina CPU byla konstruována v dvourozměrné rovině. CPU muselo mít také přidané integrované řadiče paměti. Jednoduché řešení se čtyřmi sběrnicemi paměti (nahoře, dole, vlevo, vpravo) pro každé jádro CPU umožňovalo plnou dostupnou šířku pásma, ale to jde jen tak daleko. CPU po dlouhou dobu stagnovalo se čtyřmi jádry. Přidání stop nad a pod umožnilo přímým sběrnicím přes diagonálně protilehlé CPU, protože čipy se staly 3D. Umístění čtyřjádrového procesoru na kartu, která se poté připojila ke sběrnici, byl dalším logickým krokem.

Dnes každý procesor obsahuje mnoho jader se sdílenou mezipamětí na čipu a pamětí mimo čip a má variabilní náklady na přístup k paměti v různých částech paměti na serveru.

Zlepšení efektivity přístupu k datům je jedním z hlavních cílů současného návrhu CPU. Každé jádro CPU bylo vybaveno malou mezipamětí první úrovně (32 KB) a větší (256 kB) mezipaměti úrovně 2. Různá jádra by později sdílela mezipaměť úrovně 3 o několika MB, jejíž velikost postupem času značně narostla.

Abychom se vyhnuli chybám v mezipaměti - vyžádání dat, která v mezipaměti nejsou - mnoho času na výzkum je věnováno nalezení správného počtu mezipaměti CPU, struktur mezipaměti a odpovídajících algoritmů. Podrobnější vysvětlení protokolu pro ukládání do mezipaměti snoop [4] a soudržnost mezipaměti [3,5] viz [8] a také návrhové nápady za NUMA.

Softwarová podpora pro NUMA

Existují dvě opatření pro optimalizaci softwaru, která mohou zlepšit výkon systému podporujícího architekturu NUMA - afinita procesoru a umístění dat. Jak je vysvětleno v [19], afinita procesoru […] umožňuje vazbu a odpojení procesu nebo vlákna k jednomu CPU nebo řadě procesorů, takže proces nebo vlákno se bude spouštět pouze na určeném CPU nebo CPU místo jakýkoli CPU. Termín umístění dat označuje softwarové úpravy, při nichž jsou kód a data uchovávány co nejblíže v paměti.

Různé operační systémy UNIX a UNIX podporují NUMA následujícími způsoby (níže uvedený seznam je převzat z [14]):

  • Silicon Graphics Podpora IRIX pro architekturu ccNUMA přes CPU 1 240 s řadou serverů Origin.
  • Microsoft Windows 7 a Windows Server 2008 R2 přidaly podporu pro architekturu NUMA přes 64 logických jader.
  • Verze 2.5 jádra Linuxu již obsahovala základní podporu NUMA, která byla dále vylepšena v následujících vydáních jádra. Verze 3.8 linuxového jádra přinesla nový základ NUMA, který umožňoval vývoj efektivnějších politik NUMA v pozdějších vydáních jádra [13]. Verze 3.13 linuxového jádra přinesla řadu zásad, jejichž cílem je umístit proces do blízkosti jeho paměti spolu s řešením případů, jako je sdílení stránek paměti mezi procesy nebo použití transparentních velkých stránek; nová nastavení řízení systému umožňují povolit nebo zakázat vyvažování NUMA a také konfiguraci různých parametrů vyvažování paměti NUMA [15].
  • Oracle i OpenSolaris modelují architekturu NUMA se zavedením logických skupin.
  • FreeBSD přidal Počáteční spříznění NUMA a konfiguraci zásad ve verzi 11.0.

V knize Computer Science and Technology, Proceedings of the International Conference (CST2016) Ning Cai naznačuje, že studium architektury NUMA bylo zaměřeno hlavně na špičkové výpočetní prostředí a navrhlo Radix Partitioning (NaRP), které umí NUMA-aware, optimalizující výkon sdílených mezipamětí v uzlech NUMA pro zrychlení aplikací business intelligence. NUMA jako taková představuje střední cestu mezi systémy sdílené paměti (SMP) s několika procesory [6].

NUMA a Linux

Jak bylo uvedeno výše, jádro Linuxu podporuje verzi NUMA od verze 2.5. Debian GNU/Linux i Ubuntu nabízejí podporu NUMA pro optimalizaci procesů pomocí dvou softwarových balíků numactl [16] a numad [17]. Pomocí příkazu numactl můžete vypsat soupis dostupných uzlů NUMA ve vašem systému [18]:

# numactl -hardware
k dispozici:2uzly(0-1)
uzel0cpus:0 1 2 3 4 5 6 7 16 17 18 19 dvacet dvacet jedna 22 2. 3
uzel0velikost:8157MB
uzel0volný, uvolnit:88MB
uzel1cpus:8 9 10 jedenáct 12 13 14 patnáct 24 25 26 27 28 29 30 31
uzel1velikost:8191MB
uzel1volný, uvolnit:5176MB
vzdálenosti uzlů:
uzel0 1
0:10 dvacet
1:dvacet 10

NumaTop je užitečný nástroj vyvinutý společností Intel pro monitorování lokality runtime paměti a analýzu procesů v systémech NUMA [10,11]. Tento nástroj dokáže identifikovat potenciální překážky výkonu související s NUMA, a tím pomoci znovu vyvážit alokaci paměti/CPU, aby se maximalizoval potenciál systému NUMA. Podrobnější popis viz [9].

Scénáře použití

Počítače, které podporují technologii NUMA, umožňují všem procesorům přímý přístup do celé paměti - CPU to vidí jako jeden lineární adresní prostor. To vede k efektivnějšímu využití 64bitového schématu adresování, což má za následek rychlejší pohyb dat, menší replikaci dat a snazší programování.

Systémy NUMA jsou velmi atraktivní pro aplikace na straně serveru, jako jsou systémy pro dolování dat a rozhodování. Díky této architektuře je navíc psaní aplikací pro hraní her a vysoce výkonného softwaru mnohem jednodušší.

Závěr

Závěrem lze říci, že architektura NUMA řeší škálovatelnost, což je jedna z jejích hlavních výhod. V procesoru NUMA bude mít jeden uzel větší šířku pásma nebo nižší latenci pro přístup k paměti na stejném uzlu (např. Místní procesor požaduje přístup do paměti současně se vzdáleným přístupem; priorita je na místním CPU). To dramaticky zlepší propustnost paměti, pokud jsou data lokalizována do konkrétních procesů (a tedy procesorů). Nevýhodou jsou vyšší náklady na přesun dat z jednoho procesoru do druhého. Dokud se tento případ nestává příliš často, bude systém NUMA překonávat systémy s tradičnější architekturou.

Odkazy a reference

  1. Porovnejte NVIDIA Tesla vs. Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Porovnejte NVIDIA DGX-1 vs. Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Soudržnost mezipaměti, Wikipedie, https://en.wikipedia.org/wiki/Cache_coherence
  4. Snooping autobusu, Wikipedie, https://en.wikipedia.org/wiki/Bus_snooping
  5. Protokoly soudržnosti mezipaměti ve víceprocesorových systémech, Geekové pro geeky, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Počítačová věda a technologie - sborník z mezinárodní konference (CST2016), Ning Cai (ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet a Marco Cesati: Porozumění architektuře NUMA v porozumění jádru Linuxu, 3. vydání, O'Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive Část 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 pro monitorování 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 pro Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Porozumění nejednotnému přístupu do paměti/architektury (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Linux Kernel News pro Kernel 3.8, https://kernelnewbies.org/Linux_3.8
  14. Nejednotný přístup do paměti (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Dokumentace správy paměti Linux, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Balíček numactl pro Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl
  17. Číslo balíčku pro Debian GNU/Linux, https://packages.debian.org/buster/numad
  18. Jak zjistit, zda je konfigurace NUMA povolena nebo zakázána ?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Afinita procesoru, Wikipedie, https://en.wikipedia.org/wiki/Procesor_affinity

Děkuji

Autoři by rádi poděkovali Geroldovi Rupprechtovi za podporu při přípravě tohoto článku.

O autorech

Plaxedes Nehanda je všestranný a všestranný člověk s mnoha dovednostmi, který nosí mnoho klobouků, mezi nimi plánovač akcí, virtuální asistent, přepisovatel a vášnivý badatel se sídlem v Johannesburgu v Jižní Africe.

Prince K. Nehanda je technik přístrojů a řízení (Metrology) ve společnosti Paeflow Metering v Harare v Zimbabwe.

Frank Hofmann pracuje na silnici-nejlépe z Berlína (Německo), Ženevy (Švýcarsko) a Kapského Města (Jižní Afrika)-jako vývojář, trenér a autor pro časopisy jako Linux-User a Linux Magazine. Je také spoluautorem knihy pro správu balíčků Debianu ( http://www.dpmb.org ).