Comprensió de l'arquitectura NUMA

Understanding Numa Architecture



Dissenyar ordinadors sempre és un compromís. Els quatre components bàsics d’un ordinador: la unitat central de processament (CPU) o processador, la memòria, l’emmagatzematge i la placa per connectar els components (sistema de bus d’E / S), es combinen de la manera més intel·ligent possible per crear una màquina que és alhora rendible i potent. El procés de disseny implica principalment una optimització cap als processadors (coprocessadors, configuració multi-core), tipus i quantitat de memòria, emmagatzematge (discos, sistema de fitxers), així com el preu. distribuir operacions a tantes unitats informàtiques individuals en el mínim espai possible i fer més accessible i assequible l'execució paral·lela d'instruccions informàtiques. En termes de memòria, es tracta de la quantitat o mida que pot abordar la unitat informàtica individual, i quin tipus de memòria funciona amb la menor latència possible. L’emmagatzematge pertany a la memòria externa i el seu rendiment depèn del tipus de disc, del sistema de fitxers que s’utilitzi, de la conversió, del protocol de transferència, del teixit de comunicació i del nombre de dispositius de memòria connectats.

El disseny dels busos d'E / S representa les artèries de l'ordinador i determina de manera significativa la quantitat i la rapidesa amb què es poden intercanviar dades entre els components individuals esmentats anteriorment. La categoria superior està liderada pels components utilitzats en el camp de la informàtica d’altes prestacions (HPC). A mitjan 2020, entre els representants contemporanis de HPC hi ha els productes acceleradors basats en GPU Nvidia Tesla i DGX, Radeon Instinct i Intel Xeon Phi (vegeu [1,2] per a comparacions de productes).







Comprensió de NUMA

L’accés a la memòria no uniforme (NUMA) descriu una arquitectura de memòria compartida que s’utilitza en sistemes multiprocessadors contemporanis. NUMA és un sistema informàtic compost per diversos nodes individuals de manera que la memòria agregada es comparteix entre tots els nodes: a cada CPU se li assigna la seva pròpia memòria local i pot accedir a la memòria d'altres CPU del sistema [12,7].



NUMA és un sistema intel·ligent que s’utilitza per connectar diverses unitats centrals de processament (CPU) a qualsevol quantitat de memòria de l’ordinador disponible a l’ordinador. Els nodes NUMA individuals estan connectats a través d'una xarxa escalable (bus d'E / S) de manera que una CPU pot accedir sistemàticament a la memòria associada a altres nodes NUMA.



La memòria local és la memòria que utilitza la CPU en un node NUMA concret. La memòria externa o remota és la memòria que pren una CPU d’un altre node NUMA. El terme relació NUMA descriu la relació entre el cost d’accedir a la memòria externa i el cost d’accedir a la memòria local. Com més gran sigui la relació, major serà el cost i, per tant, més temps trigarà a accedir a la memòria.





Tanmateix, triga més que quan la CPU accedeix a la seva pròpia memòria local. L’accés a la memòria local és un avantatge important, ja que combina una latència baixa amb un ample de banda elevat. En canvi, l'accés a memòria pertanyent a qualsevol altra CPU té una latència més alta i un rendiment d'ample de banda inferior.

Mirant enrere: evolució dels multiprocessadors de memòria compartida

Frank Dennemann [8] afirma que les arquitectures de sistemes moderns no permeten l'accés realment uniforme a la memòria (UMA), tot i que aquests sistemes estan dissenyats específicament per a aquest propòsit. Simplement parlant, la idea de la computació paral·lela era comptar amb un grup de processadors que cooperessin per calcular una tasca determinada, accelerant així un càlcul seqüencial altrament clàssic.



Com va explicar Frank Dennemann [8], a principis dels anys setanta, la necessitat de sistemes que poguessin atendre múltiples operacions simultànies d'usuaris i una generació excessiva de dades es va convertir en una cosa principal amb la introducció de sistemes de bases de dades relacionals. Tot i la impressionant taxa de rendiment d'uniprocessador, els sistemes multiprocessador estaven millor equipats per gestionar aquesta càrrega de treball. Per proporcionar un sistema rendible, l'espai d'adreces de memòria compartida es va convertir en el focus de la investigació. Al principi, es van defensar sistemes que utilitzaven un commutador de travessers, però amb aquesta complexitat de disseny escalada juntament amb l’increment de processadors, cosa que va fer que el sistema basat en bus fos més atractiu. Els processadors d’un sistema de bus poden accedir a tot l’espai de memòria enviant sol·licituds al bus, una manera molt rendible d’utilitzar la memòria disponible de la manera més òptima possible.

No obstant això, els sistemes informàtics basats en bus tenen un coll d'ampolla: la quantitat limitada d'ample de banda que comporta problemes d'escalabilitat. Com més CPU s’afegeixin al sistema, menys amplada de banda per node disponible. A més, com més CPU s’afegeixin, més llarg serà el bus i més gran serà la latència.

La majoria de les CPU es van construir en un pla bidimensional. Les CPU també havien d’haver incorporat controladors de memòria integrats. La solució senzilla de tenir quatre busos de memòria (superior, inferior, esquerre, dret) a cada nucli de la CPU permetia amplada de banda total disponible, però això només va fins ara. Les CPU es van estancar amb quatre nuclis durant un temps considerable. Afegir traces per sobre i per sota permetia els busos directes a les CPU diagonalment oposades a mesura que els xips es convertien en 3D. Posar una CPU de quatre nuclis en una targeta, que després es connectava a un bus, va ser el següent pas lògic.

Avui en dia, cada processador conté molts nuclis amb una memòria cau compartida al xip i una memòria fora del xip i té costos d’accés a memòria variables en diferents parts de la memòria d’un servidor.

La millora de l’eficiència de l’accés a les dades és un dels principals objectius del disseny de CPU contemporani. Cada nucli de la CPU tenia una memòria cau de nivell un petit (32 KB) i una memòria cau de nivell 2 més gran (256 KB). Els diversos nuclis compartirien posteriorment una memòria cau de nivell 3 de diversos MB, la mida dels quals ha crescut considerablement amb el pas del temps.

Per evitar fallades de la memòria cau (sol·licitud de dades que no es troben a la memòria cau), es dedica molt temps a investigar a trobar el nombre adequat de memòries cau de CPU, estructures de memòria cau i algorismes corresponents. Vegeu [8] per obtenir una explicació més detallada del protocol per a la memòria cau del snoop [4] i la coherència de la memòria cau [3,5], així com les idees de disseny darrere de NUMA.

Suport de programari per a NUMA

Hi ha dues mesures d’optimització de programari que poden millorar el rendiment d’un sistema que admet l’arquitectura NUMA: afinitat de processador i col·locació de dades. Com s'explica a [19], l'afinitat del processador […] permet enllaçar i desenllaçar un procés o un fil a una sola CPU o a un interval de CPU de manera que el procés o fil només s'executarà a la CPU o CPU designades en lloc de qualsevol CPU. El terme col·locació de dades fa referència a modificacions de programari en què el codi i les dades es mantenen el més a prop possible a la memòria.

Els diferents sistemes operatius relacionats amb UNIX i UNIX admeten NUMA de les maneres següents (la llista següent està extreta de [14]):

  • Suport de Silicon Graphics IRIX per a l'arquitectura ccNUMA sobre 1240 CPU amb la sèrie de servidors Origin.
  • Microsoft Windows 7 i Windows Server 2008 R2 van afegir compatibilitat amb l'arquitectura NUMA en 64 nuclis lògics.
  • La versió 2.5 del nucli Linux ja contenia suport NUMA bàsic, que es va millorar encara més en les versions posteriors del nucli. La versió 3.8 del nucli Linux va aportar una nova base NUMA que va permetre el desenvolupament de polítiques NUMA més eficients en versions posteriors del nucli [13]. La versió 3.13 del nucli Linux va aportar nombroses polítiques que tenen com a objectiu situar un procés a prop de la memòria, juntament amb el tractament de casos, com ara que es comparteixin pàgines de memòria entre processos o l’ús de pàgines enormes i transparents; els nous paràmetres de control del sistema permeten habilitar o desactivar l'equilibri NUMA, així com la configuració de diversos paràmetres d'equilibri de memòria NUMA [15].
  • Tant Oracle com OpenSolaris modelen l'arquitectura NUMA amb la introducció de grups lògics.
  • FreeBSD ha afegit l'afinitat NUMA inicial i la configuració de la política a la versió 11.0.

Al llibre Computer Science and Technology, Proceedings of the International Conference (CST2016), Ning Cai suggereix que l’estudi de l’arquitectura NUMA es va centrar principalment en l’entorn informàtic de gamma alta i va proposar el particionament Radix (NaRP), conscient de NUMA, que optimitza el rendiment. de memòries cau compartides en nodes NUMA per accelerar les aplicacions d’intel·ligència empresarial. Com a tal, NUMA representa un punt mig entre sistemes de memòria compartida (SMP) amb uns pocs processadors [6].

NUMA i Linux

Com s'ha indicat anteriorment, el nucli Linux suporta NUMA des de la versió 2.5. Tant Debian GNU / Linux com Ubuntu ofereixen suport NUMA per a l'optimització de processos amb els dos paquets de programari numactl [16] i numad [17]. Amb l'ajut de l'ordre numactl, podeu llistar l'inventari dels nodes NUMA disponibles al vostre sistema [18]:

# numactl --hardware
disponible:2nodes(0-1)
node0cpus:0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node0mida:8157MB
node0gratuït:88MB
node1cpus:8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node1mida:8191MB
node1gratuït:5176MB
distàncies del node:
node0 1
0:10 20
1:20 10

NumaTop és una eina útil desenvolupada per Intel per controlar la localitat de memòria d'execució i analitzar processos en sistemes NUMA [10,11]. L'eina pot identificar possibles colls d'ampolla de rendiment relacionats amb NUMA i, per tant, ajudar a reequilibrar les assignacions de memòria / CPU per maximitzar el potencial d'un sistema NUMA. Vegeu [9] per obtenir una descripció més detallada.

Escenaris d’ús

Els ordinadors que admeten la tecnologia NUMA permeten que totes les CPU accedeixin directament a tota la memòria; les CPU veuen això com un únic espai d’adreces lineal. Això condueix a un ús més eficient de l’esquema d’adreçament de 64 bits, que resulta en un moviment més ràpid de les dades, una menor replicació de les dades i una programació més senzilla.

Els sistemes NUMA són força atractius per a aplicacions del servidor, com ara la mineria de dades i els sistemes de suport a la presa de decisions. A més, escriure aplicacions per a jocs i programari d'alt rendiment es fa molt més fàcil amb aquesta arquitectura.

Conclusió

En conclusió, l’arquitectura NUMA tracta l’escalabilitat, que és un dels seus principals beneficis. En una CPU NUMA, un node tindrà un ample de banda superior o una latència inferior per accedir a la memòria del mateix node (per exemple, la CPU local sol·licita accés a la memòria al mateix temps que l'accés remot; la prioritat és a la CPU local). Això millorarà dràsticament el rendiment de memòria si les dades es localitzen en processos específics (i, per tant, en processadors). Els desavantatges són els majors costos de moure dades d’un processador a un altre. Mentre aquest cas no passi massa sovint, un sistema NUMA superarà els sistemes amb una arquitectura més tradicional.

Enllaços i referències

  1. Compareu NVIDIA Tesla amb Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Compareu NVIDIA DGX-1 amb Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Coherència de memòria cau, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence
  4. Buscant bus, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping
  5. Protocols de coherència de memòria cau en sistemes multiprocessador, Geeks per a geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Informàtica i tecnologia - Actes de la conferència internacional (CST2016), Ning Cai (ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet i Marco Cesati: Comprensió de l’arquitectura NUMA a Comprensió del nucli Linux, 3a edició, O'Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann: NUMA Deep Dive Part 1: From UMA to NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King: NumaTop: una eina de control del sistema NUMA, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Paquet numatop per a Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias: Comprendre l'accés a la memòria no uniforme / les arquitectures (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Notícies del nucli Linux per al nucli 3.8, https://kernelnewbies.org/Linux_3.8
  14. Accés a memòria no uniforme (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Documentació de gestió de memòria Linux, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Paquet numactl per a Debian GNU / Linux, https://packages.debian.org/sid/admin/numactl
  17. Paquet numad per a Debian GNU / Linux, https://packages.debian.org/buster/numad
  18. Com es pot saber si la configuració NUMA està activada o desactivada ?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Afinitat de processador, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

Gràcies

Els autors volen agrair a Gerold Rupprecht el seu suport durant la preparació d’aquest article.

Sobre els autors

Plaxedes Nehanda és una persona versàtil i autònoma que porta molts barrets, entre ells, un planificador d’esdeveniments, un assistent virtual, un transcriptor i un àvid investigador, amb seu a Johannesburg, Sud-àfrica.

El príncep K. Nehanda és enginyer d’instrumentació i control (metrologia) a Paeflow Metering a Harare, Zimbabwe.

Frank Hofmann treballa a la carretera, preferentment des de Berlín (Alemanya), Ginebra (Suïssa) i Ciutat del Cap (Sud-àfrica), com a desenvolupador, formador i autor de revistes com Linux-User i Linux Magazine. També és coautor del llibre de gestió de paquets de Debian ( http://www.dpmb.org ).