# Sun Grid Engine

Sun Grid Engine (SGE), también conocido en la actualidad como Oracle Grid Engine, es un software de código abierto desarrollado por Sun Microsystems, cuya función principal es la gestión de un sistema manejador de recursos computacionales o procesos distribuidos en ambientes heterogéneos, de modo que se utilicen los dichos recursos de la manera más eficiente posible. A su vez Sun Microsystems proporciona al mercado un sistema no gratuito que se basa en el funcionamiento del SGE, denominado N1 Grid Engine (N1GE).
Grid Engine por poseer la característica de ser de código abierto y gratuito está destinado para ser utilizado en la página web del proyecto bajo la licencia del estándar de la industria Sun (Sun Industry Standards Source License). Oracle proporciona una versión comercial, destinada a otros usos, disponible para su adquisición en su página web. A pesar de esta situación, parece ser que a partir de la versión 6.2u6 todas las versiones posteriores que se vayan distribuyendo serán para uso comercial, siendo gratuitas únicamente durante un periodo de prueba de 90 días a partir de adquisición.
SGE se usa normalmente en aquellos lugares que disponen de un gran número de ordenadores o de clústeres de Computación de alto rendimiento (HPC). En estas estructuras, el SGE se encarga principalmente de funciones como la aceptación, programación, envío y gestión de la ejecución remota y distribuida de un gran número de tareas en el espacio de usuario, ya sean estas secuenciales, paralelas o interactivas. Además de las funcionalidades ya mencionadas de SGE, existe la posibilidad de gestionar y programar la reserva de recursos distribuidos en toda la estructura, como procesadores, memoria, espacio de disco y licencias de software.
Es un sistema altamente configurable, sencillo de administrar y de utilizar por parte de los usuarios. Su escalabilidad lo ha llevado a ser el sistema de mayor éxito entre los mayores clúster de supercomputación.
Al igual que Condor y PBS, SGE trabaja con shellscripts que definen los requisitos de los trabajos de los usuarios, pero además puede tratar directamente con binarios e incluso ejecutar trabajos interactivos.
Se trata, sin lugar a dudas, del producto más completo disponible en el mercado, tanto por rendimiento como por facilidad de uso y capacidad de configuración. A todo esto hay que sumar el hecho de que se trata de un proyecto de código abierto con una comunidad de desarrolladores y administradores enorme y, algo de lo que pecan otros proyectos, el respaldo de una empresa del prestigio como Sun Microsystems y, en la actualidad Oracle.
SGE es la base del sistema Sun Grid Utility Computing, es decir, la base del control de la utilización de los recursos computacionales y procesos distribuidos, siendo puesto a disposición de los usuarios para su adquisición a través de internet en Estados Unidos en el año 2006, para pasar a ser asequible después en el resto de países del mundo.

## Características de la versión 6.2

* Reserva anticipada.
* Dependencias de la matriz.
* Reserva de recursos y control de las cuotas de uso de esos recursos (a nivel individual y de clúster).
* Ejecución remota mejorada (sin usar rshd/rlogind/sshd procesos externos).
* Multi-clustering, es decir, permite la utilización en paralelo de multitud de ordenadores, estando estos conectados mediante algún tipo de red.
* Demonios gestionados por el centro de administradores de los servicios de Solaris (Service Management Facility).
* Los trabajos interactivos están apoyados por Pseudo TTY (pty).
* Verificador de presentación del trabajo (verificación de trabajo de cliente y servidor).
* Instalador con interfaz gráfica de usuario (GUI) y revisión del SGE.
* Topología “inteligente” de programación e hilos vinculantes.
* Integración con Hadoop y Amazon EC2 para facilitar el Cloud Computing.
* Posee varios algoritmos de programación avanzada basados en políticas de asignación de recursos.
* Permite la creación de colas de clúster.
* Tolerancia a fallos del programador (Grid Engine sigue funcionando siempre y cuando existan uno o más hosts).
* Puntos de control o guardado de trabajo.
* Matrices de trabajo y tareas.
* DRMAA (como API de trabajo para la presentación y control de trabajos en entornos distribuidos) con la posibilidad de usar diferentes lenguajes como C/C++, Java/Java script, Perl, Python.
* Informe de avances de XML (qstat y qhost) y la interfaz de web de xml-qstat.
* Trabajos paralelos (MPI, PVM, OpenMP) y arranque de trabajo paralelo escalable con qrsh.
* Contabilidad y control de uso (sensores de inactividad).
* Contabilidad y presentación de la consola (ARCO).
* Integración con FLEXlm y gestión de licencias software con LicenseJuggler.
* Soporte multiplataforma.
* Calendario inteligente, para almacenar los cambios de una forma segura y correcta y para mantener el control en las colas de tareas o ejecución.
* Manejo y administración de usuarios.
* Migración de tareas de un host a otro con la posibilidad de realizarse con o sin punto de control.

## Plataformas

SGE es un sistema multiplataforma, destacando las siguientes:
* AIX
* BSD (la mayoría de arquitecturas).
* HP-UX (PA-RISC & IA64)
* IRIX
* Linux (la mayoría de arquitecturas).
* Mac OS X (PPC & x64)
* Solaris (SPARC & x64)
* Tru64
* Windows
Otras plataformas menos comunes:
* UNICOS (Cray)
* SUPER-UX (NEC SX)
Incluyendo diferentes variantes de Linux
* PS/2 & PS/3
* zLinux

## Arquitectura clúster del SGE

Un clúster con el sistema Grid Engine típico consiste en un host principal o maestro y uno o más host en ejecución. Además se pueden configurar varios host maestros secundarios, similar a una estructura RAID, que asumen el papel del host principal en caso de que éste se bloquee o deje de funcionar de forma correcta.
En el caso del SGE, cada host recibe un nombre que lo diferencia de los demás, siendo estos nombres Grid1, Grid2,…, hasta nombrar todos y cada uno de ellos. El único host que recibe un nombre diferente a los demás es el host principal, al que se le suele denominar Grid (sin poseer un número que lo determine). Los SGE funcionan mejor cuando todos los usuarios que usan máquinas del sistema utilizan una cola de trabajos, puesto que aplican todas las características y potencia de este sistema.

## Funcionamiento del SGE

Antes de comenzar a detallar más aspectos del funcionamiento es necesario explicar algunos conceptos, como job y cola.
* job: es una unidad de trabajo que es definida por un programa ejecutable. Hay varios tipos:
      * Batch.
      * Trabajos interactivos.
      * Trabajos paralelo.
* cola: es un contenedor para una categoría de trabajos que pueden ser asignados para ser ejecutados en un único host. Una cola pueden distinguirse de otras en cuanto a:
      * Tipos de trabajos.
      * Números de CPUs disponibles.
      * Cuando pueden migrarse los trabajos de una cola a otra.
      * Listas de usuarios.
Los usuarios envían trabajos (jobs): El usuario especifica el perfil de requisitos (CPU disponible, disco, arquitectura...).
SGE registra el trabajo, su perfil de requisitos e información de control (usuario, grupo, proyecto, departamento, fecha/hora de envío...).
Tan pronto como una cola, quede disponible, SGE lanza a ejecución uno de los trabajos en espera:
* Aquel con mayor prioridad o mayor tiempo en espera, según la configuración del planificador.
* En caso de que haya varias colas disponibles se escoge la más descargada.
* Puede haber varias colas por host.
A partir de estos datos ya podemos explicar el último punto del funcionamiento del SGE, conocido como ciclo de vida del trabajo o job, donde se observa el camino que sigue cada trabajo desde que un usuario lo envía hasta que recibe el resultado. El ciclo de vida de un trabajo es el siguiente:
* Se envía el trabajo.
* El host maestro almacena el trabajo en su base de datos.
* El host maestro asigna el trabajo a una cola y lo envía al host correspondiente.
* El host de ejecución almacena el trabajo en su base de datos, lo inicia y espera a obtener el resultado.
* Cuando ha finalizado envía el resultado al host maestro y elimina el trabajo de su base de datos.

## Políticas de planificación

SGE tiene tres políticas de planificación a la hora de establecer un orden y distribuir los trabajos. Estas políticas se pueden combinar para implementar nuevas políticas de uso de un clúster:
* Política basada en tickets (usuario): cuántos más tickets tenga un usuario mayor será su prioridad.
* Política de urgencia (trabajo):
      * Deadline: que es la hora límite que tiene un trabajo para que sea obtenido su resultado.
      * El tiempo que lleve esperando el trabajo en la cola.
      * Los recursos que sean demandados por el trabajo.
* Política personalizada: permite asignar una prioridad a los trabajos, con unos valores entre -1023 y 1024.

## Ventajas y beneficios de su uso

El sistema SGE es un gestor de recursos distribuidos (DRM) que administra la distribución de las cargas de trabajo de los usuarios teniendo en cuenta la disponibilidad de dichos recursos.
Uno de las primeras ventajas, y de los más destacables, es la situación que tiene lugar en un centro de trabajo donde la utilización de los recursos suele estar en torno a un promedio del 10-25%, y que al emplear el SGE puede aumentar al 80-90%. Esta mejora procede de la inteligente distribución de la carga de trabajo y de la correcta utilización de los recursos, de tal modo que ningún host se encuentre sobrecargado en comparación con el resto, existiendo un equilibrio en las cargas de trabajo.
Cuando los usuarios envían su trabajo al SGE, el sistema controla el estado actual de todos los recursos del clúster y es capaz de asignar dichos trabajos a los recursos más adecuados. Además este sistema permite a los administradores adaptar sus entornos informáticos y sus recursos para conseguir el mayor rendimiento.
Además este sistema permite la posibilidad de supervisar los trabajos enviados y consultar los host en donde se están ejecutando, si han terminado, si ha tenido lugar algún tipo de error, entre otras consultas. También proporciona un historial de trabajo donde comprobar distintos datos, como fechas, usuarios, etc.
Por otro lado si se trabaja con Apache Hadoop, el SGE reduce el coste de ejecución de estas aplicaciones y permite compartir y utilizar los recursos para otras tareas, evitando el uso único de un grupo de host para esta tarea. Si se trabaja con Amazon EC2 el SGE proporciona recursos adicionales de forma automática, reduciendo la “picos” de demanda a los centros de datos que se producen.
Como resultado de estas ventajas, se producen varios beneficios:
* Se reducen los tiempos de ejecución, llegando a ser en algunos casos de un 50%.
* Se reduce el consumo de energía, debido a que se gestionan los recursos de tal manera que los periodos de inactividad se minimizan.

## Soporte y formación

Sun proporcionó contratos de soporte para la versión comercial del Grid Engine en la mayoría de plataformas UNIX y Windows. Los servicios profesionales, de consultoría y formación fueron proporcionados por Sun Partners. Sun Partners se asoció con la Universidad de Georgetown para impartir clases de administración de Grid Engine. El personal de estas instituciones proporcionó breves talleres de formación, con una duración de 1 o 2 días. Este tipo de talleres ha tenido lugar en la ciudad de Regensburg (Alemania) en los años 2002, 2003, 2007, 2009 y 2012.
Por otro lado, los usuarios de este sistema pueden obtener cualquier tipo de soporte y solución a través de las listas de correo que proporciona la comunidad de Grid Engine.

## Usuarios

Los principales y más destacados usuarios de este sistema son:
* Sun Grid, servicio suministrado en la actualidad por Oracle, que proporciona acceso a recursos computacionales a través de internet, para facilitar y acelerar ciertas tareas.
* El superordenador TSUBAME del Instituto Tecnológico de Tokio.
* Centro de Computación Avanzada de Texas (Texas Advanced Computing Center-TACC).
* San Diego Supercomputer Center (SDSC).
* Laboratorio geofísico de dinámica de fluidos (Geophysical Fluid Dynamics Laboratory-NOAA GFDL).

## Historia

En el año 2000, Sun adquirió Gridware, empresa especializada en sistemas de gestión de recursos de computación con oficinas en San José, California y Regensburg (Alemania), para ofrecer una versión gratuita para Solaris y Linux, a la que denominó Sun Grid Engine.
En el año 2001, Sun liberó el código y adoptó el modelo de desarrollo open source o código abierto, lo que provocó la aparición de adaptaciones para otros sistemas UNIX, Mac OS, etc.
En 2010, después de la compra de Sun MicroSystems por Oracle, renombró el SGE y lo denominó Oracle Grid Engine. Posteriormente el código fuente de la actualización de la versión 6.2 del Grid Engine no se incluyó con los archivos binarios y los cambios no se pusieron de nuevo en el repositorio del proyecto. Como respuesta a esta situación la comunidad del Grid Engine comenzó a desarrollar el proyecto Open Grid Scheduler, para continuar con el desarrollo y mantenimiento de una implementación libre y gratuita del Grid Engine.
El 18 de enero de 2011, la empresa privada Univa anunciaba que había reunido a varios ingenieros de gran importancia del equipo de Sun Grid Engine y que estaba desarrollando su propia versión del Grid Engine. Además, la empresa ha anunciado que su sistema, conocido como Univa Grid Engine incluirá soporte comercial, lo que supone que competiría con la versión oficial de Oracle Grid Engine.

## Otros productos basados en el sistema Grid Engine

* Sun Constellation System
* Sun Visualization System
* Sun Compute Cluster
* ClusterVisionOS Distribution
* Rocks Cluster Distribution
* Univa's UniCluster Express
* Univa Grid Engine
* BioTeam's iNquiry
* Nimbus