Acceso a memoria no uniforme

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Diseño de memoria informática utilizado en multiprocesamiento
La placa base de una estación de trabajo HP Z820 con dos tomas CPU, cada una con su propio conjunto de ocho ranuras DIMM que rodean el socket.

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 a 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 están fuertemente asociados con ciertas tareas o usuarios.

Las arquitecturas NUMA siguen lógicamente la escalabilidad de las arquitecturas de multiprocesamiento simétrico (SMP). Fueron desarrollados comercialmente durante la década de 1990 por Unisys, Convex Computer (luego Hewlett-Packard), Honeywell Information Systems Italy (HISI) (luego Groupe Bull), Silicon Graphics (luego Silicon Graphics International), Sequent Computer Systems (luego IBM), Data General (más tarde EMC, ahora Dell Technologies) 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 Italy.

Resumen

Una posible arquitectura de un sistema NUMA. Los procesadores se conectan al bus o a través de conexiones de espesor/número variable. Esto demuestra que diferentes CPU tienen diferentes prioridades de acceso a la memoria basadas en 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 computación 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 tener que detenerse mientras se espera que lleguen los datos de la memoria (por ejemplo, para computadoras basadas en la arquitectura Von-Neumann, consulte 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 la memoria de alta velocidad en lugar de procesadores más rápidos, lo que permitió que las computadoras trabajaran en grandes conjuntos de datos a velocidades que otros sistemas no podían alcanzar.

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

NUMA intenta abordar este problema al proporcionar una memoria separada para cada procesador, lo que evita 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 única memoria compartida por un factor de aproximadamente la cantidad de procesadores (o bancos de memoria separados). 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.

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 general de la velocidad debido a NUMA depende en gran medida de la naturaleza de las tareas en ejecución.

Implementaciones

AMD implementó NUMA con su procesador Opteron (2003), usando HyperTransport. Intel anunció la compatibilidad con NUMA para sus servidores x86 e Itanium a fines de 2007 con sus CPU Nehalem y Tukwila. Ambas familias de CPU Intel comparten un conjunto de chips 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).

NUMA coherente de caché (ccNUMA)

Topología de un ccNUMA Servidor Bulldozer extraído usando la herramienta lstopo de hwloc.

Casi todas las arquitecturas de CPU usan 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 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 memoria caché se vuelven prohibitivamente complejos de programar en el modelo de programación de arquitectura estándar de von Neumann.

Normalmente, ccNUMA utiliza la comunicación entre procesadores entre los controladores de caché para mantener una imagen de memoria consistente cuando más de un 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. 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 manera compatible con NUMA y evitando la programación y el bloqueo de algoritmos que hacen que los accesos no compatibles con NUMA sean necesarios.

Alternativamente, los protocolos de coherencia de caché como el protocolo MESIF intentan reducir la comunicación requerida para mantener la coherencia de caché. Scalable Coherent Interface (SCI) es un estándar IEEE que define un protocolo de coherencia de caché basado en directorios para evitar las limitaciones de escalabilidad que se encuentran en los sistemas multiprocesador anteriores. Por ejemplo, SCI se utiliza como base para la tecnología NumaConnect.

NUMA versus computación en clúster

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.

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 memoria.

  • Microsoft Windows 7 y Windows Server 2008 R2 agregó soporte para arquitectura NUMA sobre 64 núcleos lógicos.
  • Java 7 agregó soporte para el aleator de memoria NUMA y el coleccionista de basura.
  • kernel de Linux:
    • La versión 2.5 proporcionó un soporte básico de NUMA, que se mejoró aún más en versiones posteriores del kernel.
    • La versión 3.8 del kernel de Linux trajo una nueva fundación NUMA que permitió el desarrollo de políticas NUMA más eficientes en versiones posteriores del kernel.
    • 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 gigantes transparentes; nuevas configuraciones sysctl permiten habilitar o desactivar NUMA, así como la configuración de varios parámetros de balance de memoria NUMA.
  • OpenSolaris modelos arquitectura NUMA con lgroups.
  • FreeBSD agregó soporte para arquitectura NUMA en la versión 9.0.
  • Silicon Graphics IRIX (continúa a partir de 2021) soporte para arquitectura ccNUMA más de 1240 CPU con serie servidor 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 conjunto de chips 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).

Contenido relacionado

Memoria (informática)

Almacenamiento de datos informáticos o memoria es una tecnología que consta de componentes informáticos y medios de grabación que se utilizan para retener...

Compromiso ontológico

Max Newman

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save