SPARC: Granja de servidores vs granja de threads

Introducción

Actualmente estamos viviendo un periodo de transición con respecto a la arquitectura de las máquinas con las que trabajamos. Los fabricantes de procesadores están provocando que el mercado cambie el rumbo al que estabamos acostumbrados en los últimos años.

Al principio de los 90, apareció en escena el SO Linux, como se ha demostrado, Linux ha sido una completa revolución en muchos aspecto del mundo IT y no solo por su aportación al movimiento OpenSource, desde el punto de vista del administrador de sistemas, las aparición de Linux supuso un cambio en la mentalidad a la hora de administrar el sistema operativo.

La reducción de costes de los PCs y la aparición de Linux provocó que se migrasen muchos servicios, que utilizaban plaformas formadas por máquinas multiprocesadoras a granjas de servidores de un solo procesador y los cuales utilizaban Linux como SO, este cambio en la arquitectura de las plataformas provocó que el perfíl del administrador de sistemas cambiáse. Ya no se necesitaba que el administrador de sistema fuese un experto en SO ya que no administraba un SO sino una granja de servidores, lo importante era la granja en si y por lo tanto el SO pasó a tener la misma relevancia que un driver para acceder a disco. Cuando trabajas con una plaforma de 100 máquinas con Linux, el que una de ellas tenga problemas de rendimiento es totalmente irrelevante, nadie se preocupa de qué le ocurre al rendimiento de la máquina, sencillamente se apaga, se reinstala y listo.

La aparición de los procesadores multicore, provoca varios cambios, uno de ellos es que las soluciones con máquinas multiprocesador/multicore toman cada vez mas peso, para solucionar problemas mediante la consolidación de servicios/servidores en pocas máquinas, utilizando soluciones de virtualización, volviendo de esta forma al modelo pre-Linux. Donde las plataformas se implementan con pocas máquinas, las cuales tienen muchos procesadores.

Este nuevo modelo, ¿qué supone para los administradores de sistemas?, principalmente un cambio en la mentalidad del administrador. Este modelo provocará la progresiva desaparición del modelo de “granja de servidores“. Con el nuevo modelo, una máquina estará destinada a dar servicios a varias aplicaciones, lo que provocará que el administrador tenga que administrar los recursos de la máquina para que ésta ofrezca el mejor rendimiento posible a las distintas aplicaciones a las que da servicio.

El nuevo modelo formado por máquinas multiprocesador/multicores obligará a los administradores de sistemas a conocer todas las posibilidad del SO para gestionar los recursos de la máquina. Frente al crecimiento horizontal de las plataformas basadas en granjas de servidores, el nuevo modelo puede crecer tanto horizontalmente (añadir máquinas a la plataforma resulta ahora más caro) como verticalmente, podemos plantear que se aumente la memoria, la CPU, etc de las máquinas.

Teniendo más o menos clara la visión de lo que puede ser la situación futura en los entornos IT, es importante que los administradores conozcan qué procesadores existen en el mercado y cual es la tendencia de los fabricantes en este sentido.

Como administradores debemos asumir nuestra responsabilidad en la planificación de las infraestructuras IT de la empresa, este post pretende dar un poco de luz a la actual oferta de procesadores SPARC y que esta información nos ayude, en la medida de lo posible a tomar decisiones y si estas decisiones son las correctas, mucho mejor. Pensemos por un momento en todos esos administradores que, mas o menos en el 95 (justo antes de la explosión de Linux) compraron máquinas multiprocesadoras (cuyo coste era muy muy superior al de esos PCs que teníamos para correr Windows) para que dieran servicio como servidores Web, servidores de correo, etc. Podemos decir que esa fue una mala decisión y no fue mala por un tema técnico, fue mala por razones de costes, los costes de explotación, de mantenimiento, de soportes, etc. De este tipo de máquina son muy superiores a los de los PCs que podíamos comprar en la tienda de al lado. Por lo tanto el error no fue por un problema en la elección de la tecnología disponible, sino sencillamente de costes.

Como aumentar la capacidad de un procesador

El objetivo de todos los fabricantes de procesadores, cuando diseñan un nuevo procesador, es el mismo y lo podemos resumir en la siguiente frase.

“Ejecutar el mayor número de instrucciones por segundo”

Esta es una máxima que persiguen los fabricantes y existen dos estrategias para intentar conseguir el mayor número de instrucciones por segundo.

  • Aumentar la velocidad del procesador, con esta estratégia se consigue que el número de instrucciones por segundo aumente, al aumentar las frecuencias de los relojes de los procesadores y por lo tanto disminuir el tiempo que necesita el procesador para ejecutar una instrucción.
  • Aumentar la ejecución de instrucciones en paralelo, si el procesador consigue ejecutar varias instrucciones en paralelo también se conseguirá un aumento del rendimiento, aquí no se modifica la frecuencia del reloj, sino que la estrategia se basa en diseñar procesadores un poco mas complejos que puedan gestionar la ejecución de varias instrucciones en paralelo.

¿Qué es un procesador CMT?

Los procesadores CMT (Chip Multithreading Technology) son el resultado de la implementación de la estrategia de paralelización de las instrucciones en un procesador. Hasta ahora los procesadores implementaban una técnica de paralelización llamada ILP (Instruction level Parallelism), los procesadores CMT dan un paso mas al paralelizar los hilos de ejecución, lo que supone que varios procesos estarán ejecutando instrucciones, que no tienen dependecias, al mismo tiempo, esta técnica se llama TLP (thread Level Parallelism).

El TLP se basa en utilizar los tiempos de espera del procesador para ejecutar instrucciones de otros hilos, al ser hilos independientes, no existe dependencia en la ejecución de las instrucciones, produciendose una paralelización real, frente a la técnica de ILP que está sujeta a las dependencias que existan entre las instrucciones que se intentan paralelizar.

Cuando un procesador CMT ejecuta una instrucción que requiere un dato de memoria, el procesador lanza la petición a memoria, la mayoría de los procesadores estarían esperando hasta que la memoria devolviese el dato, pero un procesador CMT no se queda en un estado de espera, sino que la unidad de control de instrucción switchea a la instrucción de otro proceso y lanza una instrucción de este segundo proceso, dependiendo del número de threads que pueda manejar el procesador, podremos tener mas o menos threads ejecutándose simultaneamente. Como podemos ver, los procesadores que implementen TLP, utilizan de forma mas eficiente el tiempo de procesador.

CMT no es la solución para todos nuestros problemas.

Todo no van a ser ventajas en los procesadores CMT, también presentan algunos inconvenientes, el más importante, es el posible cuello de botella en el acceso a la memoria, los distintos cores que forman el procesador estarán compitiendo por el acceso a la memoria. Un buen diseño en la jerarquía de caches permitirá un aumento en el número de aciertos y por lo tanto una reducción del tiempo empleado para acceder a la memoria.

El problema del cuello de bottella en el acceso a la memoria se acentua en aplicaciones que realizan un uso intensivo de la memoria, como pueden ser las BBDD, en este tipo de aplicaciones, los cores del procesador estarían constantemente intentando acceder a memoria, ya que los aciertos de cache serían demasiado bajos.

Procesadores SPARC

Vamos a dar un pequeño repaso que nos permita disponer de una visión sobre los distintos procesadores SPARC que existen actualmente en el mercado, tanto de Sun como de Fujitsu. El conocer la arquitectura de un procesador, aunque de una forma superficial, es muy importante para un administrador de sistemas. Los distintos procesadores van a dar distintos rendimientos según en el entorno en el que los empleemos. Nosotros como administradores de sistemas, no tenemos porqué tener un conocimiento profundo sobre la arquitectura de los procesadores, pero tener un conocimiento de cómo funciona un procesador, aunque sea superficial, nos puede ayudar a tomar la decisión de qué máquinas debemos emplear en un entorno determinado.

Este post no pretende ser un estudio profundo sobre las distintas arquitecturas de la familia de procesadores SPARC, solo pretende dar una sencilla visión sobre estos procesadores, que nos sirva para tomar decisiones sobre nuestras infraestructuras.

Algo que debemos dejar claro, es que las decisiones a la hora de montar una nueva infraestructura de sistemas, no se puede basar, únicamente en el tipo de procesador que deben de llevar las máquinas de esta infraestructura. En este tipo de decisiones intervienen muchos otros factores, este post solo pretende realizar una comparativa entre los distintos procesadores sin analizar otros elementos como son, el almacenamiento, el tipo y la cantidad de máquinas, la arquitectura de las máquinas, etc.

Para la valoración de la utilidad de los procesadores, hemos supuesto un entorno 3 capas, que es una de las arquitecturas de sistemas más extendida y por lo tanto podemos emplearla como caso típico.

dibujo74.gif
Donde la primera capa corresponde a los servidores de entrada, pueden ser servidores web, de correo, etc. La segunda capa corresponde a los servidores de aplicación, son los encargados de recibir las peticiones de la capa superior y solicitar datos a la capa inferior para construir una respuesta. Y por último, la tercera capa, que corresponde a los servidores que almacenan la información.

UltraSPARC IV+

Cores 2
Threads/core 1
FPU 1:1
L1 inst. 64KB
L1 datos 64KB
L2 2MB, 4-way
L3 32MB, 4-way
i-TLB 16 FA + 512 2-way SA
d-TLB 16 FA + 512 2-way SA

us_iv_plus.jpg

El procesador UltraSPARC IV+ es una evolución del UltraSPARC IV, que es el primer procesador que implementa la tecnología CMT. El procesador UltraSPARC IV+ está formado por dos cores UltraSPARC III. Las mejoras presentes en el US IV+ incluyen la implementación de dos nuevos niveles de cache L2 y L3, los cuales son accesibles por ambos cores. Hay que destacar del procesador US IV+, que el tamaño de la memoria cache L3 es considerablemente grande, un total 32MB, el objetivo es intentar disminuir los fallos de cache y evitar de esta forma disminuir los accesos a memoria.

Nivel Entrada Aplicación Datos
Valoración Buena Muy Buena Muy Buena

SPARC64 VI

Cores 2
Threads/core 2
FPU 1:1
L1 inst. 128KB
L1 datos 128KB
L2 64MB, 10-way
L3 NA
i-TLB/d-TLB Combinada, 32FA + 2048 2-way SA
   

s64_vi.gif

El procesador SPARC64 VI es el primer procesador de Fujitsu que incorpora 2 cores, la ventaja de este procesador es que cada core es capaz de trabajar con 2 threads, lo que significa que cada procesador es capaz de gestionar 4 threads. Este procesador se monta en máquinas SMP como la serie M de Fujitsu-Siemens y Sun, en la que encontramos máquinas que tienen de 4 procesadores a 64. Este procesador funciona perfectamente en máquinas con arquitectura SMP, por lo que podemos asegurar que funcionará bien en entornos donde se necesite mucha capacidad de cálculo y bastante acceso a memoria, como pueden ser los entornos de BBDD.

Nivel Entrada Aplicación Datos
Valoración Buena Muy Buena Muy Buena

UltraSPARC T1

Cores 8
Threads/core 4
FPU 1:8
L1 inst. 16KB
L1 datos 8KB
L2 3MB, 12-way
L3 NA
i-TLB 64 FA
d-TLB 64 FA

us_t1.gif

El procesador UltraSPARC T1 es el primero de la familia de procesadores T, los cuales se basan en tecnología CMT. El US T1 tiene hasta 8 cores, cada uno de los cuales puede trabajar con 4 threads, lo que hacen un total de 32 threads en ejecución. Presenta dos inconvenientes, el primero es que todos los cores comparte una única unidad de coma flotante lo que puede suponer un problema para entornos científicos o aplicaciones que hagan uso de este tipo de operaciones. El segundo inconveniente es que el procesador US T1, únicamente está montado en máquinas monoprocesadoras, esto nos obliga a que el crecimiento de la infraestructura sea únicamente en horizontal.

Puestas en la balanza, por un lado las ventajas (hasta 8 cores en un solo chip) y por otro los inconvenientes, en una plataforma de 3 capas, este procesador funcionará bien en la capa de entrada, servidores web, de correo, etc. ya que nos serviría para la consolidación de infraestructura de entrada. Por la arquitectura del procesador y la forma de crecimiento en horizontal, no es aconsejable utilizarlo para las capas de aplicación y la de bbdd.

Nivel Entrada Aplicación Datos
Valoración Muy Buena Regular Mala

UltraSPARC T2

Cores 8
Threads/core 8
FPU 1:1
L1 inst. 16KB
L1 datos 8KB
L2 4MB, 16-way
L3 NA
i-TLB 64 FA
d-TLB 128 FA

us_t2.gif

El UltraSPARC T2, es la segunda generación de la familia de procesadores US T, como mejoras frente a su antecesor el US T1 podemos destacar, que se ha aumentado el número de threads con lo que que puede trabajar un core, se ha pasado de 4 a 8 threads. Tambíen podemos destacar que cada core tiene su propia unidad de coma flotante, esto permite eliminar la limitación del US T1 con respecto a las operaciones de coma flotante. El US T2 presenta un redimiento muy bueno para aplicaciones en coma flotante. También se ha aumentando el tamaño de la memoria cache L2, ahora es de 4MB y se ha duplicado el tamaño de la d-TLB, hasta las 128 posiciones.

Como inconvenientes podemos comentar que el procesador US T2 solo se monta en máquinas monoprocesadoras, lo que limita el tipo de crecimiento HW a un crecimiento horizontal, esta limitación provoca que sea un procesador para entornos de entrada, tales como servidores web, servidores de correo, etc. Puede funcionar para la capa de aplicación, siempre que las aplicaciones permitan crecer horizontalmente. Podemos descartar a este procesador, sobre todo por su limitación de crecimiento horizontal, para entornos de BBDD.

Nivel Entrada Aplicación Datos
Valoración Muy Buena Muy Buena Regular

UltraSPARC T2 plus

Cores 8
Threads/core 8
FPU 1:1
L1 inst. 16KB
L1 datos 8KB
L2 4MB, 16-way
L3 NA
i-TLB 64 FA
d-TLB 128 FA

us_t2_plus.gif

El procesador UltraSPARC T2+ es una evolución del US T2 hacia un procesador que pueda ser utilizado en arquitecturas SMP. La única diferencia que hay entre el US T2+ y el US T2, es que el US T2+ dispone de un elemento entre la cache L2 y el controlador de memoria llamado Coherence Unit que permite conectar varios procesadores US T2+.

Podemos decir que este procesador va muy bien en máquinas para la capa de entrada y de aplicación y puede funcionar bien en la capa de datos, dependiendo del tipo de BBDD que se vaya a utilizar.

Nivel Entrada Aplicación Datos
Valoración Muy Buena Muy Buena Buena

Coherence Unit

El Coherence Unit se encarga de mantener coherencia entre las caches L2 de varios procesadores UltraSPÂRC T2+. Su función es sencilla, cuando se realiza una petición al controlador de memoria, lanza esta misma petición contra el CU del otro procesador, para comprobar si el segundo procesador tiene almacenado el dato en su cache L2, si el dato está en la cache L2 de segundo procesador, la CU lo envía al primer procesador, evitando de esta forma, tener que esperar a que el dato venga de la memoria principal, mucho mas lenta que la memoria L2.

¿Granja de threads?

Una vez visto los distintos procesadores SPARC, si nos decidímos emplear máquinas que hagan uso de este tipo de procesador, tanto si elegímos una arquitectura de pocas máquinas con muchos procesadores, como si optamos por muchas máquinas con pocos procesadores, nos enfrentamos al problema de la gestión de los recursos del sistema, CPU, memoria, IPCs, etc. Como hemos podido ver en el post, el modelo de arquitectura en los sistemas está cambiando, ahora los administradores vamos a tener que gestionar de una forma mucho mas eficiente recursos que hasta ahora hemos ignorado un poco, como son la CPU o la memoria, hasta ahora nos hemos centrado en administrar máquinas que daban servicios en lo que se denominaban granjas de máquinas y donde la unidad mínima de gestión, podíamos considerarla como la máquina. Ahora nos enfrentamos a escenarios donde un solo procesador puede ejecutar varias threads en distintos cores, ahora tendremos que administrar esos threads o mas bién los recursos empleados por dichos threads en el sistema, el nuevo modelo de varias (muchas o pocas) máquinas, cada una de las cuales estarán ejecutando muchos threads, podemos considerar que tendremos granjas de threads.

Links

http://blogs.sun.com/timc/entry/comparing_the_ultrasparc_t2_plus

http://blogs.sun.com/deniss/entry/memory_and_coherency_on_the

http://www.hotchips.org/archives/hc19/3_Tues/HC19.09/HC19.09.01.pdf

http://en.wikipedia.org/wiki/Rock_processor