Organización y gestión de sistemas de altas prestaciones
Índice
Introducción
Objetivos
-
Entender el funcionamiento y organización de los sistemas de altas prestaciones.
-
Conocer los fundamentos de los componentes básicos de los sistemas de altas prestaciones.
-
Conocer el funcionamiento y los componentes que forman los sistemas de gestión de aplicaciones en sistemas paralelos para computación de altas prestaciones.
-
Aprender los conceptos fundamentales de las políticas de planificación de trabajos en entornos de altas prestaciones.
1.Organización de los sistemas de altas prestaciones
-
Nodos de login: Son los nodos accesibles por los usuarios, habitualmente mediante conexiones seguras de tipo ssh. Los supercomputadores normalmente disponen de varios nodos de login. Este tipo de nodos facilitan funciones básicas, como por ejemplo, crear y editar ficheros, compilar código fuente, utilizar herramientas para estudiar el rendimiento de aplicaciones, hacer pruebas de funcionalidad, enviar y gestionar trabajos al sistema de colas, etc. En algunos casos los nodos de login son del mismo tipo que los nodos de cómputo, pero pueden ser de diferentes tipos e incluso tener una arquitectura diferente. En el último caso, el usuario tiene que utilizar opciones específicas de compilación para que el programa pueda ejecutarse correctamente acorde a los nodos de cómputo. Como parte de la infraestructura de seguridad del sistema, también se acostumbran a utilizar cortafuegos para aislar el sistema de la red externa.
-
Nodos de cómputo: Son los que ejecutan las aplicaciones paralelas utilizando una red de alta velocidad. A pesar de que pueden ser heterogéneos, normalmente son homogéneos o bien tienen diferentes particiones que son homogéneas. Por ejemplo, puede haber un conjunto de nodos con CPU, otros que incluyen GPU, y otros que se utilizan para la visualización y tienen características específicas, como por ejemplo, mayor capacidad de memoria.
-
Proporcionar transparencia al usuario de modo que no tenga que preocuparse de los detalles de bajo nivel.
-
Escalabilidad del sistema.
-
Disponibilidad del sistema para soportar las aplicaciones de los usuarios.
-
El concepto de SSI (single system image) permite al usuario ver el clúster de forma unificada como si fuera un único recurso o sistema de cómputo.
2.Redes de interconexión
2.1.Redes de sistemas de memoria compartida
2.2.Redes de sistemas de memoria distribuida
2.3.Latencia y ancho de banda
3.Sistemas de archivos para sistemas de altas prestaciones
3.1.Sistemas de archivos distribuidos
-
Un usuario puede acceder a sus mismos archivos desde diferentes máquinas.
-
Diferentes usuarios pueden acceder a los mismos archivos desde diferentes máquinas.
-
Es más fácil de administrar puesto que solo hay un servidor o grupo de servidores.
-
Se mejora la fiabilidad puesto que se puede añadir, por ejemplo, tecnología RAID (redundant array of independent disks).
-
Escalabilidad: El servicio se tiene que poder extender incrementalmente para gestionar un amplio rango de cargas y medidas de red.
-
Tolerancia a fallos: Clientes y servidores tienen que operar correctamente ante fallos.
-
Consistencia: Diferentes clientes tienen que ver el mismo directorio y contenido de los archivos si acceden al mismo tiempo.
-
Seguridad: Mecanismos de control de acceso y autenticación.
-
Eficiencia: Su utilización tiene que ser similar a la de los sistemas de ficheros locales.
3.1.1.Network File System (NFS)
-
rpc.mountd: Es un proceso que recibe la petición de montaje desde un cliente NFS y comprueba si coincide con un sistema de archivos actualmente exportado.
-
rpc.nfsd: Es un proceso que implementa los componentes del espacio del usuario del servicio NFS. Trabaja con el núcleo Linux para satisfacer las demandas dinámicas de clientes NFS, como por ejemplo, proporcionar procesos adicionales del servidor para que los clientes NFS lo utilicen.
-
ro: Solo lectura (read-only). Las máquinas no pueden cambiar el sistema de ficheros.
-
rw: Lectura-escritura (read-write).
-
async: Permite al servidor escribir los datos en el disco cuando lo crea conveniente.
-
sync: Todas las escrituras en el disco hay que hacerlas antes de devolver el control al cliente.
-
wdelay: El servidor NFS retrasa la escritura en disco cuando hay sospecha de que otra petición de escritura es inminente.
-
no_wdelay: Para desactivar la opción anterior, la cual solo funciona si se usa la opción sync.
-
root_squash: Proporciona a los usuarios privilegiados (root) conectados remotamente tener ciertos privilegios, como root local.
-
no_root_squash: Para desactivar la acción anterior.
-
all_squash: Para reconvertir a todos los usuarios.
3.2.Sistemas de archivos paralelos
-
DAS (direct-attached storage): Solución "clásica" de disco asociado a nodo.
-
NAS (network-attached storage): Nodo que gestiona un conjunto de discos.
-
SAN (storage area networks): Red dedicada al almacenamiento.
-
Almacenamiento no vinculado a ningún nodo ("discos de red").
-
Redes de comunicación separadas para datos de aplicación y ficheros.
-
Redes de almacenamiento incluyen hubs, switches, etc. La tecnología más utilizada es Fibre Channel.
-
Conectividad total entre nodos y dispositivos: cualquier nodo puede acceder directamente a cualquier dispositivo.
-
Conectividad directa entre dispositivos: por ejemplo, para hacer copias entre dispositivos (agiliza copias de seguridad, replicación, etc.).
-
3.2.1.General Parallel File System (GPFS)
-
Garantiza la consistencia de los datos.
-
Tiene una alta recuperabilidad y disponibilidad de los datos.
-
Proporciona una alta flexibilidad al sistema.
-
Administración simplificada.
-
Permite que múltiples procesos o aplicaciones accedan simultáneamente a los datos desde todos los nodos utilizando llamamientos estándar del sistema.
-
Incremento del ancho de banda de cada uno de los nodos que intervienen en el sistema GPFS.
-
Balancea la carga uniformemente entre todos los nodos del sistema GPFS. Un disco no puede tener más actividad que otro.
-
Soporta datos de grandes dimensiones.
-
Permite lecturas y escrituras concurrentes desde cualquier nodo del sistema GPFS.
-
Comandos de gestión/administración.
-
Extensiones del núcleo.
-
Un demonio multi-hilo.
-
Una capa portable de código abierto.
-
Asignación de espacio en disco para nuevos archivos.
-
Administración de directorios.
-
Asignación de bloqueo para la protección de la integridad de los datos y de los metadatos.
-
Los servidores de discos son iniciados con un hilo del demonio.
-
La seguridad también se administra por el demonio en conjunto con el administrador de los sistemas de ficheros.
3.2.2.Linux Cluster File System (LUSTRE)
-
Clientes que acceden al sistema.
-
Object storage servers (OSS), que proporcionan el servicio de entrada/salida de archivos.
-
Metadata servers (MDS), que gestionan los nombres y los directorios del sistema de archivos.
4.Sistemas de gestión de colas y planificación
4.1.Sistemas de gestión de colas
4.1.1.PBS (portable batch system)
-
server: es un demonio encargado de recibir los trabajos que hay que ejecutar y esperar los comandos del usuario.
-
mom (o job executor): es un demonio que se ejecuta en cada uno de los nodos de cómputo y que envía y recibe los trabajos que hay que ejecutar.
-
scheduler: es un planificador que decide qué trabajos se tienen que ejecutar en función de la política que esté establecida.
-
Un evento le dice al server que empiece un ciclo de planificación.
-
El server le envía una petición de planificación al scheduler.
-
El scheduler solicita información sobre los recursos a los mom.
-
Los mom retornan la información solicitada al scheduler.
-
El scheduler solicita información sobre el trabajo al server.
-
El server retorna la información sobre el estado del trabajo al scheduler y toma la decisión y ejecuta el trabajo o no en función de la política establecida.
-
El scheduler envía una petición de ejecución al server.
-
El server envía el trabajo al mom para que lo ejecute.
-
Especificar si es un trabajo batch o interactivo. El hecho de que sea interactivo no quiere decir que se ejecute de manera inmediata, sino que cuando se ejecuta le permite al usuario interactuar con el programa, a diferencia de los trabajos batch, que se ejecutan en segundo plano sin que el usuario pueda interactuar directamente.
-
Definir una lista con los recursos necesarios.
-
Definir la prioridad del trabajo para su ejecución.
-
Definir el tiempo de ejecución, que es una información importante para planificar los trabajos de modo eficiente.
-
Especificar si se quiere enviar un correo electrónico al usuario cuando la ejecución empieza, acaba o es abortada.
-
Definir dependencias.
-
Sincronizar el trabajo con otros trabajos.
-
Especificar si se quiere hacer checkpointing (en el caso de que el sistema operativo ofrezca esta posibilidad). El checkpointing resulta especialmente importante en ejecuciones muy largas en las que se desea monitoritzar la aplicación durante el tiempo de ejecución, o bien por cuestiones de seguridad hacia posibles fallos.
-
cput: máximo tiempo de CPU usado por todos los procesos del trabajo.
-
pcput: máximo tiempo de CPU usado por cada uno de los procesos del trabajo.
-
mem: cantidad máxima de memoria física utilizada por un trabajo.
-
pmem: cantidad máxima de memoria física utilizada por cada uno de los procesos de un trabajo.
-
vmem: cantidad máxima de memoria virtual utilizada por un trabajo.
-
pvmem: cantidad máxima de memoria virtual utilizada por cada uno de los procesos de un trabajo.
-
walltime: tiempo de ejecución (de reloj, no de CPU).
-
file: tamaño máximo de cualquier fichero que puede crear el trabajo.
-
host: nombre de los nodos computacionales en los que ejecutar el trabajo.
-
nodes: número y/o tipo de los nodos que hay que reservar para el uso exclusivo del trabajo.
-
Comandos de usuario: qsub, qstat, qdel, qselect, qrerun, qorder, qmove, qhold, qalter, qmsg, qrls.
-
Comandos de operación: qenable, qdisable, qrun, qstart, qstop, qterm.
-
Comandos de administración: qmgr, pbsnodes.
qsub [-a date_time] [-A account_string] [-c interval] [-C directive_prefix] [-e path] [-h] [-I] [-j join] [-k keep] [-l resource_list] [-m mail_options] [-M user_list] [-N name] [-o path] [-p priority] [-q destination] [-r c] [-S path_list] [-u user_list][-v variable_list] [-V] [-W additional_attributes] [-z] [script]
-
PBS_O_HOST: es el nombre del servidor en el que el comando qsub se está ejecutando.
-
PBS_O_QUEUE: es el nombre de la cola inicial a la que se envió el trabajo.
-
PBS_O_WORKDIR: es la ruta (absoluta) del directorio de trabajo que se ha indicado en el comando qsub.
-
PBS_ENVIRONMENT: indica si el trabajo es en segundo plano (PBS_BATCH) o interactivo (PBS_INTERACTIVE).
-
PBS_JOBID: es el identificador de trabajo que le asigna el sistema de colas.
-
PBS_JOBNAME: se trata del nombre del trabajo proporcionado por el usuario.
-
PBS_NODEFILE: es el nombre del fichero que contiene la lista de nodos que se le asignará al trabajo.
-
PBS_QUEUE: se trata del nombre de la cola desde la que el trabajo se ha ejecutado.
qstat [-f][-W site_specific] [job_identifier... | destination...] qstat [-a|-i|-r] [-n] [-s] [-G|-M] [-R] [-u user_list][job_identifier... | destination...] qstat -Q [-f][-W site_specific] [destination...] qstat -q [-G|-M] [destination...] qstat -B [-f][-W site_specific] [server_name...]
qdel [-W delay] job_identifier ...
qalter [-a date_time] [-A account_string] [-c interval] [-e path] [-h hold_list] [-j join] [-k keep] [-l resource_list] [-m mail_options] [-M user_list] [-N name] [-o path] [-p priority] [-r c] [-S path] [-u user_list] [-W additional_attributes] job_identifier...
#!/bin/sh #! Ejemplo de fichero de definición de trabajo para enviar mediante qsub #! Las líneas que empiezan por #PBS son options de la orden qsub #! Número Número de procesos (8 en este caso, 4 por nodo) #PBS -l nodos=4:ppn=2 #! Nombre de los ficheros para la salida estándar y error #! Si no se especifican, por defecto son <job-name>.o <job_number> y <job-name>.e<job_number> #PBS -e test.err #PBS -o test.log #! Dirección de correo electrónico del usuario para cuando el trabajo acabe o se aborte #PBS -m ae #! Directorio de trabajo echo Working directory is $PBS_O_WORKDIR #!cd <working directory> echo Running on host 'hostname' echo Time is 'date' echo Directory is 'pwd' echo This jobs runs on the following processors: echo 'cat $PBS_NODEFILE' MPI executable - it's possible to redirect stdin/stdout of all processes #! using "<" and ">" - including the double quotes /usr/local/bin/mpiexec -bg a.out