stringtranslate.com

Acceso a memoria no uniforme

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. Con NUMA, un procesador puede acceder a su propia memoria local más rápido que con la memoria no local (memoria local de 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é, lo que reduce el tráfico en el bus de memoria. [2]

Las arquitecturas NUMA siguen lógicamente el modelo de escalado 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 aparecieron más tarde en una variedad de sistemas operativos similares a Unix y, en cierta medida, en Windows NT .

La primera implementación comercial de un sistema Unix basado en NUMA fue [¿ dónde? ] [ ¿cuándo? ] la familia de servidores Symmetrical Multi Processing XPS-100, diseñada por Dan Gielan de VAST Corporation para Honeywell Information Systems Italia.

Descripción general

Una posible arquitectura de un sistema NUMA. Los procesadores se conectan al bus o a la barra transversal mediante conexiones de distinto grosor y número. Esto demuestra que las distintas CPU tienen distintas 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 han tenido que detenerse mientras esperaban que los datos llegaran desde la memoria (por ejemplo, para las computadoras basadas en la arquitectura Von-Neumann, consulte 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ó que las computadoras trabajaran con grandes conjuntos de datos a velocidades que otros sistemas no podían alcanzar.

Limitar el número de accesos a la memoria fue la clave para obtener un alto rendimiento de un ordenador moderno. Para los procesadores de consumo, esto significaba instalar una cantidad cada vez mayor de memoria caché de alta velocidad y utilizar algoritmos cada vez más sofisticados para evitar errores de caché . Pero el drástico aumento del tamaño de los sistemas operativos y 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 empeoran considerablemente el problema. Ahora un sistema puede dejar sin recursos a varios procesadores al mismo tiempo, sobre todo porque sólo un procesador puede acceder a la memoria del ordenador a la vez. [3]

NUMA intenta solucionar este problema proporcionando memoria separada para cada procesador, evitando la pérdida de rendimiento cuando varios procesadores intentan acceder a la misma memoria. Para problemas que involucran datos dispersos (comunes para servidores y aplicaciones similares), NUMA puede mejorar el rendimiento sobre una única memoria compartida por un factor de aproximadamente el número de procesadores (o bancos de memoria separados). [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 aumenta la concurrencia de acceso a la memoria de forma lineal. [5]

Por supuesto, no todos los datos terminan confinados en una única 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. [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 fines de 2007 con sus CPU Nehalem y Tukwila . [6] Ambas familias de CPU 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 integrada y fue reemplazada por una nueva versión llamada Intel UltraPath Interconnect con el lanzamiento de Skylake (2017). [7]

Almacenamiento en caché NUMA coherente (ccNUMA)

Topología de un servidor Bulldozer ccNUMA extraída mediante 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 aprovechar 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 con la caché se vuelven prohibitivamente complejos de programar en el modelo de programación de la arquitectura de von Neumann estándar. [8]

Por lo general, ccNUMA utiliza la comunicación entre procesadores entre controladores de caché para mantener una imagen de memoria consistente cuando más de una caché almacena la misma ubicación de memoria. Por este motivo, ccNUMA puede tener un rendimiento deficiente cuando varios procesadores intentan acceder a la misma área de memoria en rápida sucesión. El soporte para NUMA en los sistemas operativos intenta reducir la frecuencia de este tipo de acceso asignando procesadores y memoria de formas compatibles con NUMA y evitando algoritmos de programación y bloqueo que hacen necesarios los accesos no compatibles con NUMA. [9]

Alternativamente, los protocolos de coherencia de caché, como el protocolo MESIF, intentan reducir la comunicación necesaria para mantener la coherencia de 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. [10] [11]

Computación en clúster frente a NUMA

Se puede considerar a 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. [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 subprocesos y procesos cerca de sus datos en la memoria.

Soporte de hardware

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 admita NUMA. Algunos 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 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).

Véase también

Referencias

  1. ^ Este artículo se basa en material tomado de Non-uniform+memory+access en el Diccionario gratuito en línea de informática antes del 1 de noviembre de 2008 e incorporado bajo los términos de "relicencia" del GFDL , versión 1.3 o posterior.
  2. ^ ab 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 .
  3. ^ Sergey Blagodurov; Sergey Zhuravlev; Mohammad Dashti; Alexandra Fedorov (2011-05-02). "Un caso para la gestión de contención con reconocimiento de NUMA en sistemas multinúcleo" (PDF) . Universidad Simon Fraser . Consultado el 27 de enero de 2014 .
  4. ^ por 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 2013-06-12 . Consultado el 2014-01-27 .
  5. ^ "Informe técnico sobre la arquitectura de memoria DDR de canal dual de Intel" (PDF) (edición Rev. 1.0). 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 .
  6. ^ Intel Corp. (2008). Arquitectura Intel QuickPath [informe técnico]. Recuperado de http://www.intel.com/pressroom/archive/reference/whitepaper_QuickPath.pdf
  7. ^ Intel Corporation. (18 de septiembre de 2007). Gelsinger habla con Intel y el equipo de tecnología rápida de la industria de alta tecnología [Comunicado de prensa]. Recuperado de http://www.intel.com/pressroom/archive/releases/2007/20070918corp_b.htm
  8. ^ "ccNUMA: Acceso a memoria no uniforme coherente en caché". slideshare.net. 2014. Consultado el 27 de enero de 2014 .
  9. ^ Per 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 .
  10. ^ David B. Gustavson (septiembre de 1991). "The Scalable Coherent Interface and Related Standards Projects" (PDF) . Publicación SLAC 5656. Stanford Linear Accelerator Center . Archivado (PDF) desde el original el 2022-10-09 . Consultado el 27 de enero de 2014 .
  11. ^ "NumaChip permite una memoria compartida coherente de bajo coste en caché". Numascale.com. Archivado desde el original el 22 de enero de 2014. Consultado el 27 de enero de 2014 .
  12. ^ Soporte NUMA (MSDN)
  13. ^ Mejoras en el rendimiento de la máquina virtual Java HotSpot
  14. ^ "Esfuerzo de escalabilidad de Linux: página de inicio del grupo NUMA". SourceForge.net . 20 de noviembre de 2002 . Consultado el 6 de febrero de 2014 .
  15. ^ "Kernel Linux 3.8, Sección 1.8. Balanceo automático de NUMA". kernelnewbies.org . 2013-02-08 . Consultado el 2014-02-06 .
  16. ^ Jonathan Corbet (14 de noviembre de 2012). "NUMA a toda prisa". LWN.net . Consultado el 6 de febrero de 2014 .
  17. ^ "Núcleo Linux 3.13, Sección 1.6. Rendimiento mejorado en sistemas NUMA". kernelnewbies.org . 2014-01-19 . Consultado el 2014-02-06 .
  18. ^ "Documentación del kernel de Linux: Documentation/sysctl/kernel.txt". kernel.org . Consultado el 6 de febrero de 2014 .
  19. ^ Jonathan Corbet (1 de octubre de 2013). "Progreso en la programación de la NUMA". LWN.net . Consultado el 6 de febrero de 2014 .
  20. ^ "numa(4)". www.freebsd.org . Consultado el 3 de diciembre de 2020 .

Enlaces externos