NUMA
En computación, NUMA (del inglés Non-Uniform Memory Access, en español "acceso a memoria no uniforme") es un diseño de memoria utilizado en multiprocesamiento donde toda la memoria se accede en posiciones relativas de otro proceso o memoria compartida entre procesos. Bajo NUMA, un procesador puede acceder a su propia memoria local de forma más rápida que a la memoria no local (memoria local de otro procesador o memoria compartida entre procesadores).
Historia
editarInicialmente las CPU de ordenadores y superordenadores eran más lentos que sus respectivas memorias, siendo superado su rendimiento en 1970. Desde entonces las CPUs debían esperar mientras los accesos a memoria eran completados. Algunos ordenadores diseñados de 1980-1990 se centraban en proporcionar memoria de alta velocidad en los accesos frente a los procesadores más rápidos, lo que les permitía trabajar con grandes volúmenes de datos que otros sistemas no podían. Entre los precursores de dicha tecnología tenemos a Data General, con AViiON y Sequent Computer Systems, actualmente parte de IBM, con la misma estrategia al mismo tiempo. El sistema con nombre clave "Manx" fue el primer esfuerzo, basado originalmente en hardware Pentium y Zenith, pero nunca se vendió en el mercado. Dentro de los equipos desarrollados por Data General podemos mencionar el servidor AV/9500 de 16 CPU y su sucesor, el modelo AV 1000, con 32 en 1995, y los AV 20000 ("Audubon") que conectaban hasta 32 procesadores Pentium Pro, y AV 25000 ("Audubon 2") hasta 64 Pentium II, Pentium III e Intel Xeon.
Conceptos básicos
editarLimitar el número de accesos a memoria es la clave de un alto rendimiento en un ordenador moderno. Para los procesadores esto significa el incremento de memoria caché de alta velocidad y el uso de algoritmos más sofisticados para evitar los errores de caché, aunque el drástico aumento del tamaño de los sistemas operativos y las aplicaciones que se ejecutan en ellos han abrumado las mejoras del procesamiento de la caché. Los sistemas de multiprocesamiento hacen que el problema sea peor: ahora el sistema debe bloquear varios procesadores simultáneamente, porque sólo un procesador puede acceder a la memoria en cada momento.
NUMA intenta resolver este problema ofreciendo memoria distribuida para cada procesador, evitando así que afecte al rendimiento del sistema cuando varios procesadores intentan acceder a la misma memoria. Para los problemas de la propagación de datos (comunes en servidores y aplicaciones similares), NUMA puede mejorar el rendimiento utilizando una única memoria compartida por un factor de aproximadamente el número de procesadores (o separando bancos de memoria). En un sistema NUMA, cada procesador puede ver directamente el total de memoria del sistema, pero tiene afinidad (obtiene mejor velocidad si la utiliza) a la que tiene físicamente más cerca.
Véase también
editarEnlaces externos
editar- NUMA FAQ (en inglés)
- Page-based distributed shared memory (en inglés)
- A NUMA API for LINUX (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). - a technical white paper from Novell (en inglés)
- OpenSolaris NUMA Project (en inglés)
- Introduction video for the Alpha EV7 system architecture (en inglés)
- More videos related to EV7 systems: CPU, IO, etc (en inglés)
- NUMA optimization in Windows Applications (en inglés)
- NUMA Support in Linux at SGI (en inglés)
- Intel Tukwila (en inglés)
- Intel CSI explained (en inglés)
- current Itanium NUMA systems (en inglés)