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]):
- Compatibilidad con Silicon Graphics IRIX para la arquitectura ccNUMA sobre CPU 1240 con la serie de servidores Origin.
- Microsoft Windows 7 y Windows Server 2008 R2 agregaron soporte para la arquitectura NUMA en 64 núcleos lógicos.
- Versión 2.5 del kernel de Linux ya contenía soporte básico de NUMA, que se mejoró en versiones posteriores del kernel. Versión 3.8 del kernel de Linux trajo una nueva base NUMA que permitió el desarrollo de políticas NUMA más eficientes en versiones posteriores del kernel [13]. Versión 3.13 del kernel de Linux trajo numerosas políticas que apuntan a poner un proceso cerca de su memoria, junto con el manejo de casos, como tener páginas de memoria compartidas entre procesos, o el uso de páginas enormes transparentes; Los nuevos ajustes de control del sistema permiten habilitar o deshabilitar el equilibrio NUMA, así como la configuración de varios parámetros de equilibrio de la memoria NUMA [15].
- Tanto Oracle como OpenSolaris modelan la arquitectura NUMA con la introducción de grupos lógicos.
- FreeBSD agregó la configuración inicial de políticas y afinidad de NUMA en la versión 11.0.
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 --hardwaredisponible: 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
- Comparar NVIDIA Tesla vs. Instinto Radeon, https: // www.estación central.com / products / comparisons / nvidia-tesla_vs_radeon-instinct
- Comparar NVIDIA DGX-1 vs. Instinto Radeon, https: // www.estación central.com / products / comparisons / nvidia-dgx-1_vs_radeon-instinct
- Coherencia de caché, Wikipedia, https: // en.wikipedia.org / wiki / Cache_coherence
- Bus snooping, Wikipedia, https: // en.wikipedia.org / wiki / Bus_snooping
- Protocolos de coherencia de caché en sistemas multiprocesador, Geeks para geeks, https: // www.geeksforgeeks.org / cache-coherence-protocol-in-multiprocessor-system /
- Informática y tecnología - Actas de la Conferencia Internacional (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
- 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 /
- Frank Dennemann: NUMA Deep Dive Parte 1: De UMA a NUMA, https: // frankdenneman.nl / 2016/07/07 / numa-deep-dive-part-1-uma-numa /
- Colin Ian King: NumaTop: una herramienta de monitoreo del sistema NUMA, http: // smackerelofopinion.blogspot.com / 2015/09 / numatop-numa-system-monitoring-tool.html
- Numatop, https: // github.com / intel / numatop
- Paquete numatop para Debian GNU / Linux, https: // paquetes.debian.org / buster / numatop
- 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 /
- Novedades del kernel de Linux para el kernel 3.8, https: // kernelnewbies.org / Linux_3.8
- Acceso a memoria no uniforme (NUMA), Wikipedia, https: // en.wikipedia.org / wiki / Non-uniform_memory_access
- Documentación de administración de memoria de Linux, NUMA, https: // www.núcleo.org / doc / html / latest / vm / numa.html
- Paquete numactl para Debian GNU / Linux, https: // paquetes.debian.org / sid / admin / numactl
- Paquete numad para Debian GNU / Linux, https: // paquetes.debian.org / buster / numad
- 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 /
- 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).