NUMA

Comprensión de la arquitectura NUMA

Comprensión de la arquitectura NUMA
Diseñar computadoras siempre es un compromiso. Los cuatro componentes básicos de una computadora - la unidad central de procesamiento (CPU) o procesador, la memoria, el almacenamiento y la placa para conectar los componentes (sistema de bus de E / S) - se combinan de la manera más inteligente posible para crear una máquina que es rentable y potente. El proceso de diseño implica principalmente una optimización hacia los procesadores (coprocesadores, configuración de múltiples núcleos), el tipo y la cantidad de memoria, el almacenamiento (discos, sistema de archivos), así como el precio.La idea detrás de los coprocesadores y la arquitectura de múltiples núcleos es distribuir las operaciones a tantas unidades informáticas individuales en el menor espacio posible y hacer que la ejecución en paralelo de las instrucciones informáticas sea más accesible y asequible. En términos de memoria, es una cuestión de la cantidad o tamaño que puede abordar la unidad de computación individual, y qué tipo de memoria funciona con la menor latencia posible. El almacenamiento pertenece a la memoria externa y su rendimiento depende del tipo de disco, el sistema de archivos en uso, el subproceso, el protocolo de transferencia, la estructura de comunicación y la cantidad de dispositivos de memoria conectados.

El diseño de los buses de E / S representa las arterias de la computadora y determina significativamente cuánto y qué tan rápido se pueden intercambiar datos entre los componentes individuales enumerados anteriormente. La categoría superior está liderada por componentes utilizados en el campo de la informática de alto rendimiento (HPC). A mediados de 2020, entre los representantes contemporáneos de HPC se encuentran Nvidia Tesla y DGX, Radeon Instinct y los productos aceleradores basados ​​en GPU Intel Xeon Phi (consulte [1,2] para ver comparaciones de productos).

Entendiendo NUMA

El acceso a memoria no uniforme (NUMA) describe una arquitectura de memoria compartida utilizada en los sistemas de multiprocesamiento contemporáneos. NUMA es un sistema informático compuesto por varios nodos únicos de tal manera que la memoria agregada se comparte entre todos los nodos: “a cada CPU se le asigna su propia memoria local y puede acceder a la memoria de otras CPU en el sistema” [12,7].

NUMA es un sistema inteligente que se utiliza para conectar múltiples unidades de procesamiento central (CPU) a cualquier cantidad de memoria de computadora disponible en la computadora. Los nodos NUMA individuales están conectados a través de una red escalable (bus de E / S) de modo que una CPU puede acceder sistemáticamente a la memoria asociada con otros nodos NUMA.

La memoria local es la memoria que utiliza la CPU en un nodo NUMA en particular. La memoria externa o remota es la memoria que una CPU está tomando de otro nodo NUMA. El término relación NUMA describe la relación entre el costo de acceder a la memoria externa y el costo de acceder a la memoria local. Cuanto mayor sea la relación, mayor será el costo y, por lo tanto, más tiempo se necesitará para acceder a la memoria.

Sin embargo, lleva más tiempo que cuando esa CPU accede a su propia memoria local. El acceso a la memoria local es una gran ventaja, ya que combina baja latencia con alto ancho de banda. Por el contrario, acceder a la memoria que pertenece a cualquier otra CPU tiene una mayor latencia y un menor rendimiento de ancho de banda.

Mirando hacia atrás: evolución de los multiprocesadores de memoria compartida

Frank Dennemann [8] afirma que las arquitecturas de sistemas modernos no permiten un acceso verdaderamente uniforme a la memoria (UMA), a pesar de que estos sistemas están diseñados específicamente para ese propósito. Simplemente hablando, la idea de la computación paralela era tener un grupo de procesadores que cooperaran para computar una tarea dada, acelerando así una computación secuencial clásica.

Como explicó Frank Dennemann [8], a principios de la década de 1970, "la necesidad de sistemas que pudieran dar servicio a múltiples operaciones de usuarios concurrentes y la generación excesiva de datos se convirtió en la corriente principal" con la introducción de sistemas de bases de datos relacionales. “A pesar de la impresionante tasa de rendimiento de un procesador único, los sistemas multiprocesador estaban mejor equipados para manejar esta carga de trabajo. Para proporcionar un sistema rentable, el espacio de direcciones de memoria compartida se convirtió en el foco de la investigación. Al principio, se defendieron los sistemas que usaban un interruptor de barra cruzada, sin embargo, con esta complejidad de diseño escalada junto con el aumento de procesadores, lo que hizo que el sistema basado en bus fuera más atractivo. Los procesadores en un sistema de bus [pueden] acceder a todo el espacio de memoria enviando solicitudes en el bus, una forma muy rentable de utilizar la memoria disponible de la manera más óptima posible."

Sin embargo, los sistemas informáticos basados ​​en bus vienen con un cuello de botella: la cantidad limitada de ancho de banda que conduce a problemas de escalabilidad. Cuantas más CPU se agreguen al sistema, menos ancho de banda por nodo disponible. Además, cuantas más CPU se agreguen, más largo será el bus y, como resultado, mayor será la latencia.

La mayoría de las CPU se construyeron en un plano bidimensional. Las CPU también debían tener controladores de memoria integrados agregados. La solución simple de tener cuatro buses de memoria (arriba, abajo, izquierda, derecha) para cada núcleo de la CPU permitió el ancho de banda disponible completo, pero eso solo llega hasta cierto punto. Las CPU se estancaron con cuatro núcleos durante un tiempo considerable. Agregar trazas arriba y abajo permitió buses directos a través de las CPU opuestas diagonalmente a medida que los chips se volvían 3D. Colocar una CPU de cuatro núcleos en una tarjeta, que luego se conecta a un bus, fue el siguiente paso lógico.

Hoy en día, cada procesador contiene muchos núcleos con una memoria caché en chip compartida y una memoria fuera de chip, y tiene costos variables de acceso a la memoria en diferentes partes de la memoria dentro de un servidor.

Mejorar la eficiencia del acceso a los datos es uno de los principales objetivos del diseño de CPU contemporáneo. Cada núcleo de CPU estaba dotado con una caché de nivel uno pequeña (32 KB) y una caché de nivel 2 más grande (256 KB). Los distintos núcleos compartirían más tarde una caché de nivel 3 de varios MB, cuyo tamaño ha crecido considerablemente con el tiempo.

Para evitar fallas de caché, solicitando datos que no están en el caché, se dedica mucho tiempo de investigación a encontrar la cantidad correcta de cachés de CPU, estructuras de almacenamiento en caché y algoritmos correspondientes. Consulte [8] para obtener una explicación más detallada del protocolo para almacenar en caché snoop [4] y coherencia de caché [3,5], así como las ideas de diseño detrás de NUMA.

Soporte de software para NUMA

Hay dos medidas de optimización de software que pueden mejorar el rendimiento de un sistema compatible con la arquitectura NUMA: la afinidad del procesador y la ubicación de los datos. Como se explica en [19], “la afinidad del procesador […] permite la vinculación y desvinculación de un proceso o subproceso a una sola CPU, o un rango de CPU para que el proceso o subproceso se ejecute solo en la CPU o CPU designadas. que cualquier CPU."El término" ubicación de datos "se refiere a modificaciones de software en las que el código y los datos se mantienen lo más cerca posible en la memoria.

Los diferentes sistemas operativos UNIX y relacionados con UNIX admiten NUMA de las siguientes maneras (la lista a continuación se tomó de [14]):

En el libro "Computer Science and Technology, Proceedings of the International Conference (CST2016)", Ning Cai sugiere que el estudio de la arquitectura NUMA se centró principalmente en el entorno informático de gama alta y propuso el Particionamiento Radix (NaRP) compatible con NUMA, que optimiza el rendimiento de las cachés compartidas en los nodos NUMA para acelerar las aplicaciones de inteligencia empresarial. Como tal, NUMA representa un término medio entre los sistemas de memoria compartida (SMP) con algunos procesadores [6].

NUMA y Linux

Como se indicó anteriormente, el kernel de Linux es compatible con NUMA desde la versión 2.5. Tanto Debian GNU / Linux como Ubuntu ofrecen soporte NUMA para la optimización de procesos con los dos paquetes de software numactl [16] y numad [17]. Con la ayuda del comando numactl, puede enumerar el inventario de nodos NUMA disponibles en su sistema [18]:

# numactl --hardware
disponible: 2 nodos (0-1)
nodo 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
tamaño del nodo 0: 8157 MB
nodo 0 libre: 88 MB
nodo 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
tamaño del nodo 1: 8191 MB
nodo 1 libre: 5176 MB
distancias de nodo:
nodo 0 1
0: 10 20
1:20 10

NumaTop es una herramienta útil desarrollada por Intel para monitorear la localidad de memoria en tiempo de ejecución y analizar procesos en sistemas NUMA [10,11]. La herramienta puede identificar posibles cuellos de botella de rendimiento relacionados con NUMA y, por lo tanto, ayudar a reequilibrar las asignaciones de memoria / CPU para maximizar el potencial de un sistema NUMA. Consulte [9] para obtener una descripción más detallada.

Escenarios de uso

Las computadoras que admiten la tecnología NUMA permiten que todas las CPU accedan a toda la memoria directamente; las CPU ven esto como un único espacio de direcciones lineal. Esto conduce a un uso más eficiente del esquema de direccionamiento de 64 bits, lo que resulta en un movimiento de datos más rápido, menos replicación de datos y una programación más sencilla.

Los sistemas NUMA son bastante atractivos para aplicaciones del lado del servidor, como la minería de datos y los sistemas de apoyo a la toma de decisiones. Además, escribir aplicaciones para juegos y software de alto rendimiento se vuelve mucho más fácil con esta arquitectura.

Conclusión

En conclusión, la arquitectura NUMA aborda la escalabilidad, que es uno de sus principales beneficios. En una CPU NUMA, un nodo tendrá un mayor ancho de banda o menor latencia para acceder a la memoria en ese mismo nodo (p.gramo., la CPU local solicita acceso a la memoria al mismo tiempo que el acceso remoto; la prioridad está en la CPU local). Esto mejorará drásticamente el rendimiento de la memoria si los datos se localizan en procesos específicos (y por lo tanto procesadores). Las desventajas son los mayores costos de mover datos de un procesador a otro. Siempre que este caso no ocurra con demasiada frecuencia, un sistema NUMA superará a los sistemas con una arquitectura más tradicional.

Enlaces y referencias

  1. Comparar NVIDIA Tesla vs. Instinto Radeon, https: // www.estación central.com / products / comparisons / nvidia-tesla_vs_radeon-instinct
  2. Comparar NVIDIA DGX-1 vs. Instinto Radeon, https: // www.estación central.com / products / comparisons / nvidia-dgx-1_vs_radeon-instinct
  3. Coherencia de caché, Wikipedia, https: // en.wikipedia.org / wiki / Cache_coherence
  4. Bus snooping, Wikipedia, https: // en.wikipedia.org / wiki / Bus_snooping
  5. Protocolos de coherencia de caché en sistemas multiprocesador, Geeks para geeks, https: // www.geeksforgeeks.org / cache-coherence-protocol-in-multiprocessor-system /
  6. Informática y tecnología - Actas de la Conferencia Internacional (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Daniel P. Bovet y Marco Cesati: comprensión de la arquitectura NUMA en la comprensión del kernel de Linux, tercera edición, O'Reilly, https: // www.oreilly.com / library / view / entendiendo-the-linux / 0596005652 /
  8. Frank Dennemann: NUMA Deep Dive Parte 1: De UMA a NUMA, https: // frankdenneman.nl / 2016/07/07 / numa-deep-dive-part-1-uma-numa /
  9. Colin Ian King: NumaTop: una herramienta de monitoreo del sistema NUMA, http: // smackerelofopinion.blogspot.com / 2015/09 / numatop-numa-system-monitoring-tool.html
  10. Numatop, https: // github.com / intel / numatop
  11. Paquete numatop para Debian GNU / Linux, https: // paquetes.debian.org / buster / numatop
  12. Jonathan Kehayias: Comprensión de arquitecturas / accesos a memoria no uniformes (NUMA), https: // www.sqlskills.com / blogs / jonathan / comprensión-acceso-memoria-no-uniforme-arquitectura-numa /
  13. Novedades del kernel de Linux para el kernel 3.8, https: // kernelnewbies.org / Linux_3.8
  14. Acceso a memoria no uniforme (NUMA), Wikipedia, https: // en.wikipedia.org / wiki / Non-uniform_memory_access
  15. Documentación de administración de memoria de Linux, NUMA, https: // www.núcleo.org / doc / html / latest / vm / numa.html
  16. Paquete numactl para Debian GNU / Linux, https: // paquetes.debian.org / sid / admin / numactl
  17. Paquete numad para Debian GNU / Linux, https: // paquetes.debian.org / buster / numad
  18. Cómo saber si la configuración de NUMA está habilitada o deshabilitada?, https: // www.el diario friki.com / centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled /
  19. Afinidad del procesador, Wikipedia, https: // en.wikipedia.org / wiki / Processor_affinity

Gracias

Los autores desean agradecer a Gerold Rupprecht por su apoyo durante la preparación de este artículo.

Sobre los autores

Plaxedes Nehanda es una persona polivalente, autodirigida y versátil que tiene muchos papeles, entre ellos, un planificador de eventos, un asistente virtual, un transcriptor, así como un ávido investigador, con sede en Johannesburgo, Sudáfrica.

Príncipe K. Nehanda es ingeniera de instrumentación y control (metrología) en Paeflow Metering en Harare, Zimbabwe.

Frank Hofmann trabaja en la carretera, preferiblemente desde Berlín (Alemania), Ginebra (Suiza) y Ciudad del Cabo (Sudáfrica), como desarrollador, capacitador y autor de revistas como Linux-User y Linux Magazine. También es coautor del libro de gestión de paquetes Debian (http: // www.dpmb.org).

Cómo invertir la dirección de desplazamiento del mouse y los paneles táctiles en Windows 10
Ratón y Panel táctils no solo facilitan la informática, sino que también hacen que sea más eficiente y requieran menos tiempo. No podemos imaginar una...
Cómo cambiar el tamaño, el color y el esquema del puntero del mouse y del cursor en Windows 10
El puntero y el cursor del mouse en Windows 10 son aspectos muy importantes del sistema operativo. Esto también se puede decir de otros sistemas opera...
Motores de juegos gratuitos y de código abierto para desarrollar juegos de Linux
Este artículo cubrirá una lista de motores de juegos de código abierto y gratuitos que se pueden usar para desarrollar juegos 2D y 3D en Linux. Existe...