2 June 2023

¿Que es NUMA?

Cada vez estamos más acostumbrados a utilizar una computadora que puede tener dos o más procesadores, sin percatarnos de ello. Un procesador (CPU) tiene embebidos varios núcleos (cores) y cada núcleo puede tener hasta dos hilos. Un hilo es la unidad de cómputo mínima. En estos tiempos, incluso los celulares pueden tener varios hilos ejecutando tareas en paralelo. Y en los últimos años casi todo el software (incluyendo el de oficina) se desarrolla para ejecutarse en ambientes multihilo (paralelos).

Desde el punto de vista comercial, el mercado más importante de equipos con más de dos procesadores está en el segmento de los servidores. Sin embargo, en un futuro muy cercano los celulares, las tablets o cualquier dispositivo tendrán más de un procesador.

A la arquitectura (configuración) de dos o más procesadores (Figura 1) se le llama NUMA (Non-Uniform Memory Access). En este contexto, a cada procesador (o socket) se le denomina NUMA node o “encapsulado”. El termino socket es usado por que es el espacio físico en la motherboard que recibe el CPU.

Generalmente, pensamos que si compramos un equipo de cómputo con dos o más CPUs estos están pegados. Es decir, que los hilos de todos los procesadores los puedo sumar y utilizarlos indiscriminadamente. Y esto es incorrecto, los CPUs se ubican en sockets separados. Y lo más importante, se interconectan por medio de un canal de alta velocidad para simular que están pegados.

Por ejemplo, la figura 1 muestra como se ve una configuración típica multiprocesador de dos sockets (o procesadores). Podemos comenzar notando que cada CPU tiene su espacio de memoria RAM asignada. Este detalle es muy importante, porque nos indica que un hilo del CPU1 tiene que usar la interconexión (cuello de botella) para acceder a un dato que estuviera alojado en el espacio de memoria del CPU2. Es decir, cada procesador tiene sus propios canales de memoria y no usarlos correctamente degrada el rendimiento de la máquina.

numa.png
Figura 1. Arquitectura NUMA para 2 procesadores. Observar que el CPU1 tiene un acceso remoto al espacio de memoria del CPU2. Esto puede derivar en un cuello de botella para aplicaciones computacionales exahustivas.

Y este es el objetivo de este artículo, destacar la importancia de conocer la arquitectura de conexión en tus procesadores. Esta consideración te permitirá ejecutar tareas lo más óptimo posible. Es decir, evitar los cuellos de botella de la interconexión entre CPUs.

En este sentido, una regla básica es: ejecutar tareas en la memoria física de cada hilo. Es importante señalar que por defecto los Sistemas Operativos no siempre elijen donde posicionar los datos en la RAM para evitar acceder a la interconexión. Sin embargo, en Linux existen comandos como: numactl ó hwloc, que permiten especificar la utilización de los hilos en su espacio de memoria. En artículos siguientes mostraré ejemplos prácticos.

Cada fabricante (AMD®, INTEL®, QUALCOM®, etc.) tiene su tecnología de interconexión. Por ejemplo, actualmente INTEL® utiliza una tecnología que se llama QPI. Por otro lado, AMD utiliza una tecnología que se nombró Infinity Fabric. Los canales de interconexión tienen un ancho de banda o velocidad de transferencia asociado. Los fabricantes pueden medir el rendimiento de las interconexiones en unidades de GBi/segundo o transferencias/segundo.

Como saben yo no soy fan de ningún fabricante. Cada fabricante tiene sus pros y contras. Sin embargo, si que es importante tomar en cuenta estas consideraciones al momento de una compra o del despliegue de un proyecto.

El diseño de las Motherboards es determinante para explotar la tecnología NUMA. En el ejemplo que abordamos en la Figura 1 se consideran dos CPUs. Sin embargo, existen configuraciones de dos, cuatro y hasta ocho CPUs conectados en una sola Motherboard.

Las interconexiones en una configuración de cuatro procesadores son mas complejas. Los CPUs pueden estar interconectados de las siguientes maneras: todos contra todos, en anillo, nones y pares, etc. Y ya no hablemos de las interconexiones de ocho procesadores, que son mucho más complejas.

Este tipo de arquitecturas más avanzadas se venden en diferentes mercados. Por ejemplo, he configurado equipos de ocho procesadores para servir bases de datos críticas en el sector privado. En otras áreas, por ejemplo cómputo científico, he utilizado servidores de hasta cuatro procesadores (con 120 hilos) para realizar cálculos de estructura electrónica para diseño de moléculas o fármacos de novo.

tags: Computación, Tecnología