Enviando trabajos al universo estándar del cluster

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).

Durante la ejecución de los trabajos Condor realiza en este universo, puntos puntos de chequeo a intervalos regulares.  Estos consisten en una imagen (snapshot) del estado actual del trabajo lo que permite migrarlo a otras máquinas sin perder lo realizado hasta el momento.  Esto es especialmente útil como 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.

$ vi 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.

$ gcc -c HelloCluster.c

El enlace.

$ 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

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.210:9204>
...
001 (024.000.000) 07/12 10:32:52 Job executing on host: <192.168.1.212: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.jorgeivanmeza.com.

Enlaces.

No related posts.

Category: Utilización | Tags: , , , , , , 2 comments »

2 Responses to “Enviando trabajos al universo estándar del cluster”

  1. Enviando trabajos al universo vanilla del cluster | GridUAM

    [...] Iniciar sesión « Enviando trabajos al universo estándar del cluster [...]

  2. Enviando al cluster varios trabajos basados en el mismo ejecutable | GridUAM

    [...] anterior ejecutaría tres procesos basados en el programa MyJob el cual se deberá encontrar recompilado para el universo estándar, tomará la entrada estándar para cada una de las instancias de los archivos MyJob-#.in (que por [...]


Leave a Reply



 

Back to top