Slurm (Simple Linux Utility for Resources Management), es un sistema de gestión de tareas y de clústeres (nodos o servidores de cómputo). Slurm como sistema de gestión tiene tres tareas claves:
En SLURM, debemos de diferenciar dos tipos de roles (que se corresponden con los distintos tipos de usuarios del sistema), que son los “usuarios” y los “administradores”. Ambos interactúan con SLURM mediante un conjunto de comando simples, pero sus propósitos son totalmente contrapuestos:
Para poder realizar todas estas tareas de una forma adecuada el administrador debe de conocer de forma concienzuda el hardware con el que se está trabajando.
Mirando la ilustración 1, tenemos que SLURM consiste en un demonio central(slurmctdl) que se ejecuta en un nodo de administración, y se encarga de monitorizar los recursos y el trabajo. Puede existir otro demonio exactamente igual, que será un demonio de respaldo para asumir esa responsabilidad ante posibles fallos.
En cada nodo de cómputo se ejecuta un demonio(slurmd), cuyo cometido es: esperar trabajos, ejecutar esos trabajos, devolver el resultado de ejecución de esos trabajos y esperar más trabajos. Estos demonios proporcionan comunicaciones jerárquicas tolerantes de fallos.
Existe otro demonio (slurmdbd), que es opcional y que puede usarse para registrar la información relativa a la contabilidad de varios clústeres que estén administrados por SLURM en una única base de datos.
Como ya dijimos anteriormente los usuarios interactúan con SLURM mediante un conjunto de comandos simples, los cuales son:
Comandos | Descripción |
---|---|
srun | Envía un trabajo para su ejecución |
scancel | Finaliza trabajos que se encuentren en ejecución o pendientes |
sinfo | Muestra información sobre el estado de los nodos de cómputo |
squeue | Informa sobre el estado de los trabajos en ejecución en orden de prioridad y luego de los trabajos pendientes también en orden de prioridad |
sacct | Da información acerca de trabajos completados o que se encuentren activos. |
smap | Muestra información del estado de los trabajos, particiones y nodos de cómputo, pero muestra la información gráficamente para reflejar la topología de la red |
sview | Interfaz gráfica para obtener información acerca del estado de los trabajos, particiones y nodos de cómputo |
salloc | Asigna recursos para un trabajo en tiempo real |
sattach | Añade una entrada o salida estándar a un trabajo |
sbatch | Envía un script para su posterior ejecución |
sbcast | Se utiliza para mandar un archivo a los nodos de cómputo asignados a un trabajo |
sacctmgr | Herramienta para gestionar la base de datos |
scontrol | Herramienta administrativa que se utiliza para ver o modificar el estado de SLURM.Muchos comandos control sólo podrán ser ejecutados como root |
strigger | Nos permite ver, obtener o establecer eventos de activación |
Ver más
Otro concepto que utiliza SLURM en cuanto a la arquitectura es el de las particiones( ilustración 2). Una partición es una agrupación de nodos que tienen una “conexión fuerte entre ellos”, es decir, que tienen alguna especie de característica en común, por ejemplo: mismo conjunto de funciones hardware o software.
Como norma, cada nodo debe de estar incluido en al menos una partición, y nada limita que un nodo pueda estar incluido en varias particiones.
Ilustración 3:Secuencia de ejecución de un trabajo (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
Una vez visto cómo se ejecuta un trabajo, es interesante ver los estados por los que puede pasar cada uno de ellos.
De manera predeterminada SLURM utiliza una política FIFO (First In First Out), para gestionar la prioridad de los trabajos.
Si se quiere modificar esta política para gestionar la prioridad de los trabajos, se debe de modificar el parámetro “PriorityType” en el fichero de configuración “slurm.conf”, que por defecto su valor es “priority/basic”, que es lo que permite la programación FIFO.
Multi-factor Job Priority:
En SLURM existe una política muy versátil para ordenar la cola de trabajos en espera, esta es “Multi-factor Job Priority”, y para usarla debemos de modificar el parámetro “PriorityType” en el archivo “slurm.conf” de la siguiente manera: “PriorityType=priority/multifactor”. Hay seis factores en esta política que influyen en la prioridad del trabajo:
La prioridad de los trabajos será la suma ponderada de todos los factores que se le hayan indicado en el archivo “slurm.conf”. Además, podemos asignar un peso a cada uno de los factores para dar más prioridad a unos factores sobre otros.
La programación de los recursos va a depender del tipo de trabajo que se va mandar a ejecución o del complemento de programación que se vaya a elegir.
Trabajos interactivos:
SLURM va despachando los trabajos en función de su prioridad, esto depende totalmente de la política de prioridad que se vaya a utilizar.
Cuando llega una petición de ejecución de un trabajo, SLURM intenta asignarle los recursos que necesita, si es posible le asigna los recursos y comienza la ejecución, si no, se quedará esperando en la petición de inicio de trabajo hasta que los recursos que necesite estén disponibles.
Este método hace que la utilización del sistema y su capacidad de respuesta sea baja. Para ello se puede utilizar el complemento de programación Backfill Scheduling, que viene activado por defecto. Esto hará que se puedan iniciar trabajos de menor prioridad si al hacerlo no se retrasa la hora de inicio de ningún trabajo de mayor prioridad.
Reservas:
Por otra parte, debemos de destacar que SLURM tiene la capacidad de reservar recursos. Los recursos que se pueden reservar incluyen núcleos, nodos, búferes de ráfaga…etc. Una reserva identificará los recursos que están reservados y el periodo de tiempo en el que la reserva estará disponible. En la respuesta de creación de una reserva se incluye el nombre de la misma, que es generado de forma automática por SLURM. Para poder utilizar una reserva, en la solicitud de envío de trabajo se debe de especificar el nombre de la reserva. Por defecto cuando llegue la hora de finalización de una reserva, si el trabajo asociado a la misma no ha terminado este se cancelará. A medida que se acerca la hora de inicio de una reserva, solo se iniciarán los trabajos que se puedan completar antes de que se alcance dicha hora.
El uso de una reserva mejora la prioridad de un trabajo, es decir, cualquier trabajo con una reserva asociada se considera antes para la programación de recursos que cualquier otro trabajo no asociado a una reserva.
Por defecto las reservas no pueden solaparse. Es decir, no pueden existir a la vez dos reservas que incluyan el mismo nodo. Si en una reserva no se especifican los nodos de forma explícita, es SLURM quien se encargará de seleccionarlos de manera que se evite esa superposición y poder garantizar que los nodos estarán disponibles cuando comience la reserva.
Las reservas pueden ser creadas, actualizadas o destruidas solo por el usuario root.
Programación de pandillas:
SLURM permite la programación en grupo, es decir, en la que dos o más trabajos se asignan a los mismos recursos. En este caso, los trabajos se suspenden de manera alternativa para que ambos puedan acceder de manera exclusiva a los recursos durante un período de tiempo previamente configurado (Scheduler Timeslice).
Este tipo de programación mejora la capacidad de respuesta y la utilización del sistema al permitir que más trabajos puedan ejecutarse antes. Los trabajos de ejecución más corta ya no tienen que esperar en una cola detrás de los trabajos más largos, ya que mediante esta ejecución de manera alternativa se les permitirá empezar y terminar antes.