# Gestionnaire de tâches

Les gestionnaires de tâches ou de batchs occupent une place particulière dans le domaine de l'informatique appelé le calcul haute performance. Ils servent en général à gérer de façon logicielle des grosses installations informatiques parallèles utilisées de façon concurrente par plusieurs utilisateurs physiques ou virtuels. Sur un système multitâche de type UNIX, une partie logicielle du noyau, appelée ordonnanceur (scheduler), permet aux différents processus lancés d'accéder les uns après les autres aux ressources de la machine, selon la capacité de l'ordinateur à les traiter, selon son taux d'occupation, selon des priorités qui peuvent être des attributs de ces processus, etc.
De la même façon, un gestionnaire de batchs implémente un ordonnanceur de processus ou scheduler à une échelle plus large ; il servira à transmettre les processus à traiter non plus sur la machine sur laquelle tourne cet ordonnanceur, mais sur une ou plusieurs des différentes machines constituant l'installation informatique du cluster.

## Terminologie

* Un cluster (ou encore grappe de serveurs, ferme de calcul) est un ensemble d'ordinateurs agencés en réseau -en général rapide ; il se compose de plusieurs unités (certains clusters atteignent la taille de plusieurs dizaines de milliers d'unités). Il est généralement utilisé pour réaliser des traitements lourds en ressource de calcul et/ou de mémoire.
* Un nœud est l'un de ces ordinateurs qui composent le cluster. Il peut être mono- ou multiprocesseur, et il est géré par son propre système d'exploitation qui exploite ses ressources localement.
* Le maître est un ordinateur qui fait tourner certains éléments du gestionnaire de tâches ainsi que les outils de supervision; il peut servir de nœud, même si dans la pratique ce cas est en général évité.
* Le gestionnaire de tâches est composé de 3 éléments principaux :
** Le serveur, élément central, chargé de réaliser l'interface entre les utilisateurs et les autres éléments,
** L'ordonnanceur, chargé de gérer l'accès aux ressources du cluster,
** Le lanceur de processus, appelé mom car étant le père (ou la mère) de tous les processus qu'il lance pour le compte des jobs.
* Une queue est une file d'attente dans laquelle s'accumulent les jobs en attente de traitement par le serveur.
* Une tâche ou job est un petit programme, écrit en général dans un langage de script (shell), contenant la définition de l'environnement dans lequel il souhaite lancer son calcul (nombre de nœuds, nombre de processeurs, etc.). Il contient aussi les références des fichiers utilisés et du programme de calcul qu'il souhaite lancer. Il est placé dans une queue par le serveur dans l'attente de son traitement.
* Une règle d'ordonnancement (policy) définit quelle méthode doit appliquer l'ordonnanceur au traitement des tâches en attente dans les queues. Celle-ci peut être de type FIFO (premier rentré, premier sorti), ou bien utiliser des algorithmes spécialisés comme le backfilling, le fairshare, etc.

## Composants
### Le serveur

Le serveur occupe une place centrale dans le gestionnaire de tâches. Toutes les commandes des utilisateurs, de l'opérateur et de l'administrateur du système sont envoyées à ce serveur en TCP/IP. Le rôle principal de ce serveur est de fournir les services élémentaires dont on besoin les tâches :
* créer les batch pour recevoir les tâches,
* modifier les tâches,
* protéger les tâches contre les crashs des nœuds,
* placer les tâches en exécution,
* suspendre les tâches en exécution,
* tuer les tâches en exécution,
* refuser les tâches selon certains critères
* gérer les queues.

### L'ordonnanceur

Les queues, quant à elles, sont constituées potentiellement de collections ordonnées de tâches en attente de traitement. On distingue 2 catégories de queues :
* les queues de routage,
* les queues d'exécution.
Elles possèdent des attributs qui conditionnent leur capacité à recevoir les jobs.
Une queue de routage possède pour attribut une liste ordonnée de queues d'exécution et sert à aiguiller les tâches dirigées vers elles par un utilisateur vers la première de ces queues d'exécution pour laquelle les ressources disponibles atteignent les ressources demandées.

### Interactions entre les composants
## Les principes du calcul parallèle
## Les implémentations
### Maui

Maui Cluster Scheduler, précurseur de Moab, est un ordonnanceur de tâches (scheduler) open source destiné aux clusters et aux super-ordinateurs. C'est un outil configurable et optimisé destiné à supporter plusieurs politiques d'ordonnancement, les priorités dynamiques, la réservation étendues de plages temporelles, le partage équitable des ressources (fairshare). Il est actuellement utilisé par des centaines de gouvernements, dans l'éducation, et sur des serveurs à visée commerciale à travers le monde. Toutes les capacités présentes sur Maui le sont aussi sur Moab, puisque Moab a ajouté à Maui des fonctionnalités telles que la notion de réseau virtuel de clusters (VPC, voir VPN), utile lorsque les nœuds sont dispersés géographiquement sur plusieurs réseaux, le support des déclencheurs basiques, des outils d'administration graphique, et un portail web à destination des utilisateurs.

### OAR

OAR est un gestionnaire de ressources pour grappe de PC (cluster de calcul) développé originellement au laboratoire ID-IMAG à Grenoble, comme un clone d'OpenPBS (80 % des fonctionnalités/20 % du nombre de lignes de code), sous licence libre (OpenSource).
Aujourd'hui OAR est le gestionnaire de ressource utilisé par la plate-forme expérimentale nationale de grille de calcul Grid'5000, ainsi que par plusieurs autres sites universitaires, voire industriels.