
El acceso a memoria no uniforme ( NUMA ) es un diseño de memoria de computadora utilizado en multiprocesamiento , donde el tiempo de acceso a la memoria depende de la ubicación de la memoria con respecto al procesador. Bajo NUMA, un procesador puede acceder a su propia memoria local más rápido que a la memoria no local (memoria local a otro procesador o memoria compartida entre procesadores). [ 1 ] NUMA es beneficioso para cargas de trabajo con alta localidad de referencia de memoria y baja contención de bloqueo , porque un procesador puede operar en un subconjunto de memoria mayoritariamente o totalmente dentro de su propio nodo de caché, reduciendo el tráfico en el bus de memoria. [ 2 ]
Las arquitecturas NUMA siguen lógicamente la escalabilidad de las arquitecturas de multiprocesamiento simétrico (SMP). Fueron desarrolladas comercialmente durante la década de 1990 por Unisys , Convex Computer (más tarde Hewlett-Packard ), Honeywell Information Systems Italy (HISI) (más tarde Groupe Bull ), Silicon Graphics (más tarde Silicon Graphics International ), Sequent Computer Systems (más tarde IBM ), Data General (más tarde EMC , ahora Dell Technologies ), Digital (más tarde Compaq , luego HP , ahora HPE ) e ICL . Las técnicas desarrolladas por estas empresas se incorporaron posteriormente a diversos sistemas operativos tipo Unix y, en cierta medida, a Windows NT .
La primera implementación comercial de un sistema Unix basado en NUMA fue la familia de servidores Symmetrical Multi Processing XPS-100, diseñada por Dan Gielan de VAST Corporation para Honeywell Information Systems Italy.
Descripción general

Las CPU modernas operan considerablemente más rápido que la memoria principal que utilizan. En los inicios de la informática y el procesamiento de datos, la CPU generalmente funcionaba más lento que su propia memoria. El rendimiento de los procesadores y la memoria se igualó en la década de 1960 con la llegada de las primeras supercomputadoras . Desde entonces, las CPU se han visto cada vez más con escasez de datos y obligadas a detenerse para esperar a que lleguen datos de la memoria (por ejemplo, en las computadoras basadas en la arquitectura Von Neumann , véase el cuello de botella de Von Neumann ). Muchos diseños de supercomputadoras de las décadas de 1980 y 1990 se centraron en proporcionar acceso a memoria de alta velocidad en lugar de procesadores más rápidos, lo que permitió a las computadoras trabajar con grandes conjuntos de datos a velocidades que otros sistemas no podían alcanzar.
Limitar el número de accesos a la memoria fue clave para obtener un alto rendimiento de un ordenador moderno. Para los procesadores convencionales, esto implicaba instalar una cantidad cada vez mayor de memoria caché de alta velocidad y utilizar algoritmos cada vez más sofisticados para evitar fallos de caché . Sin embargo, el drástico aumento del tamaño tanto de los sistemas operativos como de las aplicaciones que se ejecutan en ellos ha superado en general estas mejoras en el procesamiento de la caché. Los sistemas multiprocesador sin NUMA agravan considerablemente el problema. Ahora, un sistema puede dejar sin recursos a varios procesadores simultáneamente, principalmente porque solo un procesador puede acceder a la memoria del ordenador a la vez. [ 3 ]
NUMA intenta solucionar este problema proporcionando memoria independiente para cada procesador, evitando así la pérdida de rendimiento que se produce cuando varios procesadores intentan acceder a la misma memoria. Para problemas que implican datos dispersos (comunes en servidores y aplicaciones similares), NUMA puede mejorar el rendimiento con respecto a una única memoria compartida en un factor aproximadamente igual al número de procesadores (o bancos de memoria independientes). [ 4 ] Otro enfoque para abordar este problema es la arquitectura de memoria multicanal , en la que un aumento lineal en el número de canales de memoria incrementa linealmente la concurrencia de acceso a la memoria. [ 5 ]
Por supuesto, no todos los datos se limitan a una sola tarea, lo que significa que más de un procesador puede requerir los mismos datos. Para gestionar estos casos, los sistemas NUMA incluyen hardware o software adicional para transferir datos entre bancos de memoria. Esta operación ralentiza los procesadores conectados a dichos bancos, por lo que el aumento general de velocidad debido a NUMA depende en gran medida de la naturaleza de las tareas en ejecución. [ 4 ]
Implementaciones
AMD implementó NUMA con su procesador Opteron (2003), utilizando HyperTransport . Intel anunció la compatibilidad con NUMA para sus servidores x86 e Itanium a finales de 2007 con sus CPU Nehalem y Tukwila . [ 6 ] Ambas familias de CPU de Intel comparten un chipset común ; la interconexión se llama Intel QuickPath Interconnect (QPI), que proporciona un ancho de banda extremadamente alto para permitir una alta escalabilidad en la placa y fue reemplazada por una nueva versión llamada Intel UltraPath Interconnect con el lanzamiento de Skylake (2017). [ 7 ]
NUMA coherente en caché (ccNUMA)

Casi todas las arquitecturas de CPU utilizan una pequeña cantidad de memoria no compartida muy rápida, conocida como caché , para aprovechar la localidad de referencia en los accesos a memoria. Con NUMA, mantener la coherencia de la caché en memoria compartida conlleva una sobrecarga significativa. Si bien son más sencillos de diseñar y construir, los sistemas NUMA sin coherencia de caché se vuelven prohibitivamente complejos de programar en el modelo de programación estándar de la arquitectura von Neumann . [ 8 ]
Normalmente, ccNUMA utiliza la comunicación entre procesadores de los controladores de caché para mantener una imagen de memoria consistente cuando más de una caché almacena la misma ubicación de memoria. Por esta razón, ccNUMA puede tener un rendimiento deficiente cuando varios procesadores intentan acceder a la misma área de memoria en rápida sucesión. La compatibilidad con NUMA en los sistemas operativos busca reducir la frecuencia de este tipo de acceso mediante la asignación de procesadores y memoria de forma compatible con NUMA y evitando algoritmos de planificación y bloqueo que hacen necesarios los accesos incompatibles con NUMA. [ 9 ]
Como alternativa, los protocolos de coherencia de caché, como el protocolo MESIF, intentan reducir la comunicación necesaria para mantener dicha coherencia. La Interfaz Coherente Escalable (SCI) es un estándar IEEE que define un protocolo de coherencia de caché basado en directorios para evitar las limitaciones de escalabilidad presentes en sistemas multiprocesador anteriores. Por ejemplo, SCI se utiliza como base para la tecnología NumaConnect. [ 10 ] [ 11 ]
Computación NUMA frente a computación en clúster
NUMA puede considerarse una forma de computación en clúster estrechamente acoplada . La adición de paginación de memoria virtual a una arquitectura de clúster permite la implementación de NUMA completamente en software. Sin embargo, la latencia entre nodos de NUMA basada en software sigue siendo varios órdenes de magnitud mayor (más lenta) que la de NUMA basada en hardware. [ 2 ]
Soporte de software
Dado que NUMA influye en gran medida en el rendimiento del acceso a la memoria, se necesitan ciertas optimizaciones de software para permitir la programación de hilos y procesos cerca de sus datos en memoria.
- Microsoft Windows 7 y Windows Server 2008 R2 agregaron soporte para la arquitectura NUMA sobre 64 núcleos lógicos. [ 12 ]
- Java 7 añadió soporte para el asignador de memoria y el recolector de basura conscientes de NUMA . [ 13 ]
- Núcleo de Linux :
- La versión 2.5 proporcionó un soporte NUMA básico, [ 14 ] que se mejoró aún más en versiones posteriores del kernel.
- La versión 3.8 del kernel de Linux introdujo una nueva base NUMA que permitió el desarrollo de políticas NUMA más eficientes en versiones posteriores del kernel. [ 15 ] [ 16 ]
- La versión 3.13 del kernel de Linux introdujo numerosas políticas destinadas a ubicar un proceso cerca de su memoria, junto con el manejo de casos como páginas de memoria compartidas entre procesos o el uso de páginas enormes transparentes ; las nuevas configuraciones de sysctl permiten habilitar o deshabilitar el balanceo NUMA, así como la configuración de varios parámetros de balanceo de memoria NUMA. [ 17 ] [ 18 ] [ 19 ]
- OpenSolaris modela la arquitectura NUMA con lgroups.
- FreeBSD añadió soporte para la arquitectura NUMA en la versión 9.0. [ 20 ]
- Silicon Graphics IRIX (descontinuado desde 2013) ofrece soporte para la arquitectura ccNUMA con procesadores de más de 1240 MHz en la serie de servidores Origin.
Soporte de hardware
A partir de 2011,Los sistemas ccNUMA son sistemas multiprocesador basados en el procesador AMD Opteron , que puede implementarse sin lógica externa, y el procesador Intel Itanium , que requiere que el chipset sea compatible con NUMA. Ejemplos de chipsets compatibles con ccNUMA son el SGI Shub (Super hub), el Intel E8870, el HP sx2000 (utilizado en los servidores Integrity y Superdome) y los que se encuentran en los sistemas NEC basados en Itanium. Los primeros sistemas ccNUMA, como los de Silicon Graphics, se basaban en procesadores MIPS y en el procesador DEC Alpha 21364 (EV7).
Véase también
- Arquitectura de memoria solo caché (COMA)
- Latencia CAS : Retraso entre la orden de lectura de datos y la disponibilidad de los datos en la memoria RAM del ordenador.
- HiperDispatch
- Arquitectura nodal : serie de ordenadores de la empresa británica ICL Pages que muestran breves descripciones de los destinos de redireccionamiento.
- Espacio de direcciones global particionado : paradigma del modelo de programación paralela en informática.
- Memoria de bloc de notas (SPM)
- Acceso uniforme a memoria (UMA)
Referencias
- ↑ Este artículo se basa en material tomado de Non-uniform+memory+access en el Free On-line Dictionary of Computing antes del 1 de noviembre de 2008 e incorporado bajo los términos de "relicencia" de la GFDL , versión 1.3 o posterior.
- 1 2 Manchanda, Nakul; Anand, Karan (2010-05-04). "Acceso a memoria no uniforme (NUMA)" (PDF) . Universidad de Nueva York. Archivado del original (PDF) el 28-12-2013 . Recuperado el 27-01-2014 .
- ↑ Serguéi Blagodurov; Serguéi Zhuravlev; Mohammad Dashti; Alexandra Fedorov (2 de mayo de 2011). "Un caso para la gestión de contiendas compatible con NUMA en sistemas multinúcleo" (PDF) . Universidad Simon Fraser . Consultado el 27 de enero de 2014 .
- 1 2 Zoltan Majo; Thomas R. Gross (2011). "Rendimiento del sistema de memoria en un multiprocesador multinúcleo NUMA" (PDF) . ACM. Archivado del original (PDF) el 12 de junio de 2013. Recuperado el 27 de enero de 2014 .
- ↑ "Documento técnico sobre la arquitectura de memoria DDR de doble canal de Intel" (PDF) (Rev. 1.0 ed.). Infineon Technologies North America y Kingston Technology. Septiembre de 2003. Archivado del original (PDF, 1021 KB ) el 29 de septiembre de 2011. Consultado el 6 de septiembre de 2007 .
- ↑ "Arquitectura Intel QuickPath [ Documento técnico ] " (PDF) . Intel Corp. 2008. Consultado el 28 de abril de 2026 .
- ↑ "Gelsinger habla sobre Intel y el rápido ritmo tecnológico de la industria de alta tecnología" (Comunicado de prensa). Intel Corporation. 18 de septiembre de 2007. Consultado el 29 de marzo de 2025 .
- ↑ "ccNUMA: Acceso a memoria no uniforme con coherencia de caché" . 2014.Archivado el 5 de mayo de 2014 en Wayback Machine .
- ↑ Per Stenstromt; Truman Joe; Anoop Gupta (2002). "Evaluación comparativa del rendimiento de las arquitecturas NUMA y COMA con coherencia de caché" (PDF) . ACM . Consultado el 27 de enero de 2014 .
- ↑ Gustavson, David B. (septiembre de 1991). "The Scalable Coherent Interface and Related Standards Projects" (PDF) . Publicación SLAC 5656. Centro del Acelerador Lineal de Stanford . Archivado (PDF) del original el 9 de octubre de 2022. Consultado el 27 de enero de 2014 .
- ↑ "El NumaChip permite una memoria compartida de bajo costo con coherencia de caché" . Numascale.com . Archivado del original el 22 de enero de 2014. Consultado el 27 de enero de 2014 .
- ↑ Karl-Bridge-Microsoft. "Soporte para NUMA - Aplicaciones Win32" . learn.microsoft.com . Consultado el 28 de abril de 2026 .
- ↑ Mejoras de rendimiento de la máquina virtual Java HotSpot
- ↑ "Esfuerzo de escalabilidad de Linux: Página principal del grupo NUMA" . SourceForge.net . 2002-11-20 . Consultado el 2014-02-06 .
- ↑ "Núcleo de Linux 3.8, Sección 1.8. Balanceo automático de NUMA" . kernelnewbies.org . 8 de febrero de 2013. Consultado el 6 de febrero de 2014 .
- ↑ Jonathan Corbet (14 de noviembre de 2012). "NUMA con prisa" . LWN.net . Consultado el 6 de febrero de 2014 .
- ↑ "Núcleo de Linux 3.13, Sección 1.6. Rendimiento mejorado en sistemas NUMA" . kernelnewbies.org . 19 de enero de 2014. Consultado el 6 de febrero de 2014 .
- ↑ "Documentación del kernel de Linux: Documentation/sysctl/kernel.txt" . kernel.org . Consultado el 6 de febrero de 2014 .
- ↑ Jonathan Corbet (1 de octubre de 2013). "Avances en la programación de NUMA" . LWN.net . Consultado el 6 de febrero de 2014 .
- ↑ "numa(4)" . www.freebsd.org . Consultado el 3 de diciembre de 2020 .
Enlaces externos
- Más vídeos relacionados con los sistemas EV7: CPU, E/S, etc.
- Intel Tukwila
- Explicación de Intel QPI (CSI)
- Memoria de computadora
- Computación paralela