Acceso a memoria no uniforme


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.

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 lento 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 CPUs se han encontrado cada vez más "hambrientas de datos" y tienen que detenerse mientras esperan que los datos lleguen desde 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 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 única memoria compartida en un factor de aproximadamente el número de procesadores (o bancos de memoria separados). [3] 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 linealmente la concurrencia de acceso a la memoria. [4]


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.
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.
Topología de un servidor ccNUMA Bulldozer extraído con la herramienta lstopo de hwloc.