UNIVERSIDAD VERACRUZANA Facultad de Contaduría y Administración Propuesta de implementación de un clúster de altas prestaciones Tesina Para obtener el Título de: Licenciado en Sistemas Computacionales Administrativos Presenta: Erick Samuel Gutiérrez Rendón Asesor: M.C. Rubén Álvaro González Benítez Cuerpo Académico: Tecnologías de la Información y las Organizaciones Inteligentes en la Sociedad del Conocimiento Xalapa-Enríquez, Ver. Agosto 2010 1 2 Dedicatorias 3 ÍNDICE Página Introducción…………………………….…………………………………6 Capítulo 1 1. Computación paralela y de altas prestaciones………...…………............11 1.1. Arquitectura de computadoras………………………………..………………..15 1.2. Computadoras paralelas…………………………………………..……………16 1.3. Modelos de cómputo en paralelo…………………………………..…………..22 Capítulo 2 2. Teoría de los clústeres.……………………………………………….……….24 2.1. Antecedentes……………………………………………………………….……25 2.2. Conceptos…………………………………………………………………….…..30 2.3. Generalidades de los clústeres………………………………………………..35 2.4. Clasificación de clústeres………………………………………………………40 2.5. Ventajas y desventajas………………………………………………………….46 2.6. Retos en la implementación de un clúster………………………………........47 Capítulo 3 3. Arquitecturas y herramientas para Implementación de un clúster……50 3.1. Modelos y arquitecturas………………………………………………………....63 3.2. Software de paralelización……………………………………………………...64 3.3. Estructura de un clúster………………………………………………………....73 4 3.4. Propuesta de implementación de un clúster..………………………………..78 3.5. Propuesta de implementación de un cluster tipo Beowulf…………………106 4. Conclusión……………………………………………………………………..119 5. Fuentes de información….…………………………………………………..122 6. Índice de tablas y figuras……………………………………………………127 V5 INTRODUCCION 6 Actualmente el proceso de globalización económica ha llegado a todos los países, obligando a las empresas y en general a todas las organizaciones que integran el sistema económico y por lo tanto al aparato productivo, a disminuir costos y a ser más eficientes con la finalidad de elevar la competitividad y ampliar la cobertura de sus servicios frente a sus competidores o atender eficazmente a la población en el caso de que se trate de organizaciones públicas o gubernamentales. La misma globalización económica trae consigo el avance y desarrollo de la tecnología así como la transferencia de la misma entre países (aunque esto último se caracteriza por un rezago temporal), lo cual favorece la integración política, cultural y económica entre los países así como fortalece la competencia entre empresas, quienes quieren innovar y ser líderes en su área obteniendo mayores ganancia o asegurándose el mercado. México no es la excepción y las empresas e instituciones buscan ser eficientes adoptando nuevas tecnologías como principal herramienta para lograr su objetivo, especialmente incorporan a su proceso productivo diversos sistemas computacionales que les permiten mejorar su proceso o su producto, más aún, tratándose de sistemas computacionales administrativos tratan de elevar la calidad de su proceso mejorando el control de sus actividades y operaciones, desde el contacto con los proveedores hasta el servicio postventa, pasando por la planeación, producción, dirección y control propios de las organizaciones. Uno de los sistemas computacionales administrativos que permiten reducir y/o eliminar problemas que limitan la competitividad de la empresa es el uso de la computación paralela en las grandes empresas. El presente trabajo recepcional, en la modalidad de tesina, tiene como objetivo general analizar el uso de la computación paralela en las grandes empresas como una opción para elevar la competitividad de las organizaciones a través de la 7 implementación de un sistema tipo clúster que mejora la eficiencia y eficacia de los procesos, favoreciendo la reducción de costos de tales organizaciones. Como objetivos específicos se plantean: 1) Identificar los diferentes elementos que integran un sistema de computación paralela; 2) Describir las ventajas del uso de estos sistemas, 3) Detectar los elementos necesarios para la implementación de los clústeres y 4) Elaborar una propuesta de configuración y puesta en marcha de un sistema de un sistema de computación paralela, específicamente un clúster de alto rendimiento en el centro de cómputo de la Facultad Contaduría y Administración la Universidad Veracruzana zona Xalapa, donde se imparte el programa de licenciatura en Sistemas Computacionales Administrativos. Para el desarrollo del presente trabajo se realizó una exhaustiva revisión de literatura especializada en el tema publicada en libros y principalmente en páginas electrónicas, esto último porque al ser un tema novedoso el principal medio por el que se difunde lo relacionado a los sistemas paralelos y avances recientes en computación es el medio electrónico. En el capítulo uno se presenta las generalidades y especificaciones de la computación paralela y de altas prestaciones, precisando su arquitectura y modelos. En el capítulo dos, se enfoca al marco teórico, presentándose la teoría de los clústeres, necesaria para desarrollar la implementación de los clústeres, tema que se aborda en el capítulo tres, donde además se estudian temas como el software de paralelización, su implementación, los tipos de software existentes y su configuración, incluyendo la estructura de un clúster. También en el capítulo tres, se presenta la propuesta de implementación de un clúster en el centro de cómputo de la Facultad Contaduría y Administración la Universidad Veracruzana zona Xalapa, donde se imparte el programa de licenciatura en Sistemas Computacionales Administrativos. 8 Posteriormente se presentan las conclusiones y finalmente la bibliografía y páginas electrónicas consultadas, así como el índice de tablas del documento. 9 CAPÍTULO 1: Computación paralela y de altas prestaciones 10 1. Computación paralela y de altas prestaciones El Grupo de Investigación de Altas Prestaciones y Paralelismo de la Universidad de Alicante menciona que “las aplicaciones de la computación de altas prestaciones y en concreto el paralelismo se extiende prácticamente a todos los ámbitos donde la programación se manifiesta como útil. En la actualidad, la computación paralela está siendo utilizada en multitud de campos para el desarrollo de aplicaciones y el estudio de problemas que requieren gran capacidad de cómputo, bien por el gran tamaño de los problemas que abordan o por la necesidad de trabajar con problemas en tiempo real. De esta forma, el paralelismo en la actualidad, además de constituir diversas líneas abiertas de intensa labor investigadora, puede encontrarse en infinidad de aplicaciones en campos muy variados, entre los que destacamos: Modelado predictivo y simulación: Se realiza mediante extensos experimentos de simulación por computador que con frecuencia acarrean computaciones a gran escala para obtener la precisión y el tiempo de respuesta deseado. Entre estos modelados destacamos la previsión meteorológica numérica y la oceanografía. El desarrollo industrial también reclama el uso de computadores para progresar en el diseño y automatización de proyectos de ingeniería, la inteligencia artificial y la detección remota de los recursos terrestres. En este campo destacamos: la inteligencia artificial y automatización (procesamiento de imágenes, reconocimiento de patrones, visión por computadora, comprensión del habla, deducción automática, robótica inteligente, sistemas expertos por computadoras, ingeniería del conocimiento, etc.). 11 Investigación médica: En el área médica las computadoras rápidas son necesarias en tomografía asistida, diseño de corazones artificiales, diagnóstico hepático, estimación de daños cerebrales y estudios de ingeniería genética.” La computación paralela divide grandes problemas en partes más pequeñas, a estas divisiones del problema se le conocen como tareas o procesos, y se caracterizan por poder resolverse en forma paralela. Esta solución surge como una respuesta de la arquitectura de computadoras a las crecientes demandas de potencia de cómputo de los usuarios. Tienen una influencia clave el bajo costo de los equipos y el gran desarrollo tecnológico (Ley de Moore, plantea que el número de transistores de un chip se duplica cada dos años). Por otro lado cabe mencionar que es una forma eficaz de procesar la información y favorece la explotación de sucesos concurrentes en el proceso de cómputo. Su objetivo principal es el aumentar el rendimiento de un equipo computacional. Las dos principales características de la computación paralela son: Memoria compartida Paso de mensajes Según los modelos de cómputo existen dos tipos de paralelismo: Funcional.- Se refiere a tareas diferentes que se pueden realizar en paralelo, es inherente en todas las aplicaciones y generalmente tiene un grado de paralelismo bajo. De datos.- Se enfoca a que una misma tarea se ejecuta en paralelo sobre un conjunto de datos, se tiene replicas del mismo programa trabajando sobre partes distintas de los datos, tiene un control centralizado o 12 distribuido, en este caso el grado de paralelismo es muy alto, sin embargo, no está presente en todas las aplicaciones. Existen diversos tipos de métricas para analizar el rendimiento de la implementación del paralelismo. Cabe señalar que el objetivo principal del paralelismo es aumentar el rendimiento de los programas, por otro lado el resultado de la aplicación de los distintos tipos de métricas depende de las capacidades del sistema y del comportamiento del programa. Es importante mencionar algunos conceptos básicos para la mejor comprensión de este tipo de métricas. Tiempo de ejecución.- Es el tiempo que consume un programa desde su inicio hasta su término. Tiempo de CPU.- Es el tiempo que realmente se está ejecutando, es decir el tiempo que tiene asignado el CPU. Tiempo de comunicación.- Tiempo invertido por la aplicación en funciones de comunicación entre procesos. Sobrecarga.- Tiempo total en que la aplicación paralela no hace trabajo útil. Una vez entendidos estos conceptos se mencionarán los distintos tipos de métricas existentes para la obtención del rendimiento de la aplicación del paralelismo según Bosque José Luis (2006), así: Speedup.- Es la ganancia del sistema paralelo, frente al secuencial S = T1_ TN 13 Este tipo de métrica se refiere a que tan rápido es un algoritmo paralelo en comparación a un algoritmo secuencial. Se define a S como el número de procesos, T1 es el tiempo de ejecución de un algoritmo secuencial y TN es el tiempo de ejecución de un algoritmo paralelo con S procesos. Eficiencia.- Se mide en porcentaje, y es el tiempo empleado en un proceso efectivo. E=S = T1_ N TN*N Fracción serie.- Es el porcentaje del programa que no se puede paralelizar. Ley de Amdahl.- Si la fracción serie de un programa es “s” el speedup máximo que se puede alcanzar es 1/s. Speedup= s + p = 1 ____ = 1 s + p/N s + p/N s Ley de Gustafson.- Tiempo constante incrementando el volumen de datos. Aumentar el volumen de datos aumenta el porcentaje de paralelismo. Scaled Speedup= s’ + p’*N = s’ + p’*N= N+ (1-N)*s’ s’ + p’ 14 1.1. Arquitectura de computadoras La clasificación más popular la realizó Flynn (Bosque José Luis, 2006), que clasificó la arquitecturas de acuerdo a los flujos de datos (se les conoce también como data streams) y a los flujos de instrucciones (instructions streams), esta clasificación se muestra en la figura 1. El concepto de flujos de datos se refiere al número de operandos que se pueden procesar al mismo tiempo y el de flujos de instrucciones se refiere a cuántos programas se pueden ejecutar al mismo tiempo. De acuerdo a esta clasificación existen cuatro tipos de computadoras: Single Instruction Stream, Single Data Stream (SISD).- Un solo flujo de instrucciones y un solo flujo de datos. Arquitectura Von Neuman. Single Instruction Stream, Multiple Data Stream (SIMD).- Un solo flujo de instrucciones y varios flujos de datos. Sus características principales son, entre otras, cuenta con una sola unidad de control que despacha instrucciones a todos los elementos de procesamiento (EP), todas las unidades de proceso ejecutan la misma instrucción. Algunas computadoras comerciales que cuentan con este tipo de arquitectura son: Illiac IV, MPP, DAP, CM-2, MasPar MP1 y MasPar MP2. Arquitecturas vectoriales. Multiple Instruction Stream, Single Data Stream (MISD).- Varios flujos de instrucciones y un solo flujo de datos. No hay implementaciones. Multiple Instruction Stream, Multiple Data Stream (MIMD).- Varios flujos de instrucciones y varios flujos de datos. Algunas características son: todos los elementos de procesamiento (EP) poseen su propia unidad de control, todas las unidades de proceso ejecutan su propio programa. Algunas máquinas comerciales con esta arquitectura son el nCUBE2, iPSC, Symmetry, FX-8, FX-2800, TC-2000, CM-5, KSR-1 y la Paragon XP/S. 15 Es importante conocer la organización de la memoria en la arquitectura MIMD, esta se divide en: Arquitectura de paso de mensajes.- Cada procesador tiene su memoria local o privada, cada procesador puede comunicarse con los demás solo a través del paso de mensajes, a estas computadoras suelen denominarse multicomputadoras (conjunto de máquinas Von Neumann (procesador + memoria local) conectadas a un bus común, a través del cual se pueden comunicar los procesadores y en particular pueden hacer operaciones de lectura y escritura sobre memorias de maquinas remotas). Cabe mencionar que las multicomputadoras están divididas en MPPs (Massively Parallel Processors) y NOWs/COWs (Network/Clúster Of Workstations). Los MPPs son supercomputadoras demasiado caras compuestas por varios CPU’s “estrechamente acoplados” por una interconexión de alta velocidad, dos ejemplos conocidos de éste tipo de supercomputadoras son “CRAY T3E” y SP/2 de IBM. Por otro lado los NOWs, los cuales son conocidos también como COWs, consisten en PC’s regulares o estaciones de trabajo (Workstation) “finamente acoplados” por la tecnología de interconexión comercial. Sus ventajas son.o La escalabilidad.- Las computadoras con sistemas de memoria distribuida son fáciles de escalar, debido a la demanda de los recursos se puede agregar más memoria y procesadores. Sus desventajas son.o El acceso remoto a memoria es lento. o La programación puede ser complicada. 16 Arquitectura de memoria compartida.- Todos los procesadores comparten toda la memoria. Con esto se tiene tiempo de acceso a memoria uniformes, ya que todos los procesadores se encuentran igualmente comunicados con memoria principal, además el acceso a memoria es por medio de un solo canal. En esta configuración debe asegurarse que los procesadores no tengan acceso simultáneamente a regiones de memoria de una manera en la que pueda ocurrir algún error. Sus ventajas son.o Facilidad de la programación. - Es mucho más fácil programar en estos sistemas que en sistemas de memoria distribuida. o Las computadoras MIMD con memoria compartida son sistemas conocidos como de multiprocesamiento simétrico (SMP), donde múltiples procesadores comparten un mismo sistema operativo y memoria. Otro término con que se conoce es máquinas firmemente juntas o de multiprocesadores. Sus desventajas son.o El acceso simultáneo a memoria es un problema. o Poca escalabilidad de procesadores, debido a que se puede generar un cuello de botella en el número de CPU’s. o En computadoras vectoriales como la Cray, todas las CPU tienen un camino libre a la memoria. No hay diferencia entre las CPU’s. o La razón principal por el alto precio de Cray es la memoria. 17 Arquitectura Non Uniform Memory Arquitecture (NUMA).- Además de la memoria compartida, cada procesador tiene una memoria local para guardar el programa y los datos no compartidos. En este caso disminuye el acceso a la red por parte de cada procesador haciendo más eficiente el acceso a memoria. Arquitectura Cache Only Memory Arquitecture (COMA).- Solo quedan las memorias locales para cada procesador y cada procesador puede acceder a la memoria de cualquier otro, se le conoce como memoria virtual. 18 A continuación se presenta un pequeño cuadro comparativo de las arquitecturas SIMD y MIMD. SIMD Requiere menos hardware: 1 unidad de MIMD Requiere más hardware. control. Necesita menos memoria: 1 sola copia del Necesita memoria para cada uno de los programa. programas. Adecuada para programas de datos Puede ejecutar varias tareas al mismo paralelos: Se requiere el mismo programa tiempo o emular un procesador SIMD sobre un gran número de datos. mediante mecanismos de sincronización. Menos tiempo de arranque para Para comunicarse es necesario usar comunicarse con los vecinos: Debido a que mecanismos de sincronización. posee un reloj global. Más costosa: Se requiere diseñar un Más barata: Se pueden construir usando microchip de arquitectura especial. procesadores SISD de propósito general a gran escala, los cuales son muy baratos debido a la economía de escala. Tabla 1.- Comparación de arquitecturas SIMD y MIMD 19 Figura 1.- Esquema de la clasificación de computadoras. *Fuente.- Sesión 1: Arquitectura Paralela Basada en Cluster 1.2. Computadoras paralelas. Una computadora paralela es un conjunto de procesadores que son capaces de trabajar en colaboración para resolver un problema computacional. Esta definición es suficientemente amplia para incluir supercomputadoras paralelas que tienen cientos de miles de procesadores, redes de estaciones de trabajo, entre otros. Los ordenadores paralelos son interesantes porque ofrecen la posibilidad de concentrar los recursos computacionales (memoria y procesadores) sobre importantes problemas de cálculo. 20 El paralelismo a veces ha sido visto como una sub-área extraña de la informática, interesante, pero de poca relevancia para el programador medio. La programación paralela se está convirtiendo en parte fundamental para la empresa de programación. En la actualidad la computación paralela está siendo utilizada en multitud de campos para el desarrollo de aplicaciones y el estudio de problemas que requieren gran capacidad de cómputo, ya sea por el gran tamaño de los problemas que abordan o por la necesidad de trabajar con problemas en tiempo real. De esta forma, el paralelismo en la actualidad, además de constituir diversas líneas abiertas de intensa labor investigadora, puede encontrarse en una infinidad de aplicaciones en campos muy variados, entre los que se destacan. Modelo predictivo y simulación.- Se realiza mediante extensos experimentos de simulación por computador que con frecuencia acarrean computaciones a gran escala para obtener la precisión y el tiempo de respuesta deseado. Entre otros modelos se puede destacar la previsión meteorológica, numérica y la oceanografía. El desarrollo industrial también reclama el uso de computadores para progresar en el diseño y automatización de proyectos de ingeniería, la inteligencia artificial y la detección remota de los recursos terrestres. En este campo se puede destacar la inteligencia artificial y automatización (procesamiento de imágenes, reconocimiento de patrones, visión por computador, comprensión del habla, ente otras.) Investigación médica.- En el área médica las computadoras rápidas son necesarios en tomografía asistida, diseño de corazones artificiales, diagnostico hepático, estimación de daños cerebrales y estudios de ingeniería genética. 21 1.3. Modelos de computo en paralelo En primer lugar se debe conocer que un clúster es un tipo de computador paralelo o distribuido que consiste en un tipo de computadoras independientes pero interconectadas entre sí que trabajan conjuntamente como un único recurso para resolver un problema común, de igual manera puede ser un multiprocesador “casero”, esto es que utiliza componentes comerciales, baratos y potentes (COTS). Ahora bien, los clústeres se pueden clasificar atendiendo a diversos factores como a continuación se menciona: Aplicación Alto rendimiento Alta fiabilidad Diseñado para la implementación de Diseñado para aplicaciones criticas, en alto coste computacional. las que lo importante es la disponibilidad más que el rendimiento. Según el propietario de los nodos Dedicado No dedicado La aplicación paralela se ejecuta en Cada nodo tiene un propietario y las todo el sistema si ningún tipo de aplicaciones paralelas se ejecutan en el restricción. tiempo en que los nodos están ociosos (ciclos libres). Configuración del clúster Homogéneo Heterogéneo La arquitectura (hardware y software) Los nodos tiene diferentes de todos los nodos es la misma. características, en cuanto a hardware o software. Tabla 2.- Clasificación de los Clústeres. 22 CAPÍTULO 2: Teoría de los Clústeres 23 2. Teoría de los clústeres En este capítulo se mencionarán algunos antecedentes de los clústeres, las causas que originaron su desarrollo e implementación en las grandes empresas que necesitan de la resolución de problemas grandes en tiempos cortos y a bajo costo. Se explicarán algunos conceptos básicos de los clústeres para su mayor entendimiento, de la misma manera se darán a conocer las generalidades de los clústeres con el objetivo de crear un conocimiento general de los componentes de los mismos. La clasificación de los clústeres es un tema importante, el cual de la misma manera se mencionara y explicará en el presente capítulo, con el fin de poder identificar los tipos de clústeres existentes, cuáles son sus objetivos, sus componentes, rendimiento, entre otras características propias de cada uno de ellos. Otro punto importante en este capítulo son las ventajas y desventajas de los clústeres en su implementación así como los retos que se tienen al llevarlos a cabo. 24 2.1. Antecedentes La base formal de que la ingeniería informática puede ser utilizada como un medio para la elaboración de trabajos paralelos de cualquier tipo fue posiblemente inventada por Gene Amdahl de IBM, que en 1967 publicó lo que ha llegado a ser considerado como el papel inicial de procesamiento paralelo conocido como “Ley de Amdahl” (indica la mejora de rendimiento que se puede esperar incrementando los elementos de procesamiento. Esta ley toma en cuenta la parte secuencial del proceso, es decir, aquella que independientemente de cuantos elementos de procesamiento tengamos, puede ser realizada por solo uno de ellos; y el resto del cálculo no podrá continuar hasta que se haya completado la parte secuencial). Esta ley define la base para la ingeniería de la computación tanto para multiprocesador y computación clúster, en donde la principal diferencia es si las comunicaciones interprocesador cuentan con el apoyo dentro de la computadora, por ejemplo, en una configuración personalizada para el bus o la red de comunicaciones internas, o fuera del ordenador en una red “commodity”. Es importante mencionar que la historia de los primeros grupos de computadoras se puede ligar directamente a la historia de los principios de las redes, siendo la principal motivación el desarrollo de una red para enlazar los recursos de computación, de hecho el realizar la creación de un clúster de computadoras. Las redes de conmutación de paquetes fueron conceptualmente inventados por la corporación RAND en 1962. Usando el concepto de una red de conmutación de paquetes, el proyecto ARPANET ((Red de la Agencia de Proyectos de Investigación Avanzada) logró crear en 1969 lo que fue posiblemente la primera red de computadoras básicas basadas en el clúster de computadoras por cuatro tipos de centros informáticos. 25 Dicho proyecto creció y se convirtió en lo que actualmente se conoce como internet, considerándose como “la madre de todos los clústeres”. El primer producto comercial de tipo clúster fue ARCnet, desarrollada en 1977 por Datapoint pero no tuvieron un éxito comercial y los clústeres no consiguieron tener éxito hasta que en 1984 VAXclúster produjera el sistema operativo VAX/VMS. Estos productos no solo apoyan a la computación paralela, sino que también comparten los archivos y dispositivos periféricos. La idea original de estos sistemas era proporcionar las ventajas del procesamiento paralelo, al tiempo que se mantiene la fiabilidad de los datos y el carácter singular. VAXclúster y VMSclúster están aún disponibles en los sistemas de HP OpenVMS corriendo en sistemas Itanium y ALpha. Otros dos principios comerciales de clústeres notables fueron el Thandem Himalaya (alrededor de 1994 con productos de alta disponibilidad) y el IBM S/390 Parallel Sysplex también alrededor de 1994, este con fines empresariales. Por otro lado se encuentra el software de Parallel Virtual Machine (PVM). Este software de fuente abierta basado en comunicaciones TCP/IP permitió la creación de un superordenador virtual (un clúster HPC) realizada desde cualquiera de los sistemas conectados TCP/IP. De forma libre los clústeres heterogéneos han constituido la cima de este modelo logrando aumentar rápidamente en FLOPS (operaciones de punto flotante que sirven para medir el rendimiento de una computadora) globalmente y superando con creces la disponibilidad incluso de los más caros superordenadores. El empleo de PC, PVM y redes de bajo costo dio como resultado en 1993 la creación de un clúster desarrollado por la NASA, Discover. 26 A continuación se mencionaran de manera rápida algunos otros clústeres importantes. En 1995 se desarrollo el clúster “Beowulf” diseñado según un producto básico de la red con el objetivo especifico de ser un superordenador capaz de realizar firmemente y de manera paralela cálculos de tipo HPC. Este clúster fue construido por Donald Becker y Thomas Sterling, implemento 16 computadoras personales con procesadores Intel DX4 de 200Mhz, los cuales estaban conectados a través de un switch Ethernet. Su rendimiento teórico era de 3.2 GFlops. Berkeley NOW fue conformado por 105 estaciones de trabajo Sun Ultra 170, conectadas a través de una red Myrinet (red de interconexión de clústeres de altas prestaciones, físicamente consiste en dos cables de fibra óptica, upstream y downstream, conectados con un único conector. La conexión suele realizarse mediante conmutadores y encaminadores, tiene tolerancia a fallos, con control de flujo, control de errores y monitarizacion de la red. Su rendimiento alcanza las latencias de 3 microsegundos y tiene un ancho de banda de 10 Gbps). Cada estación de trabajo contenía un microprocesador Ultra1 de 167 MHz, caché de nivel 2 de 512 KB, 128 Mb de memoria, dos discos de 2.3 GB, tarjetas de red Ethernet y Myrinet. En 1997 este clúster logró un rendimiento de 10 GFlops. En el año de 2003 Google llego a estar conformado por 15 000 computadoras personales, en promedio una consulta lee cientos de megabytes y consume algunos billones de ciclos del CPU. Clúster PS2 desarrollado en el año de 2004 en la Universidad de Illinois en Estados Unidos, utilizando consolas Play Station 2 en cómputo científico y visualización de alta resolución, se emplearon 70 PS2 y un kit de Sony Linux (basado en Linux Kondora y Linux Red Hat). 27 Clúster X en la lista “Top 500” de noviembre de 2004, fue considerado el séptimo sistema clúster mas rápido, sin emabargo para julio de 2005 ocupa el puesto catorce. Fue construido en el Tecnológico de Virginia en el 2003; su instalación fue realizada por estudiantes del dicho tecnológico. Está constituido por 2200 procesadores Apple G5 de 2.3 GHz. Utiliza dos redes: Infiniband 4x para las comunicaciones entre procesos y Gigabit Ethernet para la administración. Clúster X posee 4 Terabytes de memoria RAM y 176 Terabytes de disco duro, su rendimiento es de 12.25 TFlops. Se le conoce también como Terascale. Thunder fue construido por el Laboratorio Nacional Lawrence Livermore de la Universidad de California. Está conformado por 4096 procesadores Intel Itanium2 Tiger4 de 1.4GHz. Utiliza una red basada en tecnología Quadrics. Su rendimiento es de 19.94 TFlops. Se ubicó en la segunda posición del “TOP 500” durante junio de 2004, luego en la quinta posición en noviembre de 2004 y en la lista de julio de 2005 se ubicó en la séptima posición. ASCI Q fue construido en el año 2002 por el Laboratorio Nacional Los Álamos, Estados Unidos. Está constituido por 8192 procesadores AlphaServer SC45 de 1.25 GHz. Su rendimiento es de 13.88 TFlops. Se ubicó en la segunda posición del “TOP 500” durante junio y noviembre de 2003, luego en la tercera posición en junio de 2004, en la sexta posición en noviembre de 2004 y en la duodécima posición en julio de 2005. Red Española de Supercomputación, esta red fue creada en el año 2007, está compuesta por 7 clústeres distribuidos en distintas instituciones españolas, ente los que se encuentra el supercomputador Marenostrum. En el Instituto de Investigación en Ingeniería de Aragón, se emplea HERMES (se estudiará a detalle posteriormente), este clúster de 28 computación es utilizado por los miembros de dicho instituto para realizar simulaciones y cálculos numéricos de muy alto rendimiento. Por mencionar algunos de los trabajos realizados dentro de HERMES están: Simulación de prótesis mejoradas. Tratamiento de imágenes biomédicas. Análisis de señales biológicas. Desarrollo de interfaces orales En nuestro país se encuentra THEOS, este clúster está basado en tecnología Intel, se encuentra implementado en el Centro Nacional de Procesado Sismológico de PEMEX Exploración y Producción (CNPS), THEOS apoyo en la instalación del citado hardware (1024 servidores IBM X-330, de dos procesadores cada uno, 2 Gb en RAM, dos discos de 36 Gb cada uno, mas 8 servidores X-342 de dos procesadores), en Villahermosa Tabasco. De igual manera importantes avances en la tecnología y arquitectura de los microprocesadores han llevado a una gran evolución de sus prestaciones: ley de Moore; es un antecedente más de la aparición de los clústeres. 29 2.2. Conceptos. Es importante mencionar algunas definiciones básicas para el mejor entendimiento del funcionamiento de los clústeres: Rendimiento.- Es la efectividad del desempeño de una computadora, sobre una aplicación o un benchmark (técnica utilizada para medir el rendimiento de un sistema o componente de un sistema) en particular. En las mediciones de rendimiento están involucrados velocidad, costo y eficiencia. Alto Rendimiento (HPC).- Gran demanda de procesamiento de datos en procesadores, memoria y otros recursos de hardware, donde la comunicación entre ellos es muy rápida. Recurso (resource).- Se trata de un componente hardware (disco físico, red) o software (dirección IP, nombre de red, script...) que forma parte del clúster. Entre los recursos se producen dependencias que se han de reflejar en la configuración de los mismos. Grupo (group).- Es una agrupación de recursos, un grupo de recursos es la única unidad del clúster donde se puede realizar failover (modo de operación de backup o respaldo en el cual las funciones de un componente del sistema son asumidas por un segundo componente del sistema cuando el primero no se encuentra disponible debido a un fallo ó un tiempo de parada preestablecido. Es usado para hacer a los sistemas más tolerantes a fallos, y de esta forma hacer el sistema permanentemente disponible), cuando esto ocurre se mueven todos los recursos que lo componen de un nodo a otro. Esta es la razón que los diferentes recursos componentes de un servicio o instancia de aplicación se agrupen en un mismo grupo, un recurso determinado no puede pertenecer a más de un grupo de recursos. 30 Cada grupo tiene una lista de nodos (prefered owner) que por orden de preferencia se escogen a la hora de determinar hacia que nodo mover el grupo cuando se realiza un failover. Quorum.- Es un disco usado para compartir, entre los distintos nodos, información respecto a la configuración del clúster. Shared Quorum.- Se trata de la configuración más habitual y recomendada, todos los clústeres comparten el acceso a este recurso de disco físico. Local Quorum.- Aquí el quorum se localizaría en uno de los discos locales de uno de los nodos del clúster, este tipo de configuración solo tienen sentido para recuperación de desastres o durante mantenimientos o fallos del disco compartido de quorum. Nodo.- Se refiere a una computadora sola que contiene recursos específicos, tales como memoria, interfaces de red, uno o más CPU, etc. Escalabilidad.- Generalmente se mide la eficiencia de un problema, utilizando un tamaño y un número de procesadores fijo, pero esto es insuficiente, pues los resultados serán diferentes cuando se aumente o disminuya el tamaño del problema y el número de procesadores. Esto es, existe un problema de escalabilidad. Cuando se aumenta el número de procesadores para el mismo tamaño del problema, la sobrecarga debido al paralelismo (comunicaciones, desbalanceo de carga), aumenta y similarmente podemos tener casos en donde el tamaño del problema es muy pequeño para tener una evaluación real del problema sobre cierta máquina. 31 Balanceo de carga.- Lo ideal en el procesamiento paralelo es que cada procesador realice la misma cantidad de trabajo, donde además se espera que los procesadores trabajen al mismo tiempo. La meta del balanceo de carga es minimizar el tiempo de espera de los procesadores en los puntos de sincronización. Alta disponibilidad.- Es la capacidad de mantener operativas los servicios y operaciones del corazón del Negocio continuamente, eliminando los problemas comunes de los sistemas de información de su organización, además, la información se encuentra consolidada y en el caso de una pérdida de datos o problemas de servicios, otra máquina tomará el rol de la principal, pudiendo tener un sistema continuo de datos sin afectar el negocio. Se divide en dos tipos.o Alta disponibilidad de Hardware.- Redundancia de Hardware. Si se produce un fallo de hardware en alguna de las máquinas del clúster (falla fuente de poder, punto de red, cable o tarjeta de red, falla de controladora de discos, switch, etc.), si nuestra configuración del equipamiento computacional lo permite, podremos cambiar nuestro hardware en caliente (HotSwap) sin tener que bajar los servicios de nuestra empresa. o Alta disponibilidad de Aplicaciones.- Si se produce un fallo de las aplicaciones de alguna de las máquinas del clúster, el software de alta disponibilidad es capaz de re arrancar automáticamente los servicios que han fallado en cualquiera de las otras máquinas del clúster. Y cuando la máquina que ha fallado se recupera, los servicios son nuevamente migrados a la máquina original. Esta capacidad de recuperación automática de servicios nos garantiza la integridad de la información, ya que no hay pérdida de datos. Y 32 además evita molestias a los usuarios, que no tienen por qué notar que se ha producido un problema. Sistemas operativos.- Es el software básico de una computadora que provee una interfaz entre el resto de programas del ordenador, los dispositivos hardware y el usuario. Las funciones básicas del Sistema Operativo son administrar los recursos de la máquina, coordinar el hardware y organizar archivos y directorios en dispositivos de almacenamiento. Los Sistemas Operativos más utilizados son Dos, Windows, Linux y Mac. Algunos SO ya vienen con un navegador integrado, como Windows que trae el navegador Internet Explorer. Midleware.- Software que generalmente actúa entre el sistema operativo y las aplicaciones con la finalidad de brindar a un clúster.o Interfaz única de acceso al sistema. o Herramientas para la optimización y rendimiento del sistema. o Escalabilidad. Compilador.- Un compilador es un programa que traduce otro programa escrito en un lenguaje de programación llamado código fuente, en un programa equivalente al lenguaje de computadora llamado ejecutable ó binario. Computadora vectorial.- Posee un conjunto de unidades funcionales utilizados para procesar vectores eficientemente. Contiene registros vectoriales para operar sobre ellos en un solo ciclo de reloj. Computadora paralela.- Máquina con dos o más procesadores que pueden trabajar simultánea y/o coordinadamente. Estas pueden ser de dos tipos (como se mencionó en el capitulo anterior) MIMD y SIMD. 33 Eficiencia.- Es la relación entre el costo computacional y el funcionamiento del clúster; y lo que indica es qué tan eficazmente se está utilizando el hardware, la forma de calcularla se especificó en el capitulo anterior. Flops.- Un flop es utilizado para medir operaciones de punto flotante (expresión de un número mediante un exponente y una mantisa, ejemplo, 10.75 queda expresado como, 1.075 [esta es la mantisa] * 10 1 [este es el exponente]) por segundo. Es una medida de la velocidad del procesamiento numérico del procesador. Se utilizan en unidades de millones de flops (MegaFlops), Miles de Millones de flops (GigaFlops), etc. Kernel.- También conocido como núcleo; es la parte fundamental de un sistema operativo. Es el software responsable de facilitar a los distintos programas acceso seguro al hardware de la computadora. Memoria compartida.- En una máquina paralela existe una sola memoria que puede ser accedida por todos los procesadores. Memoria distribuida.- Cada uno de los procesadores de un multiprocesador tiene asociado a él una unidad de memoria. Paralelismo.- Consiste en el procesamiento de una serie de instrucciones de programa que son ejecutables por múltiples procesadores que trabajan de manera independiente. Existen dos formas conocidas de hacer paralelismo: una es en hardware y otra en software. Por hardware depende de la tecnología de cómputo y la de software se refiere a la habilidad del usuario para encontrar áreas bien definidas del problema que se desea resolver, de tal forma que éste pueda ser dividido en partes que serán distribuidas entre los nodos del clúster. 34 Proceso.- Un proceso es básicamente un programa en ejecución. Cada proceso tiene asociado un espacio de direcciones, es decir una lista de posiciones de memoria desde algún mínimo hasta algún máximo que el proceso puede leer y escribir. Speedup (velocidad).- Se define como el tiempo que tarda en ejecutarse el mismo programa en un solo procesador, dividido entre el tiempo que toma ejecutarse el mismo programa en 2.3. procesadores. Generalidades de los clústeres. ARQUITECTURA Un clúster está formado por nodos de cómputo y una red de comunicación, dichos nodos puede ser un ordenador convencional o un sistema multiproceso con su propia memoria y sistema operativo. Cabe mencionar que estos nodos pueden estar incluidos en una sola cabina (llamada también "rack"), o conectados por medio de una LAN. Los componentes que forman un sistema de este tipo son. Un conjunto de ordenadores de altas prestaciones. Sistemas operativos basados en microkernel o estratificados. Redes de interconexion de altas prestaciones (myrinet, Gigabitt, Infiniband). Tarjetas de conexión a red de alta velocidad. Protocolos y servicios de comunicación a alta velocidad Midleware que está compuesto por dos subniveles de software, el cual se explicará con más detalle en el siguiente punto. Entornos y herramientas de programación paralela, compiladores paralelos, Java, PVM, MPI, estos componentes se muestran en la figura 2. 35 Figura 2.- Arquitectura de un clúster. *Fuente.- Sesión 1: Arquitectura Paralela Basada en Clústeres 36 MIDLEWARE Está compuesto de dos subniveles de software. La imagen de sistema única (SSI Single System Image) que ofrece a los usuarios un acceso unificando todos los recursos del sistema. Disponibilidad del sistema que permite servicios como puntos de chequeo, recuperación de fallos, soporte para tolerancia a fallos. Es importante señalar que la imagen de sistema único proporciona al usuario una visión unificada del clúster como un único recurso o sistema de cómputo. Esta imagen está soportada precisamente por el nivel midleware que está entre el sistema operativo y las aplicaciones de usuario y tiene básicamente dos subsistemas que son. Infraestructura de imagen del sistema único.- Junto al sistema operativo está presente en todos los nodos y proporciona un acceso unificado a todos los recursos del sistema. Infraestructura de disponibilidad del sistema.- Posibilita servicios propios del clúster como puntos de chequeo, recuperación automática de fallos y soporte para tolerancia a fallos. Algunos objetivos de esta tecnología son. Presentar una completa transparencia al usuario de forma que este no tenga que preocuparse de detalles de bajo nivel en la implementación, ni de cómo gestionar el sistema para optimizar su rendimiento. Por otro lado, la escalabilidad del sistema, ya que los clústeres pueden ampliarse fácilmente añadiendo nuevos nodos, las aplicaciones deben ejecutarse de forma eficiente en un rango amplio de tamaños de maquinas. 37 Por último, también es importante la disponibilidad del sistema para soportar las aplicaciones de los usuarios, esto, como se menciono anteriormente, por medio de técnicas de tolerancia a fallos y recuperación automática sin afectar a las aplicaciones de los usuarios. Existen diversos tipos de midleware, entre los que se encuentran. MOSIX.- Es una herramienta diseñada para realizar balanceo de cargas en el clúster de forma totalmente transparente de forma tal que los nodos del clúster se comportan como una sola máquina, y de esta manera incrementar el aprovechamiento de cada uno de los nodos. De igual manera también se puede observar el comportamiento del clúster, para esto se utiliza el monitor de carga de MOSIX llamado MON. Otra aplicación que vale la pena mencionar es MPS la cual da un reporte del status de procesos multicomputadores. Por otro lado cabe señalara que es un parche para el kernel de Linux que le da la capacidad de ejecución distribuida de procesos, lo que permite el desarrollo de una supercomputadora. OpenMOSIX.- Es un parche para el kernel Linux que permite a varias máquinas actuar como un sistema multiprocesador grande. Lo que hace OpenMosix es balancear la carga de trabajo entre todos los nodos que forman el clúster: migra los procesos, independientemente de en qué nodo se han originado, al nodo con menos carga de trabajo. Su mayor ventaja es que las aplicaciones no tienen que estar programadas específicamente para OpenMosix ya que trabaja con aplicaciones normales (no paralelizadas), siendo su funcionamiento transparente al usuario. Pero tiene una limitación: sólo migra procesos que no usen memoria compartida, por lo que no migra procesos multi-hilo (característica que permite a una aplicación realizar varias tareas a la vez). 38 OpenMosix está formado por los siguientes componentes: o un parche para el kernel Linux. o herramientas para la línea de comandos y para el entorno gráfico. o el script de inicio /etc/init.d/openmosix. Cóndor.- El objetivo del Proyecto Cóndor ® es desarrollar, implementar, desplegar y evaluar los mecanismos y políticas que apoyen a la Computación de Alto Rendimiento (HTC) en grandes colecciones de recursos informáticos de propiedad distributiva. Guiados por los retos tecnológicos y sociológicos de este entorno informático, el Equipo Cóndor ha sido la creación de herramientas de software que permitirá a los científicos e ingenieros aumentar su rendimiento informático. OpenSSI.- El proyecto de OpenSSI es una solución que arracima comprensiva que ofrece un ambiente completo, altamente disponible de SSI para Linux. Las metas para los racimos de OpenSSI incluyen la disponibilidad, la escalabilidad y la flexibilidad, construidos de los servidores estándares. El middleware recibe los trabajos entrantes al clúster y los redistribuye de manera que el proceso se ejecute más rápido y el sistema no sufra sobrecargas en un servidor. Esto se realiza mediante políticas definidas en el sistema (automáticamente o por un administrador) que le indican dónde y cómo debe distribuir los procesos, por un sistema de monitorización, el cual controla la carga de cada CPU y la cantidad de procesos en él. 39 El middleware también debe poder migrar procesos entre servidores con distintas finalidades: Balancear la carga.- Si un servidor está muy cargado de procesos y otro está ocioso, pueden transferirse procesos a este último para liberar de carga al primero y optimizar el funcionamiento. Mantenimiento de servidores.- Si hay procesos corriendo en un servidor que necesita mantenimiento o una actualización, es posible migrar los procesos a otro servidor y proceder a desconectar del clúster al primero. Priorización de trabajos.- En caso de tener varios procesos corriendo en el clúster, pero uno de ellos de mayor importancia que los demás, puede migrarse este proceso a los servidores que posean más o mejores recursos para acelerar su procesamiento. 2.4. Clasificación de clústeres. Como se mencionó en el capítulo anterior existen tres métodos de clasificar a los clústeres, por su aplicación, según el propietario de los nodos, y la configuración del clúster, en este apartado se describirá con mayor detalle cada una de estas clasificaciones. Según su aplicación Los clústeres de Alto Rendimiento (HP), son utilizados para problemas que requieren considerable poder de procesamiento. Por mencionar algunos campos donde se aplican dichos sistemas existen. Procesamiento de imágenes.- Rendering (Se refiere al proceso de generar una imagen desde un modelo. Generalmente se utiliza en el campo de los 40 animadores o productores audiovisuales y en programas de diseño en 3D), Reconocimiento de patrones. Investigación.- Física, ciencia de Bio-información (por ejemplo, estudio de cadenas de ADN), Bioquímica y Biofísica. Industria.- Estudios Geológicos (extracción de minerales), Simulación Matemática. Su objetivo principal es alcanzar el mayor rendimiento en la velocidad de procesamiento de datos, como ya se menciono anteriormente. Este tipo de tecnología permite que un conjunto de computadoras trabajen en paralelo, dividiendo el trabajo en varias tareas más pequeñas las cuales se pueden realizar en forma paralela. Es independiente del hardware que se utilice en su desarrollo, pudiendo adaptarse a cualquier tipo de servidores, dispositivos de red, configuraciones, etc. Se puede incrementar el número de nodos arbitrariamente. Son utilizados de igual manera para el descifrado de códigos. Los motivos para utilizar un clúster de alto rendimiento son dos, la complejidad del problema a resolver y el precio de la máquina necesaria para resolverlo. Un tipo de software para realizar un clúster de alto rendimiento es OSCAR (Open Source Clúster Application Resources) distribuido bajo licencia GLP. Este software trabaja bajo licencia LINUX. En Windows podría ser desarrollado sobre “WCC 2003” (Windows Computer Clúster). 41 Por otro lado se encuentran los clústeres de Alta Fiabilidad o Alta Disponibilidad, este tipo de sistema es utilizado cuando el costo de la posible falta de servicio supera el costo de implementar un sistema en clúster, por ejemplo. Sistemas de facturación y/o transacción Operaciones bancarias Comercio electrónico Es un conjunto de dos o más maquinas que se caracterizan por mantener una serie de servicios compartidos y por estar constantemente monitoreándose entre sí. Se puede dividir en dos subclases más, estas son. Alta disponibilidad de infraestructura.- Si se produce un fallo de hardware en alguno de los componentes del clúster, el software de alta disponibilidad será capaz de arrancar automáticamente los servicios en cualquiera de los otros componentes del clúster, a esto se le conoce como failover, por otro lado cuando dicho componente se recupere, el software será capaz de migrar nuevamente los servicios a la máquina original, esto es failback. . esta capacidad de recuperación automática de servicios garantiza la alta disponibilidad de los servicios ofrecidos por el clúster, minimizando así la percepción del fallo por parte de los usuarios. Alta disponibilidad de aplicación.- Si se produce un fallo del hardware o de las aplicaciones de alguna de las máquinas del clúster, el software de alta disponibilidad es capaz de arrancar automáticamente los servicios que han fallado en cualquiera de las otras maquinas del clúster. Y cuando la máquina original se recupera es migrada la información de nuevo a ella. Esto garantiza la integridad de información ya que no hay pérdida de datos. 42 Según el propietario de los nodos (nodos dedicados y no dedicados) En informática, de forma muy general, un nodo es un punto de intersección o unión de varios elementos que confluyen en el mismo lugar, sin embargo dependiendo del área de la informática en la que vaya dirigida la palabra nodo, tiene varios significados. En redes de computadoras cada una de las maquinas es un nodo, y si la red es internet, cada servidor constituye también un nodo. En estructuras de datos dinámicas un nodo es un registro que contiene un dato de interés y al menos un puntero para referenciar a otro nodo. En este caso debemos enfocarnos a los nodos dentro del área de las redes computacionales. De esta manera, un clúster puede estar conformado por nodos dedicados y no dedicados. En un clúster con nodos dedicados, los nodos no disponen de teclado, mouse ni monitor y su uso esta exclusivamente dedicado a realizar tareas relacionadas con el clúster. Mientras que en un clúster con nodos no dedicados, los nodos disponen de teclado, mouse y monitor, y su uso no está exclusivamente dedicado a realizar tareas relacionadas con el clúster, en este caso el clúster hace uso de los ciclos de reloj que el usuario del computador no está utilizando para realizar sus tareas. Es importante aclarar que a la hora de diseñar un clúster, los nodos deben tener características similares, es decir, deben tener características similares, es decir, deben guardar cierta similaridad de arquitectura y sistemas operativos, ya que si se conforma un clúster con nodos totalmente heterogéneos (es decir que existe un gran diferencia entre capacidad de procesadores, memoria, entre otros) será ineficiente debido a que el middleware delegara o asignará todos los procesos al nodo de mayor capacidad de cómputo y solo distribuirá cuando este se encuentre saturado de procesos; por eso es recomendable construir un grupo de ordenadores lo mas similar posible. 43 Según la configuración del clúster En este caso cabe señalar que un clúster puede ser homogéneo o heterogéneo. Esta clasificación se desprende del punto anterior (según el propietario de los nodos). Donde se debe entender por clúster heterogéneo al grupo de nodos con características similares y clúster homogéneo donde los nodos son diferentes tanto en su hardware y software. Por otro lado se puede realizar una segunda clasificación en base a sus características. Esta es. Alto rendimiento (High Performance) Es un conjunto de ordenadores que está diseñado para dar altas prestaciones en cuanto a capacidad de cálculo. Los motivos de su implementación son, por mencionar algunos, el tamaño del problema a resolver y el precio de la máquina para resolver dicho problema. Por medio de este tipo de clústeres se pueden conseguir capacidades de cálculo superiores a las de un ordenador más caro que el costo conjunto de los ordenadores del clúster. Para garantizar esta capacidad de cálculo, los problemas necesitan ser paralelizables, ya que el método con el que los clústeres agilizan el procesamiento es dividir el problema en problemas más pequeños y calcularlos en los nodos, por lo tanto, si el problema no cumple con esta característica, no puede utilizarse el clúster para su cálculo. Para que un problema sea paralelizable se debe hacer uso de las librería especiales como la PVM (Parallel virtual machine) o MPI (Message passage interface), donde la primera es usada especialmente en clúster con nodos heterogéneos (arquitectura del procesador, sistemas operativo, entre otras), y 44 pertenecientes a diferentes dominios de red, la segunda librería usada para clúster homogéneos Un tipo de software para realizar clúster high performace es OSCAR (Open Source Cluster Application Resources) distribuido bajo licencia GPL. Este software trabaja sobre el sistema operativo Linux. En Windows se podría utilizar "WCC 2003" (Windows Computer Cluster). Alta disponibilidad No varía en su definición con la definición anterior de un clúster de alta disponibilidad clasificado así por su aplicación. Alta eficiencia Son clústeres cuyo objetivo de diseño es el ejecutar la mayor cantidad de tareas en el menor tiempo posible. Existe independencia de datos entre las tareas individuales. El retardo entre los nodos del clúster no es considerado un gran problema. 45 2.5. Ventajas y desventajas. Algunas ventajas de los clústeres son. La relación que existe entre rendimiento y costo.- El rendimiento de un clúster compite con el rendimiento de las mejores y más costosas Workstations a un precio muy bajo ya que utiliza máquinas comunes y más baratas. Flexibilidad.- Es posible implementar un clúster no sólo para tareas de un área específica o única, sino que es capaz de implementarse en distintas áreas del conocimiento. Disponibilidad. Escalabilidad. Crecimiento por incrementos.- Dependiendo de la capacidad necesaria del clúster es posible incrementar los nodos arbitrariamente hasta alcanzar el rendimiento, la capacidad y la velocidad deseada. Implementación de tecnología de punta.- Se implementa la mejor tecnología en cuanto a calidad y coste se refiere, y con esto no quiere decir que la tecnología más cara es la mejor. Aprovechamiento de ciclos perdidos.- Cuando el clúster detecta un espacio de ocio en las maquinas componentes del sistema utiliza este espacio para implementar o llevar a cabo una nueva tarea. Heterogeneidad.- Se trata de que el sistema tenga la mayor similitud posible entre sus componentes, tanto de hardware como de software, esto con el objetivo de facilitar las tareas y no sufrir de poca velocidad en la resolución de los mismos. 46 Por otro lado se encuentran las desventajas, estas son. Software. Problemas de administración y gestión. Memoria físicamente distribuida. Varias copias del sistema operativo. La red es el cuello de botella del sistema. 2.6. Retos en la implementación de un clúster Es importante conocer primeramente algunas consideraciones de diseño de un clúster, como son el maximizar la relación precio/prestaciones, aseguramiento de la disponibilidad, y sobre todo, la restricción que se tiene a un presupuesto. Se debe recordar también que está conformado principalmente por nodos de cómputo y una red de comunicación. El requisito fundamental para realizar el diseño de un clúster es el implementar un supercomputador con un coste reducido y altas prestaciones y rendimiento. La metodología de diseño de un clúster es de abajo-arriba (figura 3) y esta es. Requisitos de rendimiento. Hardware. Sistema operativo. Middleware. Aplicaciones (incluyendo la programación). 47 Figura 3.- Diseño abajo-arriba de un clúster. Figura 3.- Diseño abajo-arriba de un cluster. *Fuente.- Sesión 1: Arquitecturas Paralelas Basadas en Clústeres Los problemas para obtener el máximo rendimiento de un computador paralelo son. Hardware.- Procesadores inactivos debido a conflictos en acceso a memoria y comunicaciones. Sistema operativo.- Problemas de ineficiencia en planificadores, sistemas de ficheros, y asignación de memoria. Middleware.- Distribución y coordinación de tareas ineficiente, latencias de comunicación altas. Aplicaciones.- Algoritmos e implementaciones ineficientes que no explotan el paralelismo inherente de los problemas. 48 CAPÍTULO 3: Arquitecturas y herramientas para la implementación de un clúster 49 3. Arquitecturas y herramientas para Implementación de un clúster. En este capítulo se abordará la arquitectura de un cluster y las herramientas necesarias para su implementación. Es importante recordar de manera breve y clara que un cluster es un sistema paralelo o distribuido que está conformado por un grupo de equipos computacionales independientes llamados nodos, los cuales se conectan entre sí, ejecutan tareas de manera conjunta y por ultimo cumple además con los requerimientos de un sistema tolerante a fallos. De acuerdo con su objetivo de diseño los clústeres se clasifican como clústeres implementados para lograr un alto desempeño o alto rendimiento (que es el enfoque de esta tesina), mientras que otros se utilizan para lograr alta disponibilidad. De esta manera cabe señalar que un cluster de alto rendimiento está diseñado, como su nombre lo indica, para dar altas prestaciones en cuanto a capacidad de cálculo y procesamiento, resolviendo problemas de aplicaciones que así lo necesiten, por ejemplo, problemas con necesidad de gran cálculo. Esto se obtiene mediante el uso de un grupo de maquinas individuales las cuales están conectadas entre sí a través de una red de alta velocidad, este tipo de conexión permite obtener un sistema de alto rendimiento o prestaciones que trabaja como si fuese uno solo a pesar de que lo complementen varios equipos de computadoras. Por otro lado los clústeres de alta disponibilidad tienen como objetivo garantizar el funcionamiento ininterrumpido de ciertas aplicaciones. Los clústeres de altas prestaciones, como se menciono en capítulos anteriores, se utilizan en campos como la simulación de biotecnologías, simulaciones petroleras, modelación de mercados financieros, grandes cálculos matemáticos, predicción del clima y servidores de internet. 50 Cabe mencionar que en un cluster cuando uno de los nodos sufre de un colapso o falla los demás nodos componentes del cluster se encargan automáticamente de activar los recursos perdidos, con la finalidad de mantener la disponibilidad de los servicios que se les brindan a los usuarios, de esta manera se cubre la falta del nodo dañado. El implementar un cluster indica el uso necesario de software de control especializado, este tipo de software puede ser utilizado a nivel de aplicación o a nivel de sistema operativo. A continuación se muestran algunos ejemplos de herramientas que pueden usarse en la implementación de clústeres en Linux. IP Virtual Linux Server (IPLVS).- Es una solución que sirve para gestionar el balance de carga (es la técnica para compartir el trabajo que se realiza en varios procesos, ordenadores o cualquier otro tipo de recurso) en sistemas Linux. Este proyecto es, al igual que Linux, un sistema de código abierto. Su objetivo es desarrollar un servidor Linux de alto rendimiento que brinde una buena escalabilidad, confiabilidad y robustez usando tecnologías de tipo cluster. Piranha.- Este software viene incluido en la distribución Linux RedHat. Se compone por un servido LVS (Linux Virtual Server), este software permite administrar los servicios de la web con un navegador a través de interfaz gráfica. LVS permite crear un cluster de balanceo de carga, donde un nodo maestro reparte y gestiona las conexiones entre los demás nodos esclavos, este tipo de servidor LVS es capaz de soportar hasta 200 nodos esclavos. 51 Kimberlite.- Solución que brinda Linux para clústeres de dos nodos, permite la conexión a un disco compartido de quórum (técnica complementaria que ocasiona que todos los nodos del cluster escriban su estado en un disco y de esta forma se pueda determinar que nodo está disponible para dar el servicio) vía SCSI (Sistema de Interfaz para Pequeñas Computadoras) o por fibra (SAN, Red de Área de Almacenamiento, Storage Area Network). Heartbeat.- Está diseñado para detectar cuando un servicio se ha caído o falla en una máquina y administrador de cluster. Puede usar red Ethernet para comunicarse con los demás nodos componentes del cluster. Por mencionar un ejemplo de clúster implementado del tipo de alta disponibilidad se puede mencionar el implementado por los administradores del Ministerio de Finanzas y Precios de Cuba y de la empresa CONAVANA. Este clúster se implementó debido a la necesidad de brindar servicios a más de 350 usuarios de la red local y a las dependencias provinciales del país (Bayona González, 2009). En la implementación de este clúster se hace mención del uso del software de control Heartbeat y Debian GNU/Linux como sistema operativo. Heartbeat es una aplicación desarrollada por Linux-HA. Permite implementar clústeres descentralizados, por otro lado se sabe que es una aplicación estable, flexible y eficiente. En Debian ya esta precargado Heartbeat por lo que facilita el trabajo. La implementación de un cluster se lleva a cabo mediante los siguientes pasos. Configuración de las interfaces de red.- Se debe disponer de una interfaz de red virtual, esta sirve para almacenar varias direcciones IP usando una sola tarjeta de red, esta interfaz se puede configurar utilizando la técnica llamada “IP Aliasing”. La interfaz de red virtual otorgará los servicios del nodo que se esté utilizando. 52 Para realizar la configuración de la interfaz por medio de la técnica “IP Aliasing” se deben seguir los siguientes pasos.- Si se compila IP Aliasing cómo módulo se debe correr # /sbin/modprobe 0069p_alias Después determinar las otras direcciones IP que necesitas configurar. Para este ejemplo utilizaremos una red local. En éste caso, la IP maestra de mi máquina es 172.16.16.1, y las direcciones IP virtuales son 172.16.16.20, 172.16.16.55, y 172.16.16.201. (Todas estas direcciones IP son privadas.). Básicamente, hay un pequeño truco para subir las nuevas direcciones IP -- usar un adaptador de red distinto. # /sbin/ifconfig eth0 172.16.16.1 # /sbin/ifconfig eth0:0 172.16.16.20 # /sbin/ifconfig eth0:1 172.16.16.55 # /sbin/ifconfig eth0:2 172.16.16.201 La máquina ahora estará recibiendo peticiones para las cuatro IPs. Esto se logra creando dispositivos de red virtuales para manejar las peticiones. Ahora, esta es la forma manual de hacer las cosas, y para que nada sea omitido, siempre es sensato agregar routers. # /sbin/route add -net 172.16.0.0 dev eth0 # /sbin/route add -host 172.16.16.1 dev eth0 # /sbin/route add -host 172.16.16.20 dev eth0:0 # /sbin/route add -host 172.16.16.55 dev eth0:1 # /sbin/route add -host 172.16.16.201 dev eth0:2 53 También debes agregar tu gateway predeterminada de forma usual: # /sbin/route add default gw 172.16.16.39 Esto también puede hacerse en los archivos de configuración. En Debian, por ejemplo, se haría agregando una nueva interfaz en /etc/network/interfaces por cada una de las IPs que quieres crear un alias: iface eth0:0 inet static address 172.16.16.20 netmask 255.255.248.0 network 172.16.0.0 broadcast 172.16.23.255 Alternativamente, en sistemas Red Hat, se hace editando el archivo /etc/sysconfig/network-scripts/ifcfg-eth0:0 (o cualquiera de los dispositivos en el que quieras crear un alias): DEVICE=eth0:0 BOOTPROTO=static IPADDR=172.16.16.20 NETMASK=255.255.248.0 ONBOOT=yes Instalación y configuración de Secure Shell (SSH). – El Secure Shell debe ser configurado para permitir conexiones con llaves de tipo RSA (Rivest, Shamir y Adleman), entre todos los nodos que integran el cluster, con esto se cubre la necesidad de poner la clave de root o de algún otro usuario en el script de sincronización de datos. 54 A continuación se presentan los archivos disponibles para la configuración de OpenSSH, sin olvidar que tiene dos conjuntos diferentes de archivos de configuración, uno para los programas cliente (SSH, SCP y SFTP) y otro para el demonio servidor (SSHD). La información de configuración de SSH para todo el sistema se encuentra en el directorio /etc/SSH/: Moduli.- Contiene grupos Diffie-Hellman (un protocolo que permite el intercambio secreto de claves entre dos integrantes que no habían tenido contacto nunca antes) usados para el intercambio de la clave Diffie-Hellman que es imprescindible para la construcción de una capa de transporte seguro. Cuando se intercambian las claves al inicio de una sesión SSH, se crea un valor secreto y compartido que no puede ser determinado por ninguna de las partes individualmente. Este valor se usa para proporcionar la autentificación del host. SSH_config.- El archivo de configuración del sistema cliente SSH por defecto que se sobre escribe si hay alguno ya presente en el directorio principal del usuario (~/.ssh/config). sshd_config.- El archivo de configuración para el demonio sshd. ssh_host_dsa_key.- La clave privada DSA usada por el demonio sshd. ssh_host_dsa_key.pub.- La clave pública DSA usada por el demonio sshd. ssh_host_key.- La clave privada RSA usada por el demonio sshd para la versión 1 del protocolo SSH. ssh_host_key.pub.- La clave pública RSA usada por el demonio sshd para la versión 1 del protocolo SSH. ssh_host_rsa_key.- La clave privada RSA usada por el demonio sshd para la versión 2 del protocolo SSH. 55 ssh_host_rsa_key.pub.- La clave pública RSA usada por el demonio sshd para la versión 2 del protocolo SSH. La información para la configuración SSH específica para el usuario está almacenada en el directorio principal ~/.ssh/: authorized_keys.- Este archivo que contiene una lista de claves públicas "autorizadas". Cuando un cliente se conecta al servidor, el servidor valida al cliente chequeando su clave pública firmada almacenada dentro de este archivo. id_dsa.- Contiene la clave privada DSA del usuario. id_dsa.pub.- Contiene la clave pública DSA del usuario. id_rsa.- La clave RSA privada usada por ssh para la versión 2 del protocolo SSH. id_rsa.pub.- La clave pública RSA usada por ssh para la versión 2 del protocolo SSH. Identity.- La clave privada RSA usada por ssh para la versión 1 del protocolo SSH. identity.pub.- La clave pública RSA usada por ssh para la versión 1 del protocolo SSH. known_hosts.- Este archivo contiene las claves de host DSA de los servidores SSH accesados por el usuario. Este archivo es muy importante para asegurarse de que el cliente SHH está conectado al servidor SSH correcto. 56 Instalación y anteriormente configuración propuestas en de algunas cada uno de las de los herramientas nodos que complementan el cluster (Heartbeat, Kimberlite, Piranha o IP Virtual Linux Server).- Se mencionarán a continuación como se configura cada una de las herramientas mencionadas. o Heartbeat. Solamente hay tres archivos que tenemos que configurar para poner en marcha nuestro cluster: authkeys, ha.conf y haresources (podemos copiarlos de /usr/share/doc/packages/heartbeat). Configuración de /etc/ha.d/authkeys.- En este archivo se configura las llaves de autenticación para el cluster, que deben ser las mismas para los nodos. Se pueden usar tres tipos distintos: crc, md5, or sha1, dependiendo de la seguridad que necesites. El archivo de ejemplo podría ser: # use md5 with key "mycluster" auth 3 3 md5 mycluster Configurando /etc/ha.d/ha.cf.- En este archivo se definen los nodos del cluster y los interfaces que el heartbeat usa para verificar si un sistema esta 'levantado' o 'caído'. Por ejemplo: # definición de nodos del cluster node nodo1 node nodo2 57 # tiempo en segundos en el que se considera un sistema como 'muerto' si no responde deadtime 5 # Configuración del puerto serie para el heartbeat serial /dev/ttyS0 baud 19200 # interfaz de red para el heartbeat udp eth1 # interfaz de red para el heartbeat udp eth1 Configurando /etc/ha.d/haresources.- En este archivo vamos a definir los Logical Host, como ejemplo, diremos que hay dos servidores en activo/activo y cada uno de estos servidores es máster de un servicio. Por tanto el archivo /etc/ha.d/haresources será: nodo1 192.168.0.11 httpd nodo2 192.168.0.12 httpd Donde se indica en el primer campo el nodo que es master, la IP de cada servicio y el servicio asociado a esta IP. Nota: Si solo definimos un Logical Host estaremos creando un nodo activo/pasivo. 58 o Kimberlite.- La mejor manera de instalar el software Kimberlite es compilándolo desde el código fuente original. Para ello nos descargamos el fichero kimberlite-2.0.0.tar.gz de la página web de Mission Critical Linux, y lo compilamos e instalamos (en ambas máquinas del cluster) utilizando el conocido procedimiento: ./configure make make install Este procedimiento nos instala el software bajo el directorio /opt/cluster, y los ficheros de configuración bajo /etc/opt/cluster. Como es habitual, si queremos cambiar el directorio de destino del software, en lugar de la orden configure, deberemos utilizar: ./configure -prefix=/otro/directorio Una vez compilado e instalado el software, tenemos que crear un nuevo grupo de usuarios llamado cluster, y hacer que todos los ficheros y subdirectorios que cuelgan de /opt/cluster pertenezcan a este nuevo grupo. Por ejemplo ejecutar: chgrp -R cluster /opt/cluster A continuación tenemos que configurar correctamente en ambas máquinas el software recién instalado. La configuración de Kimberlite reside en el fichero /etc/opt/cluster/cluster.conf, sin embargo, se desaconseja editar a mano este fichero. El problema reside en que ambos equipos han de estar configurados exactamente de la misma manera, y que una copia de dicha configuración ha de ser almacenada en las particiones de quórum. 59 Para simplificar el proceso de configuración, Kimberlite nos proporciona la utilidad member_config, residente en el directorio /opt/cluster/bin. Esta utilidad nos hará algunas preguntas sobre cómo queremos configurar nuestro cluster, y realizará la configuración por nosotros. Conviene tener preparada la información que se nos solicita antes de ejecutar la utilidad. La información solicitada es: hostname y dirección IP de ambos equipos del cluster, dispositivos raw asociados a las particiones de quórum, número de canales de latido utilizados y tipo (Ethernet o serie), y puerto serie asociado al power switch (en caso de existir). Cuando hayamos terminado de configurar el software, sólo nos queda inicializar las particiones de quórum. Para ello utilizamos la orden diskutil -I. Y una vez inicializadas las particiones, podemos arrancar el software de cluster. El procedimiento de configuración descrito en los párrafos anteriores puede resultar un poco confuso, sobre todo la primera vez que se realiza. Por ello, para simplificar la tarea del administrador de sistemas, se propone seguir el siguiente procedimiento paso a paso: En el servidor 1: Ejecutar la utilidad member_config y responder a las preguntas que nos haga, Inicializar la partición de quórum, diskutil -I Comprobar que la partición ha sido inicializada correctamente, diskutil –t, diskutil -p Arrancar los servicios de cluster, service cluster start En el servidor 2: Ejecutar el la utilidad member_config indicándole que lea la configuración ya existente en la partición de quórum, member_config -init=/dev/raw/raw1 Arrancar los servicios de cluster, service cluster start 60 Para comprobar que los servicios de cluster están funcionando correctamente, podemos ejecutar la orden clustat -i 2, que nos mostrará en pantalla, cada 2 segundos, el estado de nuestro cluster. o Piranha.INSTALACIÓN DEL PAQUETE PIRAHNA o Instalación del paquete de dependencia ipvsadm.rpm o [root@localhost root]# rpm -ivh ipvsadm-1.21-4.i386.rpm o Preparing... ### [100%] o 1:ipvsadm #################### [100%] o Instalación del paquete piranha.rpm o [root@localhost root]# rpm -ivh piranha-0.7.6-1.i386.rpm o Preparing... ########################################### [100%] o 1:piranha ########################################### [100%] o Para buscar donde está el servicio de piranha: rpm -ql piranha o [root@ localhost root]# rpm -ql piranha o /etc/rc.d/init.d/piranha-gui o Levantar el servicio de piranha o [root@ localhost root ]# service piranha-gui start o Starting piranha-gui: [ OK ] 61 o Para buscar puertos. o El piranha por defecto se levanta en el puerto 3636. o [root@ localhost root ]# netstat -nat o Active Internet connections (servers and established) o Proto Recv-Q Send-Q Local Address Foreign Address State o tcp 0 0 0.0.0.0:3636 0.0.0.0:* LISTEN o Levantar el servicio FTP o [root@ localhost root]# service vsftpd start o Iniciando vsftpd para vsftpd: [ OK ] o Guardar archivos en el servidor FTP o [root@localhost root]# cd /var/ftp/pub o [root@localhost pub]# ls o 01 Suelta mi mano.mp3 drivs.zip piranha-0.7.6-1.i386.rpm o avseq01.dat GAVirusParteII.mpg prueba o Configuración Piranha mpegav o Documentación nfs-utils-1.0.6-31EL.i386.rpm Instalación y configuración de las aplicaciones que brindarán servicios en cada uno de los nodos componentes del cluster. Sincronización de los usuarios Unix, en todos los componentes del cluster. Implementar un script que se encargue de sincronizar todos los datos de las aplicaciones entre todos los nodos del cluster. 62 3.1. Modelos y arquitecturas En capítulos anteriores se mencionó que existe una clasificación de arquitecturas de computadoras propuesta por Flynn, la cual divide a las computadoras según el número de instrucciones y de la secuencia de datos que la computadora utiliza para procesar información. Esta clasificación a manera de recapitulación (sin ir a fondo) es. SISD.- Single Instruction Single Data SIMD.- Single Instruction Multiple Data MIMD.- Multiple Instruction Multiple Data MISD.- Multiple Instruction Single Data Por otro lado es importante mencionar los modelos de clústeres existentes y estos son. NUMA (Non-Uniform Memory Access). MPI (Message Passing Interface). PVM (Parallel Virtual Machine). Beowulf. 63 3.2. Software de paralelización Para hablar de un software de paralelización, primero hay que definir el significado de paralelización en el área de la computación, y esto es, hacer los problemas más sencillos y distribuirlos entre varios procesadores, sin embargo esta solución no es siempre conveniente y dependerá en gran medida de la misma naturaleza de los problemas que se quieran tratar de resolver. Se tratará la programación paralela en esta sección y los posibles problemas que pueden surgir al utilizar la misma, es por esto que es importante considerar el sistema operativo sobre el cual se trabajará así como también el considerar si se trata de un multiprocesador o un multicomputador, como lo es en este trabajo. Al explicar los limites que establece la misma arquitectura de las maquinas sobre las cuales se trabajarán se debe hablar sobre la Ley de Ahmdal y de otros problemas relacionados con la ordenación de instrucciones debido a las dependencias existentes. Se darán ejemplos de programación con OpenMosix y explicaciones con PVM o MPI y se explicará a detalle conceptos básicos en paralelización como granularidad de paralelismo o el problema de la transparencia en lo referente a la programación. Ley de Ahmdal. José Luis Bosques la define como: “Si la fracción serie de un programa es “s” el speedup máximo que se puede alcanzar es 1/s.” Speedup= s + p = 1 ____ = 1 s + p/N s + p/N s 64 Limites en el hardware. En lo referente a la aplicación de programas paralelos en maquinas de tipo de Multiprocesamiento Simétrico (SMP), debemos tener en cuenta el modo de ejecución de las instrucciones. En la actualidad la mayoría de los ordenadores comerciales son los conocidos como ordenadores superescalares los cuales mandan varias instrucciones al mismo tiempo aprovechando de esta manera una división por fases., esta división se genera a partir del principio de que cada fase requiere de una parte especifica del hardware del procesador para completarse. De esta manera se logra el mayor aprovechamiento de los componentes del procesador pues se usan de manera cíclica. Para lograr la división por fases es necesario solucionar de la manera más adecuada los retardos posibles por dependencias de datos entre instrucciones, esto quiere decir que existe una dependencia de datos cuando la ejecución de dos o más instrucciones dependen de los parámetros de entrada o salida de otras instrucciones. Generalmente la solución es hacer un renombramiento de registros lanzamiento de instrucciones fuera de orden, unidades superescalares y supervectoriales, entre otros. Granularidad del hardware (Instrucción maquina o lenguaje ensamblador). Existen gran variedad de mejoras de rendimiento a los límites que se imponen por el programa, estas mejoras se van incorporando en los procesadores de última generación. El problema es que esta solución puede resultar en muchos casos demasiado cara, sobre todo por la dificultad o tiempos de implementación. Además siempre se necesita cierta ayuda de parte del software, principalmente el compilador. 65 Limites del Software. Kris Buytaert (2006), menciona que “la ley de Ahmdal pone límites en lo que se refiere al incremento del rendimiento de cualquier sistema en el que se utilicen fragmentos de código no paralelizable, es decir, de todos los sistemas que actualmente se conocen. Una vez asumida dicha limitación, no queda más opción que optimizar los programas para que el rendimiento de los mismos en el sistema sea el mejor posible. Esto a menudo implica añadir una fase más en la vida de nuestros programas. Así pues a las fases de análisis, diseño e implementación hay que añadir una fase de paralelización, en la que se deberá tener en cuenta las necesidades del programa y del problema a resolver, así como de los medios de los que se disponen para poder hacer que el programa aumente el rendimiento a medida que aumenta la capacidad de procesamiento de sistema. Así pues a las fases de análisis, diseño e implementación hay que añadir una fase de paralelización, en la que se deberá tener en cuenta las necesidades del programa y del problema a resolver, así como de los medios de los que se disponen para poder hacer que el programa aumente el rendimiento a medida que aumenta la capacidad de procesamiento de sistema.” Granularidad del paralelismo. La granularidad del paralelismo de un sistema se encuentra al paralelizar códigos de procesos, rutinas, módulos o bucles a nivel de instrucción. “El término granularidad se usa como el mínimo componente del sistema que puede ser preparado para ejecutarse de manera paralela” (Buytaert, 2006). 66 Existe una clasificación de los sistemas paralelizados dependiendo el grado de granularidad de estos, de esta manera se pueden identificar.o Sistemas de granularidad fina. Aquí podemos encontrar los bucles y las sentencias. Generalmente se realiza a nivel de ensamblador y son explotados por sistemas y hardwares caros con nodos o procesadores con un fuerte acoplamiento. Este tipo de granularidad es la más pequeña y basa casi todo su funcionamiento en propiedades que brinda el hardware, es decir el hardware puede ser inteligente y puede permitir al programador ahorrar tiempo en el reordenamiento de instrucciones. o Sistemas de granularidad media. Se dirige sobre todo a módulos, rutinas y tareas o procesos. Dentro de estos sistemas se incluyen el Remote Procedure Call (llamada a procedimiento remoto, RPC), OpenMosix, entre otros. El paralelismo de granularidad media es explotado por el programador o el compilador. Dentro de este tipo de granularidad se encuentran también diversas librerías como el PVM o MPI. El hardware comúnmente se prepara de igual manera para aprovechar este tipo de paralelismo, por mencionar un ejemplo, los procesadores pueden disponer de instrucciones especiales para ayudar en el cambio de una tarea a otra que realiza el sistema operativo. o Sistemas de granularidad gruesa. Va dirigido a trabajos o programas y a módulos o procesos. Este es el tipo de paralelismo que explota el programador mediante programas que no tienen porque requerir el uso de ninguna librería externa, sino únicamente el uso de conocimientos de programación para paralelizar un algoritmo. Se basa principalmente en cualquier tipo de medio que use el programador para la creación de un programa, que solucione de manera paralela un problema, sin 67 tener que hacer uso de otras herramientas más que únicamente su habilidad de programador y de un buen algoritmo. Estos sistemas son los más limitados al carecer de métodos específicos para la comunicación entre nodos o procesadores y se da generalmente en sistemas de débil acoplamiento. Problema de transparencia. Este es uno de los mayores problemas existentes en programas que utilizan la paralelización. Al tiempo de crear un programa que resuelva un problema mediante el uso de un algoritmo que explote de alguna manera la paralelización hay que conocer el sistema que se ejecutará. Dependiendo del sistema que se elija para su paralelización y teniendo en cuenta que por regla general se paralelizan las tareas, procesos, procedimientos, rutinas o componentes distribuidos que realizan este trabajo, existen dos modelos de implementación.o Modelo de programación explicita. Este es el tipo de modelo que utiliza RPC, MPI o PVM, para el cual se requiere una biblioteca de funciones especiales que se encargan tanto de realizar la comunicación como los métodos de migración y demás factores que en un principio no debe afectar al programador. En este modelo el programador debe contar con un conocimiento especial de las bibliotecas, esto limita la velocidad de desarrollo de un software. o Modelo de programación implícita. Este tipo de programación basa su funcionamiento en que el programador conozca lo mínimo del sistema para paralelizar los procesos. Generalmente este sistema es utilizado por los compiladores especiales de un sistema particular. 68 Un caso especial de este tipo de programación es el OpenMosix, donde la programación y la migración de procesos no requieren de conocimiento del usuario respecto al cluster de máquinas. Lo recomendable para lograr una transparencia en la programación será programas de manera completamente implícita y que al mismo tiempo el sistema implantado sea lo menos intrusivo posible en lo referente al comportamiento son el usuario final. Así pues, para que un programa sea realmente transparente y al mismo tiempo eficiente, en lo referente a programación paralela, el programador debe conocer a fondo la programación del sistema. Por otro lado, el compilador o el sistema mismo se deben encargar de efectuar todas las tareas que de manera habitual se hacen en los sistemas que actualmente existen, es decir, la comunicación entre los procesos del sistema, su localización, rutinas o tareas, la paralelización del código del programa, entre otras tareas, de esta manera el programador no tendrá que preocuparse de los detalles y se vería reflejado en desarrollos más rápidos y económicos. De esta manera, el primer paso para el desarrollo de un programa paralelizado es, plantear el problema mediante técnicas de “divide y vencerás”, se debe localizar lo paralelizable en el problema de una manera abstracta antes de pensar en la paralelización del código. Existen dos formas conocidas y fáciles para comprender el paralelismo.- 1. El paralelismo funcional divide las aplicaciones en funciones. Es posible verlo como el paralelismo del código. Es decir, se puede dividir en entrada, preparación del problema, preparación de la salida, salida y mostrar la solución. Esto permite a los nodos componentes del cluster producir una cadena, se puede comparar con la segmentación en funciones de un procesador. 69 En este tipo de paralelismo sigue la idea anterior pero a un nivel de software, se dividen los procesos formando una cadena y dependiendo uno del siguiente. Sin embrago, este tipo de paralelización no es muy comúnmente utilizada ya que es muy difícil dividir el problema en funciones que tarden el mismo tiempo en ejecutarse. 2. El paralelismo de datos se basa en dividir los datos que se tienen que procesar. Por lo general los procesos que utilizan estos datos son idénticos entre sí y únicamente lo que hacen es dividir la cantidad de información entre los nodos y procesarla en forma paralela. Esta técnica es la más utilizada debido a su sencillez. Kris Buytaert (2006) menciona como ejemplo “los films //Final Fantasy// o //El señor de los anillos// que fueron renderizadas en un cluster de renderización con el software Maya y Renderman. Esta forma de renderizar se basa en dividir los frames (cuadros) que se deban renderizar en una escena en concreto o todos los frames de la película entre todos los ordenadores. Para ser más exactos, primero se divide el número de frames por el número de nodos y se envía el número resultante de frames a cada nodo (suponiendo que es un cluster donde todos los nodos tienen la misma capacidad de proceso). Esta es la fase de preparación y suele ser secuencial, puesto que es una pequeña parte de la producción. Una vez hecho esto, cada nodo renderiza los frames que le fueron asignados. Esta fase puede durar semanas. Una vez se tienen todos los frames se unen en un fichero único que tiene toda la película. En este caso en particular se usa paralelismo de datos, y aunque algunas imágenes tardan más en renderizarse que otras y por lo tanto algún nodo tardará menos en acabar su trabajo que otro, lo que se hace es no elegir imágenes de forma secuencial (de la 1 a la ##n## al nodo 1) sino paralela (1 al nodo 1, 2 al nodo 2... n+1 al nodo n+1) esto suele compensar la carga entre los nodos por lo que más o menos 70 todos los nodos se mantienen en el máximo rendimiento (si no se comprende esto, piense en lo poco que tardaría el nodo que renderize unos títulos de crédito simples)”. Una vez analizada la fuente de paralelismo de un programa se procede a realizar el estudio en pseudocódigo o cualquier otro sistema parecido. Se deben conocer los límites y las características del sistema para el que va a programarse. Es importante señalar que un programa paralelizado no debe tener menos tasa de eficiencia que un programa secuencial, sin embargo, que esto suceda es casi imposible debido a transferencias de comunicación entre los procesos, los módulos, nodos o elementos del cluster. La paralelización del software se basa en principios relacionados son la manera de programar que se usa actualmente por arquitectura de los computadores, funcionamiento de compiladores y también por lenguajes de programación. Uno de estos principios generales es el denominado principio de localidad, del cual existen dos tipos. Localización temporal.- Se basa en la manera en la que se puede encontrar el código de los programas y como se ejecutan en el tiempo. Por lo general, los programas están compuestos por una gran cantidad de estructuras en forma de bucle que ejecutan instrucciones, esto implica que con tener en memoria estos bucles, se tiene acceso a la mayor parte del programa. Por otro lado, usualmente, los procedimientos o funciones que están relacionadas se localizan en zonas de memoria adyacentes, así como las instrucciones que se ejecutan secuencialmente. 71 Localización espacial.- Basada en la manera en la que los programadores organizan datos en estructuras, objetos, matrices, vectores. Esta manera de organizar los elementos de los programas que están muy relacionados entre sí hace que al momento de solicitar memoria para los mismos, éstos sean alojados en segmentos contiguos de memoria. Cuando en un programa se pide memoria, se intenta obtener de una sola vez toda la memoria que vayan a usar la mayor parte de datos posible, para no tener que estar pidiendo memoria continuamente. Esto produce esta localidad. Al paralelizar programas se obtiene como ventaja un incremento del rendimiento. Este incremento puede ser un decremento si se comunican continuamente los procesos a través de una red, lo que generalmente suele ser el cuello de botella del sistema. Es por esto que los elementos de procesos a paralelizar deben ser lo más independientes y ortogonales posibles (Buytaert, 2006). En el caso de este trabajo, que es la programación de un cluster se le llamará elementos de procesos a los módulos, procesos, rutinas o procedimientos que se consolidan como unidades de proceso a ejecutar en los nodos. Como ya se mencionó los elementos de proceso deben ser ortogonales entre sí. El problema que invalida generalmente la ortogonalidad de estos elementos, es la dependencia de datos. Cuando surgen dependencias, ya sea de datos o de control, el programa o sistema deja de ser paralelizable y pasa a ser secuencial, se necesita interconectar generalmente los elementos para obtener sus resultados o para obtener sus estados y poder continuar el programa, esto requiere comunicación a través de la red, lo que puede llegar a ser bastante costoso. 72 3.3. Estructura de un clúster. A continuación se presentará un ejemplo de cómo está estructurado un cluster sobre una plataforma Linux, para ser más objetivos se dará un vistazo al cluster OpenMosix de Linux, este ejemplo fue tomado del Instituto de Ingeniería de la UNAM y fue desarrollado por José Castillo Castillo. Hardware Nodo maestro: Este nodo se eligió por tener el mejor procesador de las computadoras disponibles, tomando en cuenta que los demás fueran de la misma arquitectura. Las principales características son. Procesador.- Intel(R) Pentium (R) 4. Velocidad del procesador (Processor Speed) 2.8 GHz. Cache Nivel 2 (L2) de 512 KB. Memoria (RAM).- 512 MB DDR 400 MHz. Disco Duro (Hard Disk).- Segate ST31200022A 120 GB, IDE de 7,200 rpm. Tarjeta Madre (Motherboard).- Intel Corporation D865GLC. Velocidad del Bus (System Bus Speed) 800 MHz. Velocidad de la memoria (System Memory Speed) 400 MHz. 73 Tarjeta de red.- Intel (R) Pro/100 Network Conecction. Fast Ethernet. Nodos esclavos: Los tres nodos esclavos son casi idénticos al nodo principal, la única diferencia radica en la velocidad del procesador que es menor a la del nodo maestro. Las principales características de estos nodos son: Procesador.- Intel(R) Pentium (R) 4. Velocidad del procesador (Processor Speed) 2.4 GHz. Cache Nivel 2 (L2) de 512 KB. Memoria (RAM).- 512 MB DDR 400 MHz. Disco Duro (Hard Disk).- Segate ST38001A 80 GB, IDE de 7,200 rpm. Tarjeta Madre (Motherboard).- Intel Corporation D865GBF. Velocidad del Bus (System Bus Speed) 800 MHz. Velocidad de la memoria (System Memory Speed) 400 MHz. Tarjeta de red.- Intel (R) Pro/100 Network Conecction Fast Ethernet 74 Software Sistema Operativo: Suse 9.0 con kernel OpenMosix 2.4.24.- Distribución de Linux que soporta versiones de kernels 2.4.x compatible con OpenMosix, además de ser la distribución que se utiliza para servidores y estaciones de trabajo de los usuarios en el Instituto de Ingeniería de la UNAM. Sistema de archivos: Reiserf.- Sistema de archivo utilizado para las particiones Linux, que al igual que el sistema de archivos ext3, incluye la característica de journaling que previene el riesgo corrupciones del sistema de archivos y es de los más utilizados por presentar mejor desempeño en el manejo de archivos. Mosix File System (MFS).- Necesario en OpenMosix para proveer de acceso al sistema de archivos remotos y que ayuda a mantener la consistencia de cache. Herramientas de administración User Lan Tools.- Las herramientas de área de usuario son lo mínimo que necesita cualquier administrador o usuario de OpenMosix para el manejo de los procesos. OpenMosixView.- Aplicación gráfica de monitoreo de OpenMosix, con ella puede realizarse parte de las tareas comunes que se harían con los comandos de las User Lan Tools. 75 Topología La topología de red utilizada es la estrella, se caracteriza por tener todos sus nodos conectados a un controlador central, en este caso, un switch de 48 nodos de los cuales 4 nodos pertenecen al cluster. Todas las comunicaciones pasan a través del switch, siendo éste el encargado de controlarlas. Por este motivo, el fallo de un nodo en particular es fácil de detectar y no daña el resto de la red, pero un fallo en el controlador central desactiva la red completa. Switch El switch es marca 3Com SuperStack 3, serie 4400. Una característica importante es que soporta telefonía sobre IP y tiene rendimiento de ancho de banda de 13.6 Gbps (forwarding bandwidth) y 10.1 millones de paquetes por segundo. El switch es de 48 nodos y también soporta tráfico de telefonía o también llamado VoIP, tecnología con que cuenta el Instituto de Ingeniería, a la cual se le da mayor prioridad cuando es necesario. Los equipos conectados a este switch se conectan a una velocidad auto negociable de 10Base-T/100Base-TX, según la tarjeta de red. Cuenta con un puerto Gigabit 1000 Base SX para salir a otro equipo: 3Com 7700, que es el que provee de red ethernet a la Torre de Ingeniería, donde se encuentra físicamente el cluster, como lo muestra la figura 4. 76 Figura4.- Diagrama del cluster *Fuente.- *Fuente.- Estructuración de un clúster Beowulf. Cable El cable con el que están conectados los nodos del cluster al switch que los une, es estructurado de la marca Kron categoría 6, para velocidades de transmisión de datos Ethernet 10/100/1000. 77 Tarjetas de red Las tarjetas de red con que cuenta cada nodo, son las especificadas anteriormente, todas estas marca Intel, e integradas a las tarjetas madre. El ejemplo anterior nos da una clara visión de cómo es la estructura de un cluster, sus componentes, también las características con las que cuentan los componentes de este cluster pueden considerarse como las características con las que deben contar los clústeres a implementarse. Da una idea del tipo de conexión que puede realizarse en un cluster (en el ejemplo anterior se utilizo el tipo estrella), y los tipos de cableados necesarios para realizar esta conexión así como las velocidades necesarias para la misma. 3.4. Configuración de un clúster tipo Beowulf La propuesta de implementación del clúster para computo de alto rendimiento que en este trabajo se promueve, es la realización de un cluster Beowulf, debemos especificar que un Beowulf es una clase de computador paralelo de altas prestaciones como ya se mencionó anteriormente, está construido principalmente a base de una red de computadoras con un hardware estándar. Cabe señalar que ejecuta un sistema operativo de distribución libre como lo es Linux o FreeBSD, así mismo esta interconectado por una red privada de alta velocidad. Por lo general su objetivo es la ejecución de tareas que requieren de una gran capacidad de cálculo. En este tipo de sistema, sus componentes o nodos no se encuentran en los puestos de trabajo de los usuarios al contrario de Google que está compuesto por todas las computadoras de escritorio o Laptops que utilizan los usuarios para realizar sus búsquedas y compartir información, sino que por el contrario, están totalmente dedicados a las tareas asignadas al cluster, teniendo contacto con el exterior un único nodo o componente. 78 La configuración de este tipo de cluster principalmente se basa en una comunicación mediante una red de interconexión, para ello existen dos tipos de red disponibles. El primero, es un Hub Ethernet que es un dispositivo de red que actúa como un bus broadcast, donde una señal de entrada se amplifica y se distribuye a todos los puertos, sin embargo hay que mencionar sus desventajas. La principal es que solo se pueden comunicar un par de computadoras correctamente al mismo tiempo, es decir, si dos o más computadoras envían paquetes de información al mismo tiempo se producirá una colisión, lo que provoca que el objetivo del cluster no pueda cumplirse. En segundo lugar está el Switch Ethernet (que es en el que nos enfocaremos para utilizarlo como conexión entre los nodos que componen el cluster), este tipo de Switch ofrece más ancho de banda acumulado, lo que permite múltiples comunicaciones al mismo tiempo, si no existen problemas en los puertos de salida del switch Ethernet se podrán enviar varios paquetes de información simultáneamente, este tipo de conexión es la que se utilizará para la implementación de este cluster ya que se pretende trabajar con un mínimo de 10 computadoras marca HP del centro de cómputo de la Facultad de Sistemas Computacionales Administrativos de la Universidad Veracruzana. A continuación se describirán los componentes de hardware y software de un cluster Beowulf. Hardware.Este tipo de cluster basa su arquitectura en multicomputadores que pueden ser usados para la computación paralela. Este sistema consiste de un nodo maestro y uno o más nodos esclavos conectados a través de una red Ethernet como ya se mencionó anteriormente. Se construye con componentes de hardware comunes en el mercado como las PC que se encuentran en el centro de cómputo de esta facultad, capaces de soportar y ejecutar sistema operativo Linux. 79 El nodo maestro o principal controla a todo el cluster y brinda los servicios de sistemas de archivos a los nodos esclavos, de igual manera es la consola del cluster y la conexión al exterior del mismo. Las máquinas grandes de Beowulf pueden tener más de un nodo maestro, y demás nodos dedicados a diversas tareas específicas como consolas o estaciones de supervisión. Por lo general los nodos esclavos de un sistema de este tipo son estaciones simples, esto es, que son configurados y controlados por el nodo maestro y realizan únicamente las tareas que este nodo les indique. Inclusive, en una configuración de nodos esclavos sin disco duro, estos nodos no saben su dirección IP sino hasta que el mismo nodo maestro se los indica. La figura 5 muestra gráficamente la arquitectura de un cluster Beowulf. Figura 5.- Arquitectura de un Cluster Beowulf. *Fuente.- Estructuración de un clúster Beowulf. 80 Existen dos tipos de configuraciones de hardware utilizadas para la construcción de este tipo de cluster, estos son, los arreglos de discos o RAID (Arreglo Redundante de Discos No Expandibles), esta última opción indica que un arreglo es construido a partir de discos de mediana capacidad que son comunes en el mercado. La mayoría de las veces los dispositivos usados para construir un arreglo RAID son particiones elaboradas sobre la agrupación de varios discos. Por lo general las particiones que forman parte del RAID se encuentran en diferentes discos. Dependiendo de las características del RAID se pueden clasificar los arreglos por niveles o modos, los cuales son.o Modo Lineal.- Se refiere a la combinación de dos o más discos, para conformar un disco físico, es decir, los discos son concatenados para crear un disco con mayor capacidad, sin embargo, al escribir en el arreglo, primero se llena el primer disco, después el segundo y así sucesivamente, en forma lineal. o Modo RAID-0.- También se le conoce como modo stripe. Este modo es muy similar al anterior, pero no es una concatenación de discos, más bien se trata de un balance de carga I/O entre los discos, esto proporciona un alto rendimiento. Es por esto que este modo es una buena opción cuando lo deseado es una mayor velocidad de lectura y escritura. 81 o Modo RAID-1.- Aquí, se presenta una redundancia de datos, es decir, toda la información es duplicada en todos los dispositivos que componen el RAID, por lo tanto la capacidad del arreglo es igual a la capacidad del disco con menor capacidad de memoria. o Modo RAID-4.- En este nivel, un solo disco es el encargado de almacenar información de paridad y escribir los datos en otro disco. o Modo RAID-5.- Este nivel es muy similar al anterior, sin embargo, aquí el almacenamiento de la paridad se realiza de forma distribuida, es decir que la información de la paridad es almacenada entre los dispositivos que forman parte del arreglo. Por todo lo anterior, y como ya lo hemos visto a lo largo de este trabajo, se recomienda que los dispositivos que formarán parte del arreglo sean de la misma capacidad, es decir, que exista heterogeneidad. Software.- Este tipo de cluster, como ya se mencionó anteriormente, utiliza como sistema operativo cualquier distribución Linux, asimismo, utiliza bibliotecas de pase de mensajes como la PVM o MPI. En un principio, Beowulf utilizaba la distribución Linux Slackware, sin embargo, actualmente la mayoría de los cluster han migrado a la distribución RedHat por la facilidad de administración del sistema. 82 Una de las alternativas para el manejo de los recursos de Beowulf es MOSIX, su uso en un cluster de PC provoca que los nodos funcionen como partes de un solo computador. El principal objetivo de esta herramienta es la distribución de la carga generada por las aplicaciones secuenciales o paralelizadas. Es importante de igual manera mencionar la clasificación de este tipo de cluster. Clase I.- Estos sistemas se componen por maquinas cuyos componentes cumplen con la prueba de certificación “Computer Sopper” lo que significa que sus elementos son de uso común y pueden ser adquiridos en cualquier tienda distribuidora. Es por esto que este tipo de clústeres son están diseñados para ningún uso ni requerimientos en especial. Clase II.- Son sistemas compuestos por máquinas cuyos componentes no pasan la prueba de certificación "Computer Shopper" lo que significa que sus componentes no son de uso común y por tanto no pueden encontrarse con la misma facilidad que los componentes de sistemas de la clase anterior. De tal manera, pueden estar diseñados para algún uso o requerimiento en particular. Las máquinas ubicadas en esta categoría pueden presentar un nivel de prestaciones superior a las de la clase I. Elementos de un cluster Beowulf. Al instante de la construcción del cluster es necesario tomar en cuenta diversos factores que influyen en el diseño del mismo y para la toma de decisiones que contribuyan al mejor desempeño del mismo. 83 Se deben estudiar en este momento elementos como.o Disco.- Existen métodos muy diversos para la configuración de los medios de almacenamiento de un cluster Beowulf, dichos medios difieren en precio, rendimiento y facilidades de administración. Clientes sin disco (Disk-less).- Es importante señalar que los nodos esclavos o componentes el sistema no poseen un disco duro interno, tomando los sistemas de archivos a través de la red. Es el nodo maestro quien proporciona a través de NFS (Network File System, es un protocolo de nivel de aplicación, según el modelo OSI. Es utilizado para sistemas de archivos distribuidos en un entorno de red de computadoras de área local) los sistemas de archivos para los nodos esclavos. La principal ventaja que tiene este tipo de configuración es la facilidad en la administración del cluster ya que al integrar un nuevo nodo solo se deben modificar ciertos archivos en el servidor y proporciona de igual manera un alto nivel de escalabilidad. Sin embargo la principal desventaja de tener clientes o nodos esclavos sin disco duro es que el tráfico NFS se incrementa y dependiendo de la red instalada en el cluster esta puede ser una configuración poco adecuada para el cluster. 84 Instalación local completa en los clientes.- En este caso, todo el software, es decir, tanto el sistema operativo como las aplicaciones, son instaladas en los discos internos de cada nodo cliente o esclavo. Esta configuración el tráfico NFS desaparece por completo para obtener el sistema operativo o cualquier otra aplicación por parte de los nodos esclavos. Instalación NFS Estándar.- Esta configuración es el punto medio entre las dos configuraciones anteriores. El sistema operativo esta en los discos internos de los nodos esclavos y estos obtienen los directorios hogar de los usuarios y los sistemas de archivos que contienen las aplicaciones, a través de NFS, desde el nodo maestro. Sistemas de archivos distribuidos.- Estos sistemas son aquellos que son compartidos por todos los nodos, es decir, cada nodo posee una parte del sistema de archivos lo que incrementa la velocidad en los accesos a la información ya que existe la presencia de más de un dispositivo físico para el manejo de los datos. Sin embargo, este tipo de configuración está a prueba aun y es por ello que no es muy recomendable su uso. o Memoria.- Para elegir la cantidad de memoria necesaria para el cluster nos debemos basar en dos factores primordiales. El recurso económico con el que contamos Los requerimientos de memoria de las aplicaciones que se ejecutarán en el cluster. 85 La principal razón para contar con una memoria de gran tamaño es el evitar que las aplicaciones necesiten de áreas de swap para continuar ejecutándose normalmente. El poder intercambiar localidades de memoria hacia el área de swap reduce de manera considerable el rendimiento de los programas. Se debe tomar en cuenta que en la configuración para un cluster disk-less no es posible contar con particiones destinadas para la memoria virtual debido a la ausencia de discos locales, esto, provoca que sea una razón importante por la cual instalar memoria RAM suficiente. Por otro lado es importante mencionar que la velocidad de la memoria es de vital importancia ya que si se cuenta con una memoria de acceso lenta se pueden provocar cuellos de botella al momento de ejecutar aplicaciones con altas exigencias de memoria. o Procesador.- Por lo general los clústeres son construidos con procesadores Alpha o Intel x86. El uso de otro tipo de procesador también está permitido, sin embargo, no se consideran de uso común, ya que se elimina de esta manera una de las principales características de Beowulf, la cual es el uso de componentes comunes lo que permite reemplazar fácilmente y de manera económica cualquier componente del sistema. o Simetric MultiProcessor (SMP).- Las maquinas con más de un procesador son usadas de manera común en clústeres Beowulf ya que proporcionan una gran capacidad de prestaciones. Una de las principales ventajas en el uso de SMP, además del incremento de poder, es la gran reducción de tarjetas de red y del tráfico en la red. 86 Ya que SMP comparte totalmente la memoria RAM, tiene únicamente un espacio de memoria, esto simplifica tanto el sistema físico como la programación de aplicaciones. Este espacio de memoria único existente permite que un sistema operativo con multiconexión distribuya las tareas entre varios procesadores, o permite que una aplicación obtenga la memoria necesaria para una simulación compleja. Es importante también mencionar que la memoria globalmente compartida también vuelve fácil la sincronización de los datos. En la figura 6 se muestra la estructura de SMP. Figura 6.- Estructura de SMP *Fuente.- Estructuración de un clúster Beowulf. 87 o Massively Parallel Procesing (MPP).- Este se considera otro diseño de procesamiento paralelo. Este diseño evita los cuellos de botella en el bus de la memoria, no usando memoria compartida, en cambio utiliza la distribución de la memoria RAM entre todos los procesadores, de esta manera se asemeja a una red de procesamiento distribuido. La figura 7 muestra la estructura de un MPP. Los procesadores utilizan un esquema de paso de mensajes análogo a los paquetes de datos en redes, esto con la finalidad de tener accesos a la memoria fuera de su propia RAM. Este sistema reduce el tráfico del bus, gracias a que cada sección de la memoria observa exclusivamente aquellos accesos que le estén asignados, evitando observar todos los accesos de manera ineficiente, como ocurre en un sistema de tipo SMP. Solamente cuando un procesador no tiene la memoria RAM suficiente es cuando usa la memoria RAM sobrante de los demás procesadores. Se le considera a esta tecnología, una tecnología escalable. 88 Figura 7.- Estructura de MPP. *Fuente.- Estructuración de un clúster Beowulf. o Red.- La topología de red recomendada para la implementación de un cluster Beowulf es de tipo Bus o barra, ya que facilita la escalabilidad al momento de requerir la incorporación de nuevos elementos al cluster. Los protocolos como Ethernet, Fast Ethernet, 10/100 Mbps Switched Ethernet son los recomendados para ser usadas en un cluster Beowulf. Es hora de hablar acerca de la implementación y la construcción de un cluster Beowulf, con el objetivo de dar las bases para la implementación de un cluster de este tipo en el centro de cómputo de la facultad. 89 En este momento se tratarán puntos como. Consideraciones necesarias para la creación del cluster Beowulf.- Como se ha mencionado ya anteriormente se requieren nodos esclavos y uno maestro, en este caso serán nueve esclavos y uno maestro, una red local de interconexión, un sistema operativo en los nodos, el cual será Linux y un método para que los programas aprovechen la naturaleza paralela del Beowulf. Abarca Castro Miguel (2008) menciona en su trabajo “estructuración de un cluster Beowulf” que “el proyecto Beowulf se enfoca a la distribución Red Hat Linux, si bien sus componentes pueden instalarse en cualquier distribución. Cualquier distribución moderna incluye los componentes necesarios para la configuración del equipo como una estación de trabajo en red; esto incluye el kernel de Linux, el conjunto de utilerías y software GNU, y una serie de programas y aplicaciones como compiladores y herramientas de cómputo científico”. Es importante mencionar que los paquetes o elementos que se requieren adicionar a la distribución, están disponibles como paquetes adicionales y bibliotecas de desarrollo, sin embargo debido al apoyo de Beowulf hacia Linux, las nuevas versiones del kernel de Linux ya traen incorporadas los controladores necesarios para la implementación de este cluster. 90 o Hardware. Comunicación entre los nodos.- El uso de una red Ethernet tiene ventajas y algunas características relevantes, la principal es la facilidad de instalación y su bajo costo. Cabe señalar que la popularidad de la red Ethernet ha provocado desarrollos que permiten incrementar el desempeño según se necesite. Un cluster se puede beneficiar con el uso de switches, los cuales segmentan el tráfico en el bus Ethernet reduciendo la saturación y colisión del mismo. Consideraciones para equipos sin disco duro.- La utilización de estaciones disk-less, está bastante difundida ya que permite un desempeño aceptable para las terminales que por lo normal tienen la función de desplegar el trabajo realizado en un servidor multiusuario. Las terminales de este tipo requieren un mínimo trabajo de mantenimiento y configuración y por lo general estas funciones se hacen en un servidor central. Por lo general el recurso de interés de las estaciones es su procesador y memoria, considerados como elementos de trabajo básicos del cluster. Aunado a esto, no se pretende que los usuarios tengan directamente acceso a estas estaciones. Esta técnica de arranque da ciertas ventajas como la centralización de todos los archivos de los nodos en un servidor central, así como cierta economía en los requerimientos de equipo, pues se ahorra el tener un disco duro en cada uno de los nodos esclavos del cluster. Esta técnica se considera como una extensión del uso del sistema de archivos por red (Network File System o NFS). El NFS por lo general se emplea para compartir los directorios de usuarios en redes de estaciones de trabajo, y en clústeres suele emplearse para facilitar la distribución de los programas a ejecutar. 91 Sin embargo es importante mencionar las dos grandes desventajas del uso de esta técnica. La primera es el incremento del uso del disco duro en el servidor central. La segunda es el bajo desempeño que se presenta al accesar a archivos por parte de los nodos. Esto se debe a que los nodos no cuentan con un almacenamiento secundario local, es por esto que todos los intentos realizados de acceso al disco se hacen por medio de la red lo que ocasiona que si no se tiene una red suficientemente rápida se creen cuellos de botella en la misma. o Software. Instalación y arranque del sistema operativo en el servidor central.- El sistema operativo en el servidor central sirve como base para la creación de directorios o sistemas de archivos para los nodos. Este servidor debe tener el software para brindar los servicios necesarios para el arranque y operación de los nodos. 92 Instalación y configuración de software de inicialización en los nodos (disk-less).- El arranque remoto de las estaciones sin disco duro, es una técnica que también se puede emplear en los nodos esclavos del cluster, se puede emplear para diversos sistemas operativos de redes, como Novell y variantes de Unix. Miguel Abarca Castro menciona que “el método tradicional con redes de Unix engloba a 4 etapas. Al arrancar la computadora, se carga un programa conocido como “arrancador de red”. Este es un programa que tradicionalmente reside en una ROM de arranque que se encuentra en la tarjeta de red. El arrancador de red obtiene su dirección IP de un servidor, utilizando los protocolos BOOTP protocolo es utilizado por los clientes de red para obtener su dirección IP de manera automática) o DHCP. Con los datos entregados por el servidor el arrancador de red realiza la configuración básica de la tarjeta de red para hacer transferencias por TCP/IP (protocolo base de Internet y sirve para enlazar computadoras que utilizan diferentes sistemas operativos sobre redes de área local (LAN) o de área extensa (WAN). El arrancador de red utiliza el protocolo TFTP (Protocolo de Transferencia de Archivos Trivial. Se usa para la transferencia de pequeños archivos entre ordenadores en una red) para transferir un archivo desde el servidor, cuya ubicación normalmente se especifica como parte de la configuración recibida por BOOTP o DHCP. Este archivo comúnmente es el kernel que debe cargar la estación para realizar su arranque. Una vez cargado el kernel, termina el trabajo del arrancador de red; el kernel se carga normalmente y realiza su procedimiento de inicio.” 93 Asignación automática de dirección IP.- Tanto el protocolo BOOTP como el DHCP, como ya se mencionó permiten la asignación de la información de configuración para las estaciones de trabajo desde un servidor central. En los dos protocolos el usuario realiza una transmisión de tipo broadcast con su dirección hardware (dirección MAC, Media Access Control). Ya sea el servidor BOOTP o DHCP toman dicha petición y retornan al cliente o usuario la información solicitada, que básicamente consta de la dirección IP que el cliente debe usar. Abarca Castro Miguel (2008) menciona que “El archivo de configuración es relativamente sencillo, sin embargo es un tanto extenso ya que se requiere una sección host para cada nodo del cluster”. A continuación se muestra el archivo presentado por Miguel Abarca. EJEMPLO DE CONFIGURACION DEL DEMONIO DHCP server-identifier tornado; #Opciones comunes a todas las subredes soportadas option domain-name "unam.mx"; option domain-name-servers 132.248.10.2; #asignacion dinamica.. notese que en este caso solo #especificamos las subredes en las que se encuentra el #servidor, puesto que no vamos a realizar asignación #dinámica hay dos declaraciones de subred #correspondientes a cada una de las interfases que #tenemos. 94 shared-network DOMINIO{ subnet 192.168.10.0 netmask 255.255.255.0 { option broadcast-address 192.168.10.255; } } subnet 192.168.1.0 netmask 255.255.255.0 { } # A partir de aquí especificamos la configuración por # host. cada bloque especifica un host, notar la # dirección IP fija, el hostname que se asignará a # cada nodo, y la direccion hardware ethernet que # especifica a que direccion MAC se asignarán # estos datos. host nodo1 { fixed-address 192.168.10.68; hardware ethernet 00:60:08:0B:5A:9E; filename "/tftpboot/vmlinuz-nbi-2.2"; next-server 192.168.10.1; option host-name "nodo1"; } host nodo2 { fixed-address 192.168.10.69; hardware ethernet 00:80:AD:30:49:D4; filename "/tftpboot/vmlinuz-nbi-2.2"; next-server 192.168.10.1; option host-name "nodo2"; } 95 La explicación que brinda Abarca Miguel (2008) acerca de este código es. La dirección MAC (indicada por el parámetro hardware ethernet). La dirección IP de cada nodo (fixedaddress). Éstas se asignan de manera progresiva y cuidando que sean únicas para cada host. El nombre (hostname). El nombre del archivo a cargar para el arranque (filename), que en este caso especifica la ruta, dentro del servidor TFTP, de un kernel Linux adecuado para el arranque de los nodos. Y el servidor que entregará este archivo a los clientes (nextserver). La razón de este último parámetro es que en ocasiones se puede tener un servidor TFTP que sea distinto del servidor DHCP. Servidor de archivos de arranque TFTP.- El protocolo TFTP (Trivial File Transfer Protocol) es muy sencillo, se basa en UDP, lo cual permite que descargue archivos de un servidor. La principal función de este servidor es el proporcionar archivos de arranque a equipos que no cuentan con un almacenamiento local. Es importante mencionar que este protocolo no cuenta con ninguna clase de control de acceso al mismo como contraseña. En el caso de utilizar RedHat Linux, el servidor TFTP ya está contenido en el paquete TFTP-SERVER, este paquete está ya instalado con la configuración e paquetes que se mencionó anteriormente, sin embargo por lo general esta deshabilitado. Para poder habilitarlo, menciona Miguel Abarca, “se debe agregar la siguiente línea en el archivo de configuración /etc/inetd.conf”. Ejemplifica de la siguiente manera.- tftp dgram udp wait root /usr/sbin/tcpd in.tftpd /tftpboot 96 De igual forma Abarca Miguel (2008) explica esta línea de código como “es una línea de configuración tradicional del servidor inetd. En este caso se hace notar que el último parámetro (/tftpboot) indica el directorio que contiene los archivos a compartir por medio de TFTP.” Cargador de arranque.- Es importante hacer mención del cargador de arranque. Dicho cargador es el programa responsable del inicio de la interfaz de red, la obtención de los datos de la configuración básica y de cargar por medio de TFTP el archivo especificado en esta última configuración. Para poder llevar a cabo este programa se cuenta son dos paquetes que son. Netboot.- Utiliza los manejadores de paquetes que están incluidos en la mayoría de las tarjetas de red disponibles en el mercado común, esto permite tener una gran compatibilidad con distintos tipos de tarjetas. Etherboot.- Esta basado en Netboot, pero brinda un código más limpio y compacto que el Netboot. Utiliza manejadores internos y genera una imagen ROM para cada tipo de tarjeta de red soportada, el uso de estos manejadores internos permite que la imagen sea de un tamaño reducido lo que permite evitar problemas con las tarjetas de red soportadas. Creación del kernel para los nodos.- El archivo proporcionado por el TFTP para los nodos es un kernel de Linux funcional, dicho kernel asume el control el sistema y lleva a cabo el arranque normal. Debido a que la configuración en los componentes del cluster es bastante particular, el kernel debe tener internamente las funciones necesarias para inicializar el dispositivo de red, obtener su configuración de un servidor remoto y montar su sistema de archivos raíz a través de NFS. 97 Debido a la naturaleza modular del kernel de Linux es posible contar con una gran eficacia y versatilidad en el manejo de los módulos que controlan a los dispositivos e implementan algunas características a nivel kernel. En Linux, se dice que los módulos necesarios deben compilarse monolíticamente dentro del kernel. Abarca Miguel (2008) menciona las siguientes opciones en el kernel que se deben compilar. Kernel level autoconfiguration.- Permite al kernel obtener su información de configuración a través de algún protocolo como DHCP o BOOTP. DHCP support BOOTP support NFS Filesystem Support.- Ya que todos los sistemas de archivos montados por los nodos residirán en un servidor NFS, esta opción es indispensable para la operación de los nodos. Root File System on NFS.- Por medio de esta opción, el kernel monta un sistema de archivos en un servidor NFS como su sistema raíz. Soporte para las tarjetas de red que se vallan a utilizar. Organización de sistemas de archivos para NFS.- Cada nodo integrante del cluster requiere de un sistema de archivos raíz que usara para el arranque, dichos archivos se extraen por medio del NFS y deben ser los necesarios para el arranque. Por lo general las distribuciones de Linux se adhieren a un estándar llamado Filesystem Hierarchy Estándar (FHS, estándar de jerarquía del sistema de archivos). El objetivo de este estándar es el poder homologar la organización de los sistemas de archivos entre las distribuciones Linux, mejorar la interoperabilidad de las aplicaciones, brindar herramientas de administración de sistemas así como 98 herramientas de desarrollo y scripts, y por último el poder contar con una mayor uniformidad de uso y documentación para los sistemas adheridos al estándar. Este estándar (FHS), intenta mantener la cantidad de archivos en el directorio raíz al mínimo (excepto para los directorios /usr, /opt, /var y /home) obedeciendo a ciertos criterios básicos, uno de estos criterios es realmente importante para las estaciones diskless y este según Miguel Abarca es “el sistema de archivos raíz contiene muchos archivos de configuración específicos a cada sistema, como puede ser configuración de red o nombre del host. Esto implica que el sistema de archivos raíz no siempre se puede compartir entre sistemas en red. El mantener el sistema de archivos raíz lo más compacto posible minimiza el espacio desperdiciado por archivos no compartibles. También permite minimizar el tamaño del sistema de archivos inicial, sea local o remoto”. Los directorios de nivel superior especificados por el estándar FHS son. Bin.- Binarios de comandos esenciales (uso público) Boot.- Archivos estáticos de arranque del sistema Dev.- Archivos de dispositivos Etc.- Configuración específica del sistema Home.- Directorios de usuarios Lib.- Bibliotecas compartidas esenciales Mnt.- Punto de montaje para otros sistemas de archivos Opt.- Software de aplicación adicional Root.- Directorio del superusuario Sbin.- Binarios esenciales del sistema Tmp.- Archivos temporales Usr.- Jerarquía secundaria Var.- Datos variables 99 Para sistemas de archivos de los nodos se deben omitir los directorios /usr y /home debido a que estos directorios se comparten entre todos los nodos y el servidor central. Miguel Abarca Castro menciona que “a fin de generar el sistema de archivos para cada nodo, bajo el directorio /tftpboot se crean directorios con el hostname correspondiente a cada nodo, por ejemplo: /tftpboot/nodo1. Bajo cada uno de estos se debe crear la jerarquía raíz para cada nodo. Para esto simplemente se copian los subdirectorios necesarios del servidor. Los directorios a copiar son: bin dev etc lib proc root sbin tmp var Inicialmente se realiza únicamente una copia del directorio. Posteriormente la configuración por nodo se realiza en esta copia, y finalmente se crean tantas copias del primer directorio como nodos se tengan. 100 Servidor NFS.- El sistema de archivos en red (NFS) nos permite acceder a archivos ubicados en sistemas remotos como si se encontraran localmente. En este caso el servidor es de vital importancia ya que proporciona los sistemas de archivos raíz y un área compartida para los nodos esclavos del cluster. El software que permite a Linux está integrado en el paquete nfs-utils, se incorpora en la versión RedHat pero no se instala automáticamente, por lo tanto hay que hacerlo manualmente, de igual manera se debe habilitar el servicio NFS para que así al iniciar el sistema arranque el demonio NFS, este demonio es importante señalar, que requiere un archivo de configuración que le indique que sistemas de archivos y directorios debe exportar, así Abarca Miguel (2008) indica que el archivo queda de la siguiente manera.- /tftpboot 192.168.10.0/255.255.255.0(rw,no_root_squash) /home 192.168.10.0/255.255.255.0(rw,no_root_squash) /usr 192.168.10.0/255.255.255.0(rw,no_root_squash) Por otro lado explica “Cada línea indica el directorio a exportar, seguido de opciones que controlan el acceso al recurso. En este caso estamos especificando que los directorios solo podrán ser exportados a hosts con dirección IP dentro de la subred 192.168.10.0 y máscara 255.255.255.0 (lo cual corresponde precisamente a la subred que estamos empleando para los nodos del cluster). Los parámetros entre paréntesis indican los privilegios con que se exporta el recurso. 101 En este caso especificamos rw (read/write), lo cual indica que se permiten peticiones de lectura y escritura en el sistema exportado. Comúnmente se especifica la opción ro (read only), pero en este caso se requiere acceso total porque los nodos requerirán la capacidad de escribir en sus sistemas de archivos remotos. El parámetro no_root_squash desactiva el “aplastamiento de root”, que es el comportamiento por omisión al exportar por NFS. Normalmente, para evitar que un sistema remoto monte un sistema de archivos y el superusuario de ese sistema tenga acceso total a nuestro sistema, el NFS mapea las peticiones realizadas por el usuario con uid 0 a un usuario anónimo con privilegios mínimos. En este caso se desea que los accesos con uid 0 no tengan un mapeo a un uid diferente, pues en los nodos sí se requieren accesos privilegiados. Esto no representa un riesgo de seguridad porque en este caso los accesos privilegiados están restringidos a los nodos, sobre los cuales se tiene bastante control administrativo”. Configuración por nodo. Montaje de los sistemas de archivos remotos.- En relación al montaje de los sistemas de archivos remotos Abarca Miguel (2008) menciona “no es necesario tomar pasos adicionales para que cada nodo monte su sistema de archivos raíz. Como parte del arranque, el kernel montará el directorio NFS 192.168.10.1:/tftpboot/hostname como su directorio raíz. El archivo que indica los sistemas de archivos a montar una vez iniciado el sistema es el /etc/fstab. Ya que la configuración será la misma para todos los nodos, es conveniente realizar el cambio primero en el directorio nodo1 que se creó para su posterior duplicación. 102 Para que los nodos monten los sistemas de archivos compartidos (/home y /usr), el archivo /etc/fstab debe quedar como sigue: none /proc proc defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0 192.168.10.1:/usr /usr nfs defaults 0 0 192.168.10.1:/home /home nfs defaults 0 0 Cada línea debe tener 6 elementos separados por espacios. El primer elemento es el nombre o identificador del dispositivo a montar. El segundo elemento es el directorio sobre el cual se debe montar. El tercero indica el tipo de sistema de archivos que se encuentra en el dispositivo. El cuarto indica parámetros de montaje para el dispositivo. Los dos últimos elementos indican el orden en que se debe respaldar el sistema de archivos utilizando el comando dump. En este caso las dos primeras líneas están configuradas de antemano. La primera indica el montaje del sistema de archivos proc, que contiene información de tiempo de ejecución del sistema y se genera dinámicamente. La segunda indica el montaje del sistema de archivos devpts, que genera dinámicamente las terminales virtuales para acceso remoto al sistema. Las dos líneas siguientes indican el montaje de los sistemas /usr y /home. Éstos se montan a través de NFS (nótese el tercer parámetro especificando el tipo de sistema de archivos). La sintaxis para denotar el dispositivo a montar es servidor:directorio. Estas dos líneas montan los directorios /usr y /home del servidor en la misma ubicación en cada nodo”. 103 Configuración cliente NIS (Network Information Service).Al respecto Abarca Miguel (2008) dice “El cliente NIS requiere fijar el nombre de dominio NIS al que va a pertenecer, de manera similar a la del servidor NIS, por medio del programa domainname: # domainname DOMINIO De esta manera se indica al sistema que pertenece al dominio tornado. Para no tener que realizar este procedimiento cada vez que se inicia el sistema se puede añadir la siguiente línea en el archivo /etc/sysconfig/network: NISDOMAIN="DOMINIO" Una vez que se ha fijado el valor de la variable NISDOMAIN, se requiere indicar el servidor que atenderá las peticiones NIS. Esto se configura en el archivo etc/yp.conf. Se agrega la siguiente línea al archivo: ypserver 192.168.10.1 Obsérvese que 192.168.10.1 es la dirección IP del servidor NIS. Finalmente el cliente NIS debe ejecutar el programa que ejecuta las peticiones al servidor NIS, llamado ypbind. De nuevo se observa el prefijo yp, en este caso el nombre de la utilería indica que se “amarra” o “une” (bind) el cliente al dominio NIS previamente especificado. 104 Archivo /etc/hosts.- Este archivo contiene una lista de mapeos de nombres a direcciones IP. Esta información genera la correcta operación del sistema. Por otro lado es importante resaltar que este es uno de los archivos compartidos a través de NIS, así pues, solo es necesario modificarlo en el servidor central para que la información en los nodos sea la misma. Abarca Miguel (2008) brinda un ejemplo del posible contenido del archivo que contiene la lista de direcciones IP seguidas de nombres simbólicos.- 127.0.0.1 localhost 192.168.10.1 DOMINIO #nodos 192.168.10.68 nodo1 192.168.10.69 nodo2 192.168.10.70 nodo3 192.168.10.71 nodo4 Una vez que ya se agrego la información al archivo, es relevante crear los mapas de NIS, ejecutando el comando make en el directorio /var/yp, así lo menciona Miguel Abarca. En caso de no ser así los nodos no podrán tener acceso a la información y el sistema no funcionará de manera correcta. 105 3.5. Propuesta de implementación de un cluster tipo Beowulf La propuesta que aquí se plantea es la aplicación de un clúster tipo Beowulf, su configuración ya se mencionó detalladamente en el punto anterior, sin embargo hay que mencionar que el clúster plateado se aplicará en un grupo mínimo de diez computadoras marca HP con sistema operativo Windows pertenecientes al centro de cómputo de sistemas, en esta facultad. Para que el clúster funcione correctamente, como ya se especificó en el apartado anterior, es conveniente implantar el sistema operativo Linux con su distribución RedHat, ya que permite una administración adecuada del mismo. Esta distribución y sistema operativo es lo más recomendado para este tipo de sistemas ya que uno de sus grandes objetivos es el reducir los costos y este sistema operativo como sabemos es de distribución libre, otro de sus principales objetivos es el brindar una rápida resolución de problemas que requieran de gran capacidad de memoria. Un cluster de este tipo necesita de un nodo maestro como mínimo, dicho nodo (computadora), se recomienda que sea la que está ubicada dentro del cubículo del encargado del centro de cómputo, siendo los nodos esclavos las primeras diez computadoras de este centro. El objetivo de que el nodo maestro esté ubicado dentro del cubículo es que los usuarios comunes de los equipos de cómputo no modifiquen la configuración principal del clúster, ya que es el nodo maestro el encargado de dar las instrucciones principales a los nodos esclavos para realizar las tareas indicadas. Para evitar que los equipos de cómputo pierdan la función principal que es brindar a los usuarios el servicio de internet y prácticas escolares dentro de la facultad, se propone realizar un formateo de los mismos para poder realizar la partición conveniente y tener en el mismo equipo el sistema operativo Windows para 106 realizar tareas comunes de los usuarios y el sistema operativo Linux para realizar actividades y tareas acordes al clúster. Cabe señalar que la aplicación de un clúster tiene muchas ventajas y usos dentro del área de la computación administrativa ya que, como ya se ha mencionado anteriormente, tiene una gran capacidad de resolución de tareas que necesitan de gran capacidad de almacenamiento como puede ser el empleo de un sistema integral de una gran empresa, donde las bases de datos se encuentren disponibles en línea en cualquier momento y reflejar las actividades que se realicen en la misma de manera instantánea. En nuestra facultad se propone el uso de este cluster para realizar tareas de simulación, ya que esto ayudaría bastante a las materias de algorítmica, programación y análisis de algoritmos para estudiar el comportamiento de las instrucciones realizadas a la computadora, por otro lado se puede también estudiar un poco de inteligencia artificial ya que al realizar simulaciones, se puede conocer el proceso de programación y la forma de responder de un robot o sistema complejo sin la necesidad de construirlo físicamente, lo cual ahorraría bastante dinero al programador y a la empresa responsable del desarrollo, en este caso la Universidad Veracruzana, por otro lado también puede utilizarse para actividades cotidianas de la facultad como es el formateo de equipo de cómputo evitando respaldar la información en un disco dvd o una unidad USB, ya que al tener la capacidad de varios discos duros enlazados, se puede formatear una computadora respaldando toda su información en línea en uno de los discos de los nodos del clúster. A continuación se presenta la configuración necesaria para que un clúster realice las funciones de simulación, en específico se presenta la instalación y configuración de Network Simulation 2 (NS2). Como ya se mencionó con anterioridad, se instalará bajo una plataforma Linux, estando compuesto por un grupo total de diez computadoras fungiendo sólo una como nodo maestro, la cuál 107 estará a cargo de la gestión de todas las instrucciones y actividades que se realizarán en el mismo. Gordon David (2002) menciona que “es una herramienta de simulación de código abierto que funciona en Linux. Es un simulador de eventos discretos destinados a redes de investigación y proporciona un apoyo sustancial para la simulación de enrutamiento, protocolos de multidifusión IP y protocolos, como UDP, TCP, RTP y redes alámbricas e inalámbricas (locales y por satélite).” Gordon David (2002) en su artículo publicado en el “Linuxjournal” explica la manera en la cual se lleva a cabo la instalación y la configuración de este clúster, recomienda la descarga del paquete “todo en uno” ya que incluye el código fuente necesario para aplicar el parche en apoyo al Stream Control Transmission Protocol (SCTP). La descarga de este paquete se realiza desde la página de inicio de NS2 en la liga /usr/src y se extrae de la siguiente manera.- cd /usr/src tar xzvf ns-allinone-2.1b8.tar.gz cd ns-allinone-2.1b8 La propuesta de implementación en específico de este trabajo es el Network Simulation como ya se menciono con anterioridad y debido a que se necesita aplicar un SCTP se necesita aplicar un parche desarrollado por la Universidad de Delaware, este parche está disponible para el paquete todo en uno que se aplicará, se debe descargar de la pagina del Laboratorio de Ingeniería en Protocolos. Gordon David (2002), menciona que “con la utilidad de parches de Linux, usted puede actualizar el origen de NS2 código para incluir soporte para SCTP mediante la aplicación de la revisión.- patch -p0 < ns-allinone-2.1b8.sctp-rel2.2_patch_orig” 108 En el mismo directorio se encuentra un script llamado “instalación” del cuál debemos configurar, compilar e instalar los componentes NS2, tanto los obligatorios como los opcionales. Una vez completada la instalación Gordon David (2002), menciona que aparecerá el siguiente mensaje en el shell.- Please put $CUR_PATH/bin:$CUR_PATH/tcl$TCLVER/unix:$CUR_PATH/ tk$TKVER/unix into your PATH environment; so that you'll be able to run itm/tclsh/wish/xgraph. IMPORTANT NOTICES: [...] El conjunto de validación NS2 se encarga de verificar que todos los protocolos sean funcionales. Para correr la validación es necesario correr el siguiente código.cd ./ns-2.1b8 ./validate Después de aplicar el parche SCTP al paquete NS2 se crea un archivo readme al finale de este archivo existe un ejemplo de script par una interaccion SCTP. 109 El script original es un código existente para la versión 2.1b7a. para la versión 2.1b8 NS2 se deben actualizar las lineas de código de dicho script. Gordon David (2002) muestra la actualización del código.- Trace set show_sctphdr_ 1 set ns [new Simulator] set nf [open sctp.nam w] $ns namtrace-all $nf set allchan [open all.tr w] $ns trace-all $allchan proc finish {} { global ns nf allchan trace_ch $ns flush-trace close $nf close $allchan close $trace_ch set PERL "/usr/bin/perl" set USERHOME [exec env | grep "^HOME" | sed /^HOME=/s/^HOME=//] set NSHOME "$USERHOME/ns-allinone-2.1b8" set XGRAPH "$NSHOME/bin/xgraph" set GETRC "$NSHOME/ns-2.1b8/bin/getrc" set SETFID "$NSHOME/ns-2.1b8/bin/set_flow_id" set RAW2XG "$NSHOME/ns-2.1b8/bin/raw2xg" set RAW2XG_SCTP "$NSHOME/ns-2.1b8/bin/raw2xg-sctp" 110 exec $PERL $GETRC -s 0 -d 1 all.tr > all.tr.sctp exec $PERL $GETRC -s 1 -d 0 all.tr >> all.tr.sctp exec $PERL $SETFID -m all.tr.sctp | \ $PERL $RAW2XG_SCTP -A -q -t SCTP | \ $XGRAPH -bb -tk -nl -m -x time -y packets & exec nam sctp.nam & exit 0 } set false 0 set true 1 set n0 [$ns node] set n1 [$ns node] $ns duplex-link $n0 $n1 .5Mb 300ms DropTail $ns duplex-link-op $n0 $n1 orient right $ns queue-limit $n0 $n1 93000 set err [new ErrorModel/List] $err droplist {15} $ns lossmodel $err $n0 $n1 set sctp0 [new Agent/SCTP] $ns attach-agent $n0 $sctp0 $sctp0 set fid_ 0 $sctp0 set debugMask_ 0x00303000 # u can use -1 to turn on everything $sctp0 set debugFileIndex_ 0 $sctp0 set mtu_ 1500 $sctp0 set dataChunkSize_ 1448 111 $sctp0 set numOutStreams_ 1 $sctp0 set initialCwndMultiplier_ 2 $sctp0 set useMaxBurst_ $true set trace_ch [open trace.sctp w] $sctp0 set trace_all_oneline_ 0 # do not trace all variables $sctp0 trace cwnd_ $sctp0 attach $trace_ch set sctp1 [new Agent/SCTP] $ns attach-agent $n1 $sctp1 $sctp1 set debugMask_ -1 $sctp1 set debugFileIndex_ 1 $sctp1 set mtu_ 1500 $sctp1 set initialRwnd_ 65536 $sctp1 set useDelayedSacks_ $false $ns color 0 Red $ns color 1 Blue $ns connect $sctp0 $sctp1 set ftp0 [new Application/FTP] $ftp0 attach-agent $sctp0 $ns at 0.5 "$ftp0 start" $ns at 4.5 "$ftp0 stop" $ns at 5.0 "finish" $ns run 112 Gordon David (2002) menciona que este código es básicamente para establecer las rutas de acceso en función al entorno específico. Una vez realizados los cambios en las rutas de las herramientas utilizadas se puede iniciar el uso de NS2 para la simulación de redes SCTP. Para comenzar con esta simulación se deben seguir los siguientes pasos.- cd /usr/src/ns-allinone-2.1b8 ns ./sctp.tcl 113 Acontinuación se presentan tres ventanas derivadas de la ejecución de la instalación de este paquete.- La figura 1 muestra un gráfico con tráfico de paquetes. El óvalo color amarillo representa, paquetes basura o perdidos, y horizontalmente a la derecha se encuentra la retransmición. La pérdida de este paquete se debe a la introducción de un modelo de pérdida de error en el código. La función de éste codigo es el desechar los paquetes entre nodos previamente especificados. SCTP gestiona la distribución de paquetes de manera similas que TCP, el apoyo de retransmición rápida. (Gordon David, 2002) Figura 8.- Perfil de datos de SCTP *Fuente.- Network Simulatior 2: a Simulation Tool of Linux 114 El código de error es el siguiente.- set err [new ErrorModel/List] $err droplist {15} $ns lossmodel $err $n0 $n1 La figura número 2 muestra una ventana de simulación, donde al dar un click derecho en el link entre ambos nodos y el gráfico seleccionado (gráfico de ancho de banda y después de dar un click en el link), se obtiene una barra gráfica representando el ancho de banda corriendo desde el nodo cero hacia el nodo uno se puede repetir este proceso pero para conocer el ancho de banda que va desde el nodo uno al nodo cero.- Figura 9.- Ventana de Simulación *Fuente.- Network Simulatior: a Simulation Tool of Linux 115 Una vez inicializado el escenario de simulación es importante mencionar algunas líneas que son importantes en el script y se explicará su función. (Gordon David, 2002). [...] // después de inicializar el código, archivos y ventana de simulación. set n0 [$ns node] // dos nodos están creados set n1 [$ns node] // (n0 y n1) $ns duplex-link $n0 $n1 .5Mb 300ms DropTail // después se ligan ambos $ns duplex-link-op $n0 $n1 orient right [...] set sctp0 [new Agent/SCTP] $ns attach-agent $n0 $sctp0 [...] set sctp1 [new Agent/SCTP] $ns attach-agent $n1 $sctp1 Posteriormente se define el protocolo SCTP que se usara para el destino y el retorno del tráfico. Un agente que defin que protocolo utilizar es similar a una compañía para los paquetes. Cada agente debe estar asociado a un nodo específico, asi pues el código es según Gordon David (2002).- $ns connect $sctp0 $sctp1 // conecta de manera conjunta ambos agentes para crear un canal de comunicación o de datos. [...] set ftp0 [new Application/FTP] // define el tipo de aplicación que usará la corriente de datos, FTP. $ftp0 attach-agent $sctp0 116 Para comenzar con la simulación en tiempo real, se debe presionar el botón de inicio. La primera acción que se hace notar son los cuatro paquetes que inician la conexión FTP. El segundo evento es el control de la gestión. SCTP envía algunos paquetes a la vez e incrementa constantemente hasta alcanzar un rendimiento máximo. El principio y final de la conexión FTP se definen en las siguientes líneas (Gordon David, 2002).- $ns at 0.5 "$ftp0 start" $ns at 4.5 "$ftp0 stop" Se debe observar cómo los paquetes son enviados de manera creciente, o visualmente, en formatos más largos. En realidad los paquetes son siempre de la misma longitud, sin embargo, el número de paquetes recibidos por el servidor se incrementa como se puede ver en el número de sacos recibidos por el cliente (figura 10) (Gordon David, 2002).- Figura 10.- SACOS de cada paquete SCTP enviado *Fuente.- Network Simulator 2: a Simulation Tool of Linux 117 De esta manera se realiza la configuración del Clúster Bewuolf para realizar la simulación, que es la propuesta de este trabajo, todo ello con el fin de reducir costos como se menciono anteriormente y de igual manera para reafirmar y practicar sobre ciertas acciones y tipos de programación. Es de gran utilidad para la facultad ya que se pretende que con la implementación de este clúster se logre una preparación académica de alto nivel en cuanto a la programación y al uso y diseño de redes de computadoras. 118 CONCLUSIÓN 119 La computación paralela es el conjunto de computadores u ordenadores que trabajan en manera conjunta y de forma paralela para resolver tareas grandes. La ventaja de este tipo de computación es el hecho de que no se desperdicia el tiempo de inactividad de los computadores, ya que como su nombre lo indica, el nodo principal, al detectar un tiempo de ocio en cualquier nodo, manda una tarea a éste, de manera que no se pierde esa capacidad de memoria. Esta es la base de la elaboración de este trabajo. El objetivo de este trabajo fue el estudio detenido de la computación paralela, en especial los clústeres de alto rendimiento, se analizaron temas como los antecedentes de los clústeres, los tipos de clústeres existentes, su funcionamiento, aplicación, configuración e implementación, se identificaron los distintos elementos que integran a la computación paralela, se conocieron las ventajas del uso de los clústeres, sus componentes y por último se elaboró una propuesta de implementación de un cluster tipo Beowulf en el centro de cómputo de esta facultad. Por otro lado se mencionaron los clústeres existentes hasta el día de hoy y el ámbito en el cual se aplican. Los temas principales de la computación paralela, es principalmente, el middleware, los software de paralelización, así pues, se explico detenidamente como funcionan estos software (middleware y paralelización). Se conoce ahora que el principal sistema operativo en el cual se implementan los clústeres es Linux, ya que como se estudio a lo largo del trabajo, el principal objetivo de esta red de computadoras, es el reducir los costos y tiempos en la realización de tareas grandes que necesitan de una capacidad de memoria y resolución grande, por tanto Linux cubre perfectamente este objetivo al ser un sistema operativo de distribución libre y al contar con la mayoría de paquetes requeridos para la correcta configuración e implementación de un cluster. 120 Específicamente se estudió el diseño, configuración e implementación del cluster tipo Beowulf, este tipo de cluster fue la propuesta de implementación de este trabajo en el centro de cómputo de esta facultad. 121 FUENTES DE INFORMACIÓN Abarca Castro Miguel, 2008, Sistemas Distribuidos “Estructuración de Un Cluster Beowulf”, 7 de mayo de 2010, http://xxito.files.wordpress.com/2008/11/trabajofinal-beowulf.pdf Baeza R., s/a, Arquitectura ccNUMA, Servidores Origin de Silicon Graphics Inc., 4 de mayo de 2010, http://www.dcc.uchile.cl/~rbaeza/cursos/proyarq/choviedo/numa_definicion.html Baker Mark, s/a, Cluster Computing at a Glance, 2 de abril de 2010, http://www.digipede.net/downloads/Digipede_CCS_Whitepaper.pdf Baker Mark, 1999, Cluster Computing: A High-Performance Contender, 2 de abril de 2010, http://arxiv.org/ftp/cs/papers/0009/0009020.pdf Barak, 1999-2010, Cluster and Multi-Cluster Management, 1 de abril de 2010, http://www.mosix.org/ Bayona Valentín Maribel, 2009, Implementación de un Cluster de Alta Disponibilidad Utilizando Herramientas Libres, 20 de abril de 2010, http://aslcuba.wordpress.com/2009/07/16/implementacion-de-un-cluster-de-altadisponibilidad-utilizando-herramientas-libres/ Bono Rick, s/a, Pondermatic IV Home Supercomputing with Linux, 2 de abril de 2010, http://www.ic.uff.br/~vefr/research/clcomp/pondermatic.html Bosque José Luis, 2006, Sesión 4: Modelos de computación paralela, 2 de mayo de 2010, http://dac.escet.urjc.es/docencia/Doctorado/CPBC/sesion4.pdf Buytaert Kris, 2006, El manual para el Clustering con Openmosix, 1 de mayo de 2010,http://www.wikilearning.com/tutorial/el_manual_para_el_clustering_con_open mosix/9756 122 Contento T. Marcia, s/a, Cluster de Balanceo de Carga y Alta Disponibilidad Para Servicios Web y Mail, 28 de abril de 2010, http://www.utpl.edu.ec/eccblog/wpcontent/uploads/2007/04/articulo-tecnico-cluster-de-balanceo-de-craga-y-altadisponibilidad-para-servicios-web-y-mail.pdf Clustering y Alta Disponibilidad en GNU/Linux, 16 de abril de 2010, http://www.augcyl.org/doc/2007-curso-salamanca/clustering-ha.pdf De Bustos Pérez Josá Ángel, 2007, Utilización y Administración avanzadas de sistemas GNU/Linux y aplicaciones Software Libre para Estudiantes Universitarios Sin Autor, s/a, Red Hat Enterprise Linux 4: Manual de Referencia, Capítulo 20. Protocolo SSH, 20 de abril de 2010, http://web.mit.edu/rhel-doc/4/RH-DOCS/rhelrg-es-4/ch-ssh.html Departament d’Arquitectura de Computadoras, 2002, Cluster Beowulf, 5 de mayo de 2010, http://studies.ac.upc.edu/EPSC/TFC/Beowulf/beowulf.html Dinda A. Peter, 2001, Host Load Prediction Using Linear Models, 6 de abril de 2010, http://www.cs.northwestern.edu/~pdinda/Papers/cluster00.pdf Duran Cristian, s/a, Trabajo Clusters, 15 de abril de 2010, http://www.slideshare.net/cduranmardones/trabajo-clusters Foster Ian, s/a, Designing and Building Parallel Programs, 4 de abril de 2010, http://www.mcs.anl.gov/~itf/dbpp/ Gordon David, 2002, Network Simulator 2: a Simulation Tool of Linux, 25 de Julio de 2010, http://www.linuxjournal.com/article/5929 Guerrero Cañongo Daniel, 2003, Instalación de Kimberlite, 27 de abril de 2010, http://www.mmc.igeofcu.unam.mx/LuCAS/Manuales-LuCAS/doc-instalacioncluster-alta-disponibilidad/instalacion-cluster-alta-disponibilidad/node8.html 123 Iriarte Ciro, 2003, Clustering: Introducción a la Informática, 13 de abril de 2010, http://www.dei.uc.edu.py/tai2003-2/clustering/html/clasificacion.html Jose Luis Bosque, 2006, Sesión 1: Arquitectura Paralela Basada en Cluster, 7 de abril de 2010, http://dac.escet.urjc.es/docencia/Doctorado/CPBC/sesion1.pdf José CC & SuperBenja, 2006, Implementación de un cluster OpenMosix para Cómputo Científico en el Instituto de Ingeniería de la UNAM, 9 de abril de 2010, http://www.josecc.net/archivos/tesis/tesis_html1/Tesis.html Kaufmann Morgan, s/a, The Parallel Computing Environment, 6 de abril de 2010, http://oldweb.cecm.sfu.ca/PSG/book/intro.html Lizárraga Celaya Carlos, 2003, Cluster de Linux, 31 de Marzo de 2010, http://clusters.fisica.uson.mx/clusters_de_Linux.htm M.A. Gómez Zúñiga Iliana, s/a, Clusters de Alto Rendimiento, 14 de abril de 2010, http://148.202.45.49/drupal/sites/default/files/Cluster%20alto%20rendimiento2.pdf Microsoft Windows, 2003, Grid and Cluster Computing: Options for Improving Windows Application Performance, 2 de abril de 2010, http://www.digipede.net/downloads/Digipede_CCS_Whitepaper.pdf Modi Anirudh, 1999, COCOA Beowulf Cluster FAQ, 2 de abril de 2010, http://www.ic.uff.br/~vefr/research/clcomp/cocoa.html New Divises, s/a, Bases tecnológicas funcionales de un microprocesador, 1 de mayo de 2010, http://www.newdevices.com/tutoriales/cpu/2.html Paz Carlos, s/a, Cómo configurar una interfaz de red virtual, 21 de abril de 2010, http://www.linuxdata.com.ar/index.php?idmanual=interfazdredvirtual.html&manuale =1 124 Plata Oscar, 2003, Clusters: Arquitecturas Distribuidas, 13 de abril de 2010, http://www.ac.uma.es/educacion/cursos/informatica/ArqDist/pdfs/04-Clusters.pdf Radajewski Jacek, 1998, Beowulf HOWTO, 2 de abril de 2010, abril de 2010, http://www.ic.uff.br/~vefr/research/clcomp/Beowulf-HOWTO.html Sin Autor, 2010, What is Linux Clustering, 3 de http://www.squidoo.com/linux-clustering#module82220481 Sin Autor, s/a, Taxonomía de las arquitecturas de computadoras, 7 de abril de 2010, http://agamenon.uniandes.edu.co/~c21437/ma-bedoy/taxonomi.htm Sin Autor, s/a, Conmutación de Paquetes, 8 de abril de 2010, http://es.wikitel.info/wiki/Conmutaci%C3%B3n_de_paquetes Sin Autor, s/a, Alta Disponibilidad, 9 de abril de 2010, http://www.netlinux.cl/altadisponibilidad Sin Autor, 2009, Super Computadora con GNU/Linux y Mosix, 10 de abril de 2010, http://www.lastdragon.net/?p=325 Sin Autor, s/a, Linux Virtual Server-LVS, Capitulo 3.Balanceo de Carga, 29 de abril de 2010, http://www.mmc.igeofcu.unam.mx/LuCAS/Manuales-LuCAS/doc-cursosalamanca-clustering/html/ch03s04.html Sin Autor, s/a, Redes de Ordenadores- Network Computing- Cluster de Alto Rendimiento, 30 de abril de 2010, http://www.netzweb.net/html/print/red/net_com/cl_a_r.pdf 125 Solsona Tehás Francesc, 2002, Coscheduling Techniques for Non-Dedicated Cluster Computing, 1 de abril de 2010, http://www.tesisenxarxa.net/TESIS_UAB/AVAILABLE/TDX-0303103185705//fst1de3.pdf Suarez M. Jose, 2002, Sistema HA bajo Linux, 26 de abril de 2010, http://www.goa.es/docs/linux_ha_apache.pdf Turner Dave, s/a, Introduction to Parallel Computing and Cluster Computing, 1 de abril de 2010, http://www.scl.ameslab.gov/Projects/parallel_computing/para_intro.html 126 ÍNDICE DE FIGURAS Y TABLAS Página Tabla 1. Comparación de arquitecturas SIMD y MIMD……………..……………19 Figura 1. Esquema de la clasificación de computadoras……………………….20 Tabla 2. Clasificación de los clústeres………….………………………………….22 Figura 2. Arquitectura de un clúster………………………………………………..36 Figura 3. Diseño abajo-arriba de un cluster…...…………………………………..48 Figura 4. Diagrama del cluster……………………………………………………….77 Figura 5. Arquitectura de un clúster Beowulf……………………………………..80 Figura 6. Estructura de SMP………………………………………………………….87 Figura 7. Estructura de MPP………………………………………………………….89 Figura 8. Perfil de datos de SCTP………………………………………………….114 Figura 9. Ventana de simulación………………………………………………......115 Figura 10. SACOS de cada paquete SCTP enviado…………………………….117 127 128