User Tools

Site Tools


cluster:universo_standard

Enviar trabajos al universo Standard

Control de versiones

Fecha Actividad Autor
24/07/2010 Publicación inicial Jorge Iván Meza Martínez.

Introducción

En este capítulo se analiza la funcionalidad del universo Standard y se envía al cluster un trabajo simple desarrollado en C a través de él.

Tiempo estimado

45 minutos.

Precondición

  • El cluster se encuentra completo y en operación.

Supuestos

Ninguno.

El universo Standard

Este universo provee puntos de chequeo (checkpointing) y llamados a sistemas remotos. Los programas que vayan a ser ejecutados deberán ser reenlazados con las librerías de Condor, para esto no se requiere necesaria el código fuente pero si tener acceso a los archivos objeto (*.o).

Condor durante la ejecución de los trabajos en este universo realiza puntos de chequeo a intervalos regulares. Estos consisten en una imagen (snapshot) del estado actual del trabajo lo que permite de ser necesario, migrarlo a otras máquinas sin perder lo realizado hasta el momento. Esto es especialmente útil como medida que apoya la tolerancia a fallos en el caso en que se presenten problemas en el nodo trabajador en donde se estaba ejecutando.

La facilidad de los llamados a sistemas remotos permite hacer creer a los trabajos ejecutados en diferentes máquinas del cluster que están siendo ejecutados en su máquina local. Esto logra gracias al proceso condor_shadow que se ejecuta en la máquina lanzadora y procesa localmente los llamados al sistema (como abrir un archivo) que el trabajo intenta realizar en la máquina remota, enviando posteriormente su resultado para que sea suministrado como respuesta a su invocación.

Restricciones del universo

  1. No están permitidos los trabajos multiproceso (fork(), exec() o system()).
  2. No setá permitida la comunicación entre los procesos (pipes, semáforos o memoria compartida).
  3. La comunicación en red deberá ser breve de lo contrario se interferirá con la generación de los puntos de chequeo y la migración.
  4. El envío de señales SIGUSR2 y SIGTSTP está prohibída ya que Condor las utiliza internamente, las demás pueden utilizarse normalmente.
  5. No está permitido el uso de alarmas como alarm(), getitimer() y sleep().
  6. No está permitido utilizar múltiples hilos del kernel, sin embargo los hilos del nivel de usuario si lo están.
  7. No están permitidos los archivos de memoria mapeada (mmap() y munmap()).
  8. Los bloqueos de archivo (file locks) se permiten pero no se mantienen entre puntos de chequeo.
  9. Los archivos deben abrirse en modo sólo-lectura o sólo-escritura, el modo lectura-escritura podrá causar problemas si se requiere restaurar un punto de chequeo anterior (rollback), por este motivo si se utiliza se generará una advertencia.
  10. Debe considerarse en la máquina que envía el trabajo un espacio en disco suficiente para almacenar las imágenes de los puntos de chequeo del trabajo. Cada imagen de estas ocupa aproximadamente el tamaño de la memoria virtual que consume el trabajo mientras se ejecuta.
  11. En Linux el trabajo deberá estar enlazado estáticamente mientras que en Solaris deberá estar enlazado dinámicamente.
  12. No está soportado leer o escribir archivos de mas de 2GB.

Ejemplo

El código fuente del trabajo a enviarse al cluster.

$ vi HelloCluster.c
HelloCluster.c
#include <stdio.h>
#include <unistd.h>
 
int main(void)
{
 char hn[256];
 int control = gethostname(hn, sizeof(hn));
 
 if(control == -1)
 {
   perror("gethostname");
   return 1;
 }
 
 printf("Hello cluster, my name is: %s.\n\n", hn);
 
 return 0;
}

La compilación (genera código objeto *.o).

$ gcc -c HelloCluster.c

El enlace (genera archivo ejecutable).

$ condor_compile gcc HelloCluster.o -o HelloCluster

Si se cuenta con el código fuente (como en este caso), el proceso de compilar & enlazar puede realizarse en un sólo paso.

$ condor_compile gcc HelloCluster.c -o HelloCluster

El archivo de envío del trabajo.

$ vi HelloCluster.submit
HelloCluster.submit
Executable     = HelloCluster
Universe       = standard
Output         = _HelloCluster.out
Error          = _HelloCluster.err
Log            = _HelloCluster.log
Queue

El envío del trabajo al cluster.

$ condor_submit HelloCluster.submit

La obtención de los resultados.

$ cat _HelloCluster.log
 
    000 (024.000.000) 07/12 10:32:43 Job submitted from host: <192.168.1.220:9204>
    ...
    001 (024.000.000) 07/12 10:32:52 Job executing on host: <192.168.1.222:9875>
    ...
    005 (024.000.000) 07/12 10:32:53 Job terminated.
    (1) Normal termination (return value 0)
    Usr 0 00:00:00, Sys 0 00:00:00  -  Run Remote Usage
    Usr 0 00:00:00, Sys 0 00:00:00  -  Run Local Usage
    Usr 0 00:00:00, Sys 0 00:00:00  -  Total Remote Usage
    Usr 0 00:00:00, Sys 0 00:00:00  -  Total Local Usage
    1050  -  Run Bytes Sent By Job
    5462131  -  Run Bytes Received By Job
    1050  -  Total Bytes Sent By Job
    5462131  -  Total Bytes Received By Job
    ...
$ cat _HelloCluster.err
 
    (vacío)
$ cat _HelloCluster.out
 
    Hello cluster, my name is: c-wn2.micluster.com

Enlaces

cluster/universo_standard.txt · Last modified: 2012/02/26 22:35 (external edit)