De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda
La placa base de una estación de trabajo HP Z820 con dos zócalos de CPU, cada uno con su propio conjunto de ocho ranuras DIMM que rodean el zócalo.

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 en relación con el procesador. Bajo NUMA, un procesador puede acceder a su propia memoria local más rápido que la memoria no local (memoria local a otro procesador o memoria compartida entre procesadores). Los beneficios de NUMA se limitan a cargas de trabajo particulares, especialmente en servidores donde los datos a menudo se asocian fuertemente con ciertas tareas o usuarios. [1]

Las arquitecturas NUMA siguen lógicamente el escalado de las arquitecturas de multiprocesamiento simétrico (SMP). Fueron desarrollados 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 ) y Digital (más tarde Compaq , luego HP , ahora HPE). Las técnicas desarrolladas por estas empresas aparecieron más tarde en una variedad de sistemas operativos similares a Unix y, hasta cierto punto, en 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 Italia.

Concepto básico [ editar ]

Una posible arquitectura de un sistema NUMA. Los procesadores se conectan al bus o al travesaño mediante conexiones de diferente grosor / número. Esto muestra que diferentes CPU tienen diferentes prioridades de acceso a la memoria en función de su ubicación relativa.

Las CPU modernas funcionan considerablemente más rápido que la memoria principal que utilizan. En los primeros días de la informática y el procesamiento de datos, la CPU generalmente funcionaba más lentamente que su propia memoria. Las líneas de rendimiento de los procesadores y la memoria se cruzaron en la década de 1960 con la llegada de las primeras supercomputadoras . Desde entonces, las CPU se han encontrado cada vez más "hambrientas de datos" y tienen que detenerse mientras esperan que lleguen los datos de la memoria. 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 permite que las computadoras trabajen en grandes conjuntos de datos a velocidades que otros sistemas no podrían alcanzar.

Limitar el número de accesos a la memoria proporcionó la clave para obtener un alto rendimiento de una computadora moderna. Para los procesadores básicos, esto significó instalar una cantidad cada vez mayor de memoria caché de alta velocidad y utilizar algoritmos cada vez más sofisticados para evitar pérdidas de caché . Pero el drástico aumento de tamaño de los sistemas operativos y de las aplicaciones que se ejecutan en ellos generalmente ha superado estas mejoras de procesamiento de caché. Los sistemas multiprocesador sin NUMA empeoran considerablemente el problema. Ahora, un sistema puede privar a varios procesadores al mismo tiempo, sobre todo porque solo un procesador puede acceder a la memoria de la computadora a la vez. [2]

NUMA intenta abordar este problema proporcionando memoria separada para cada procesador, evitando el impacto en el rendimiento cuando varios procesadores intentan abordar la misma memoria. Para problemas relacionados con la distribución de datos (común para servidores y aplicaciones similares), NUMA puede mejorar el rendimiento en una sola memoria compartida en un factor de aproximadamente el número de procesadores (o bancos de memoria separados). [3] Otro enfoque para abordar este problema, utilizado principalmente en sistemas que no son NUMA, es la arquitectura de memoria multicanal , en la que un aumento lineal en el número de canales de memoria aumenta linealmente la concurrencia de acceso a la memoria. [4]

Por supuesto, no todos los datos terminan confinados a una sola tarea, lo que significa que más de un procesador puede requerir los mismos datos. Para manejar estos casos, los sistemas NUMA incluyen hardware o software adicional para mover datos entre bancos de memoria. Esta operación ralentiza los procesadores conectados a esos bancos, por lo que el aumento de velocidad general debido a NUMA depende en gran medida de la naturaleza de las tareas en ejecución. [3]

AMD implementó NUMA con su procesador Opteron (2003), utilizando HyperTransport . Intel anunció la compatibilidad de NUMA para sus servidores x86 e Itanium a finales de 2007 con sus CPU Nehalem y Tukwila . [5] Ambas familias de CPU Intel comparten un conjunto de chips común ; la interconexión se llama Intel Quick Path Interconnect (QPI). [6]

NUMA coherente en caché (ccNUMA) [ editar ]

Topología de un servidor Bulldozer ccNUMA extraído con la herramienta lstopo de hwloc.

Casi todas las arquitecturas de CPU utilizan una pequeña cantidad de memoria no compartida muy rápida conocida como caché para explotar la localidad de referencia en los accesos a la memoria. Con NUMA, mantener la coherencia de la caché en la memoria compartida tiene una sobrecarga significativa. Aunque son más simples de diseñar y construir, los sistemas NUMA no coherentes en caché se vuelven prohibitivamente complejos de programar en el modelo de programación de arquitectura estándar de von Neumann . [7]

Normalmente, ccNUMA utiliza la comunicación entre procesadores entre controladores de caché para mantener una imagen de memoria coherente cuando más de un caché almacena la misma ubicación de memoria. Por esta razón, ccNUMA puede funcionar mal cuando varios procesadores intentan acceder a la misma área de memoria en rápida sucesión. La compatibilidad con NUMA en los sistemas operativos intenta reducir la frecuencia de este tipo de acceso mediante la asignación de procesadores y memoria de formas compatibles con NUMA y evitando la programación y los algoritmos de bloqueo que hacen necesarios los accesos no compatibles con NUMA . [8]

Alternativamente, los protocolos de coherencia de la caché, como el protocolo MESIF, intentan reducir la comunicación necesaria para mantener la coherencia de la caché. 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 encontradas en los sistemas multiprocesador anteriores. Por ejemplo, SCI se utiliza como base para la tecnología NumaConnect. [9] [10]

A partir de 2011, los sistemas ccNUMA son sistemas multiprocesador basados ​​en el procesador AMD Opteron , que se puede implementar sin lógica externa, y el procesador Intel Itanium, que requiere que el chipset sea compatible con NUMA. Ejemplos de conjuntos de chips habilitados para ccNUMA son SGI Shub (Super hub), Intel E8870, HP sx2000 (utilizado en los servidores Integrity y Superdome) y los que se encuentran en los sistemas basados ​​en NEC Itanium. Los sistemas ccNUMA anteriores, como los de Silicon Graphics, se basaban en procesadores MIPS y el procesador DEC Alpha 21364 (EV7).

NUMA versus computación en clúster [ editar ]

Uno puede ver NUMA como una forma estrechamente acoplada de computación en clúster . La adición de paginación de memoria virtual a una arquitectura de clúster puede permitir 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. [1]

Soporte de software [ editar ]

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 subprocesos y procesos cerca de sus datos en memoria.

  • Compatibilidad con Silicon Graphics IRIX para la arquitectura ccNUMA sobre 1240 CPU 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. [11]
  • Java 7 agregó soporte para el recolector de basura y el asignador de memoria compatible con NUMA . [12]
  • La versión 2.5 del kernel de Linux ya contenía soporte básico de NUMA, [13] que se mejoró en versiones posteriores del kernel. La 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. [14] [15] La 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 ; La nueva configuración de sysctl permite habilitar o deshabilitar el equilibrio NUMA, así como la configuración de varios parámetros de equilibrio de memoria NUMA.[16] [17] [18]
  • OpenSolaris modela la arquitectura NUMA con lgroups.
  • FreeBSD agregó soporte para la arquitectura NUMA en la versión 9.0. [19]

Ver también [ editar ]

  • Acceso uniforme a la memoria (UMA)
  • Arquitectura de memoria de solo caché (COMA)
  • Memoria del bloc de notas (SPM)
  • Espacio de direcciones global particionado
  • HiperDispatch

Referencias [ editar ]

  1. ^ a b Nakul Manchanda; Karan Anand (4 de mayo de 2010). "Acceso a memoria no uniforme (NUMA)" (PDF) . Universidad de Nueva York. Archivado desde el original (PDF) el 28 de diciembre de 2013 . Consultado el 27 de enero de 2014 .
  2. ^ Sergey Blagodurov; Sergey Zhuravlev; Mohammad Dashti; Alexandra Fedorov (2 de mayo de 2011). "Un caso para la gestión de disputas con reconocimiento de NUMA en sistemas multinúcleo" (PDF) . Universidad Simon Fraser . Consultado el 27 de enero de 2014 .
  3. ^ a b Zoltan Majo; Thomas R. Gross (2011). "Rendimiento del sistema de memoria en un multiprocesador multinúcleo NUMA" (PDF) . ACM. Archivado desde el original (PDF) el 12 de junio de 2013 . Consultado el 27 de enero de 2014 .
  4. ^ "Informe técnico de la arquitectura de memoria DDR de doble canal Intel" (PDF) (Rev. 1.0 ed.). Infineon Technologies North America y Kingston Technology. Septiembre de 2003. Archivado desde el original (PDF, 1021  KB ) el 29 de septiembre de 2011 . Consultado el 6 de septiembre de 2007 .
  5. ^ Intel Corp. (2008). Arquitectura Intel QuickPath [Informe técnico]. Obtenido de http://www.intel.com/pressroom/archive/reference/whitepaper_QuickPath.pdf
  6. ^ Corporación Intel. (18 de septiembre de 2007). Gelsinger habla con Intel y el Rapid Technology Caden de la industria de alta tecnología [Comunicado de prensa]. Obtenido de http://www.intel.com/pressroom/archive/releases/2007/20070918corp_b.htm
  7. ^ "ccNUMA: acceso a memoria no uniforme coherente de caché" . slideshare.net. 2014 . Consultado el 27 de enero de 2014 .
  8. ^ Por Stenstromt; Truman Joe; Anoop Gupta (2002). "Evaluación comparativa del rendimiento de arquitecturas NUMA y COMA coherentes con la caché" (PDF) . ACM . Consultado el 27 de enero de 2014 .
  9. ^ David B. Gustavson (septiembre de 1991). "La interfaz coherente escalable y proyectos de estándares relacionados" (PDF) . Publicación SLAC 5656 . Centro acelerador lineal de Stanford . Consultado el 27 de enero de 2014 .
  10. ^ "El NumaChip habilita la memoria caché coherente compartida de bajo costo" . Numascale.com. Archivado desde el original el 22 de enero de 2014 . Consultado el 27 de enero de 2014 .
  11. ^ Soporte de NUMA (MSDN)
  12. ^ Mejoras en el rendimiento de la máquina virtual Java HotSpot ™
  13. ^ "Esfuerzo de escalabilidad de Linux: página de inicio del grupo NUMA" . sourceforge.net . 2002-11-20 . Consultado el 6 de febrero de 2014 .
  14. ^ "Linux kernel 3.8, sección 1.8. Balanceo automático de NUMA" . kernelnewbies.org . 2013-02-08 . Consultado el 6 de febrero de 2014 .
  15. Jonathan Corbet (14 de noviembre de 2012). "La NUMA tiene prisa" . LWN.net . Consultado el 6 de febrero de 2014 .
  16. ^ "Linux kernel 3.13, sección 1.6. Rendimiento mejorado en sistemas NUMA" . kernelnewbies.org . 2014-01-19 . Consultado el 6 de febrero de 2014 .
  17. ^ "Documentación del kernel de Linux: Documentation / sysctl / kernel.txt" . kernel.org . Consultado el 6 de febrero de 2014 .
  18. Jonathan Corbet (1 de octubre de 2013). "Progreso de la programación de NUMA" . LWN.net . Consultado el 6 de febrero de 2014 .
  19. ^ "numa (4)" . www.freebsd.org . Consultado el 3 de diciembre de 2020 .
  • Este artículo se basa en material extraído del Diccionario de Computación en línea gratuito antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de licencias" de la GFDL , versión 1.3 o posterior.

Enlaces externos [ editar ]

  • Preguntas frecuentes de NUMA
  • Memoria compartida distribuida basada en páginas
  • Proyecto OpenSolaris NUMA
  • Video de introducción a la arquitectura del sistema Alpha EV7
  • Más videos relacionados con los sistemas EV7: CPU, IO, etc.
  • Optimización NUMA en aplicaciones de Windows
  • Soporte de NUMA en Linux en SGI
  • Intel Tukwila
  • Explicación de Intel QPI (CSI)
  • sistemas Itanium NUMA actuales