Master: Ingénierie des Systèmes et des Projets Spécialité: Systèmes Dynamiques et Signaux Année 2010/2011 Rapport intermédiaire de master SDS Présenté et soutenu par: Florent Reynier le 22/02/2011 Au sein de l’Institut des Sciences et Techniques de l’Ingénieur d’Angers Titre: Ordonnancement de tâches pour minimiser la consommation maximale d’énergie d’un ordinateur Jury: Président : Examinateurs : L. Hardouin L. Autrique F. Chapeau Blondeau J.L. Boimond M. Bourcerie P. Declerck J.B. Fasquel C. Jean-Guillaume M. Lhommeau D.Rousseau Professeur Université d’Angers Professeur Université d’Angers Professeur Université d’Angers Professeur Université d’Angers Professeur Université d’Angers MCF Université d’Angers MCF Université d’Angers MCF Université d’Angers MCF Université d’Angers MCF Université d’Angers Encadrants: J. Noe, L. Hardouin et M. Lhommeau LABORATOIRE D’INGÉNIERIE DES SYSTÈMES AUTOMATISÉS EA 4094 - Université d’Angers Rapport intermédiaire de master SDS Table des matières Résumé 1 Asbtract 1 Introduction 2 1 Les grappes de calculs 1.1 Les tâches . . . . . . . . . . . . . . . . . 1.2 Les ordonnanceurs . . . . . . . . . . . . 1.2.1 Ordonnanceurs en temps partagé 1.2.2 Ordonnanceurs spatiaux . . . . . 1.3 Les bibliothèques de communication . . . 1.3.1 PVM . . . . . . . . . . . . . . . . 1.3.2 MPI . . . . . . . . . . . . . . . . 1.3.3 Techniques de parallélisation . . . . . . . . . . . 3 3 4 4 4 5 5 6 6 . . . . . . . . . . . . 7 7 7 7 8 9 9 10 10 10 11 11 11 . . . . . . 12 12 13 13 15 16 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Politiques d’ordonnancement 2.1 Algorithmes sans retard . . . . . . . . . . . . . . . . 2.1.1 FCFS . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Déclinaison . . . . . . . . . . . . . . . . . . . 2.1.3 FCFS-FF . . . . . . . . . . . . . . . . . . . . 2.1.4 Backfilling . . . . . . . . . . . . . . . . . . . . 2.2 Algorithmes avec contraintes de priorités . . . . . . . 2.2.1 IBM SP Scheduler . . . . . . . . . . . . . . . 2.3 Algorithmes basés sur l’heure de fin . . . . . . . . . . 2.3.1 EDF - Earliest Deadline First . . . . . . . . . 2.3.2 RED - Robust Earliest Deadline . . . . . . . . 2.4 Déclinaison optimisant la consommation énergétique . 2.4.1 LC - Concentration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Méthodes pour réduire la consommation énergétique 3.1 Mesure de l’énergie consommée . . . . . . . . . . . . . 3.2 Modèle de consommation énergétique du processeur . . 3.2.1 Énergie consommée et temps de calcul . . . . . 3.2.2 Équirépartition des temps de calcul . . . . . . . 3.3 Dynamic Voltage Scaling . . . . . . . . . . . . . . . . . 3.4 Application au système du CEA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusion 18 Références 19 Florent Reynier Ordonnancement de tâches pour minimiser la consommation maximale d’énergie d’un ordinateur Titre: Mots clés: Grappe de calculateurs, Ordonnanceurs, Linux, Consom- mation électrique, Dynamic Voltage Scheduling, Algorithme Résumé: La consommation électrique d’un ordinateur, plus particulièrement des grappes de calculs croît avec l’augmentation de leur puissance. Ce phénomène est aujourd’hui de plus en plus problématique car l’énergie a un coût financier et environnemental de plus en plus élevé, et parfois même n’est pas acheminable en quantité suffisante jusqu’aux calculateurs. Minimiser la consommation d’énergie d’un ordinateur est donc impératif. Pour ce faire, il existe différentes techniques pouvant être greffées aux algorithmes implémentés par les ordonnanceurs dont le Dynamique Voltage Scheduling. Ce rapport propose un état de l’art relatif à ces problématiques. Title: Job scheduling to minimize the maximum power consumption of a computer Keywords: Cluster, Scheduler, Linux, Power consumption, Dynamic Voltage Scheduling, Algorithm Abstract: The power consumption of a computer, especially clusters of computers raises with the increase of their power. Today this phonemenon is problematic as the energy costs more and more, and sometimes is not routable in sufficient quantity to the computers. Minimizing the maximum power consumption of a computer is imperative. To do this, there are various techniques witch can be grafted to the algorithms implemented by schedulers like Dynamic Voltage Scheduling. This report is a state of art concerning these problems. LABORATOIRE D’INGÉNIERIE DES SYSTÈMES AUTOMATISÉS EA 4094 - Université d’Angers 1 Introduction Introduction Depuis plus de 40 ans, la puissance des ordinateurs ne cesse d’augmenter de pair avec leur consommation électrique. Cette consommation massive en énergie électrique est une problématique grandissante, qui devient aujourd’hui un critère à prendre en compte lorsque l’on dimensionne la taille d’un calculateur. En effet, le coût en énergie dépensée pour le fonctionnement et le refroidissement des équipements informatiques d’un centre de calcul devient plus élevé que son coût d’acquisition. De plus, la facture due aux coûts engendrés par le fonctionnement d’un centre de calcul n’est pas le seul problème, les limitations liées à la production et à l’acheminement de l’énergie sont elles aussi présentes. Trouver des moyens pour minimiser la consommation maximale d’énergie de ces systèmes sans dégrader leur performance est la clef pour que leur puissance de calcul puisse continuer à croître. En outre, les limitations physiques du silicium le composant principal des processeurs sembles être atteintes, ce qui impose une augmentation de la puissance globale des calculateurs par l’expansion du nombre de cœurs et de processeurs pour former des grappes de calcul (Cluster ). Les unités de calculs sont, au sein d’un ordinateur, les éléments qui consomment le plus d’énergie. On parle de 38% à 48%, ce qui en fait des acteurs importants dans les postes à prendre en considération pour réduire la consommation énergétique dans le domaine du calcul à haute performance (HPC [1]). L’ordonnanceur répartit toutes les tâches de calcul à exécuter au sein du calculateur sur l’ensemble des cœurs, cet élément a donc une vision d’ensemble sur ce qui se passe au sein de la grappe et c’est aussi de lui que dépend le rendement du calculateur. Par conséquent, agir sur le composant logiciel qui pilote l’ensemble des cœurs d’un centre de calcul est nécessairement un moyen de minimiser l’énergie consommée. Dans ce rapport nous présenterons un état de l’art sur l’ordonnancement de tâches pour minimiser la consommation maximale d’énergie d’un ordinateur. C’est dans ce contexte que s’inscrit ce travail en partenariat avec le CEA (Commissariat à l’Énergie Atomique). Le CEA-DAM (Direction des applications militaires du CEA [2]) possède un centre de calcul récemment inauguré nommé TERA-100 [3] à ce jour le plus puissant d’Europe et le 6éme [4] au rang mondial. Ce supercalculateur est composé de 4 370 serveurs intégrant pas moins de 17 480 processeurs (environ 140 000 cœurs), 300 Téraoctets (To) de mémoire et 20 Pétaoctets (Po) de capacité de stockage pour une puissance de 1,05 pétaflops 1 et une consommation électrique globale estimée à 7MW2 . Pour commencer, nous aborderons le fonctionnement global d’une grappe de calcul. Puis nous nous intéresserons aux différents algorithmes permettant de répartir les travaux à effectuer au sein du calculateur. Pour finir, nous évoquerons les méthodes utilisées pour évaluer la consommation d’un calculateur, le modèle énergétique d’un processeur et les différents moyens utilisables pour réduire la consommation en énergie d’une grappe de calculateurs. 1 Un million de milliards d’opérations par seconde sur des flottants (plus d’opérations en une seconde que la population mondiale ne pourrait faire en 48 heures, à raison d’une opération par seconde et par personne). 2 Capacité de production de deux éoliennes terrestres grand format. Florent Reynier 2 Les grappes de calculs 1 Les grappes de calculs Une grappe de calculateurs correspond à l’interconnexion par un réseau à hautes performances de calculateurs (nœud ). Vu de l’extérieur cet ensemble ne représente qu’une seule unité, où chaque nœud possède son propre système d’exploitation. Tout est organisé au sein de la grappe pour que les nœuds soient le plus possible indépendants les uns des autres de manière à ne pas empêcher le fonctionnement de la grappe de calcul lorsqu’un ou plusieurs de ses nœuds devient défaillant. Pour administrer le fonctionnement d’une grappe de calcul, il existe deux grands types de systèmes : – Les systèmes à exécution par lot (figure 1) dont le fonctionnement est régi par un nœud maître qui a en charge de répartir l’ensemble des tâches à exécuter sur les différents nœuds de la grappe et selon une politique d’ordonnancement définie. Fig. 1 – Schéma de principe d’un système à exécution par lots – Les systèmes à image unique fonctionnant de manière identique aux systèmes à exécution par lot. Mais, en plus, ils virtualisent l’ensemble des ressources matérielles et logicielles de la grappe sous un seul bloc. Chaque processus lancé étant virtuel on peut le manipuler comme s’il était local au nœud maître. Le CEA utilise au sein de son calculateur, le TERA-100, une architecture basée sur un système à exécution par lot, c’est pourquoi la suite de ce qui va être exposé ne fera aucunement référence aux systèmes à image unique. 1.1 Les tâches Le mot tâche possède différentes définitions en fonction du point de vue que l’on utilise. Si l’on se place à l’extérieur du calculateur, alors une tâche est tout simplement une instance du programme à exécuter, on parle plus justement de processus. Mais dans le contexte des grappes de calculateur et surtout des systèmes parallèles on part du principe qu’un programme a la capacité de s’exécuter sur un tel système lorsqu’il peut lancer simultanément plusieurs calculs, c’est pourquoi quand on parle de tâche on se place le plus souvent à l’intérieur de la grappe. Lorsqu’il y a parallélisation d’un programme, le nœud maître via son ordonnanceur Florent Reynier 3 1.2 Les ordonnanceurs attribue aux différents nœuds de la grappe une tâche (un calcul, un traitement...) à effectuer. Dans la suite du rapport, on admettra pour une tâche la définition suivante : Définition 1 (Tâches) Une tâche est une sous instance d’un programme exécuté qui réalise un traitement en parallèle d’autres tâches appartenant au même programme. Bien évidemment lorsqu’un programme se subdivise en plusieurs tâches, des dépendances entre tâches apparaissent, c’est à dire qu’une tâche peut être dépendante du résultat du traitement d’une ou plusieurs autres tâches. On parle alors d’interdépendance. 1.2 Les ordonnanceurs On distingue deux grands types d’ordonnanceurs : 1.2.1 Ordonnanceurs en temps partagé Leur travail consiste à gérer l’exécution d’un ensemble de tâches sur un nombre de processeurs très limité. Ce qui rend par conséquent impossible l’exécution d’une tâche sur toute la durée de son calcul, en partant du principe qu’un système d’exploitation en fonctionnement est constitué d’un ensemble de n tâches devant toutes être exécutées en même temps. Ordonnanceur en temps partagé permet de résoudre un problème de ressources limitées et d’exécution simultanée, en allouant à chaque tâche un temps intermédiaire d’exécution, lorsque ce temps intermédiaire est écoulé l’ordonnanceur sauvegarde le contexte d’exécution de la tâche (préemption) ou bien l’arrête si sont traitement est terminé, puis passe à la tâche suivante (en restaurant son contexte si elle est déjà en cours d’exécution) et ce indéfiniment jusqu’à l’arrêt du système. Bien évidemment, les principes énoncés sont simplistes, en réalité les politiques d’ordonnancement prennent en compte beaucoup plus de paramètres (ex : priorités). On peut citer en exemple l’algorithme de Round-Robin [5]. 1.2.2 Ordonnanceurs spatiaux Les ordonnanceurs spatiaux, très couramment utilisés dans les grappes de calculs, ont pour rôle de répartir les différentes tâches d’un programme à exécuter sur les différents nœuds de la grappe. Chaque nœud de la grappe se matérialise par un serveur possédant son propre système d’exploitation doté d’un ordonnanceur en temps partagé. Un ordonnanceur spatial est implanté sur un seul nœud appelé maître, il répartit et gère les tâches à exécuter au sein de chaque nœud et par conséquent se place un niveau au dessus des ordonnanceurs en temps partagé. L’ordonnanceur spatial est un composant logiciel qui connait l’architecture de la grappe, il sait en temps réel quel est l’état de chaque nœud, c’est à partir de ces données entre autres qu’il est capable de réaliser l’allocation des tâches à exécuter. Pour exécuter son ordonnancement, ce type de composant logiciel a impérativement besoin de connaître Florent Reynier 4 1.3 Les bibliothèques de communication le nombre de processeurs nécessaires au fonctionnement de chaque programme devant être lancé sur le système. Un grand nombre d’algorithmes d’ordonnacement necéssitent en plus un temps approximatif d’exécution afin d’optimiser le remplissage (minimiser le nombre de processeurs en attente de tâches à exécuter) de la matrice d’allocation des tâches. Un ordonnanceur de bonne qualité est un ordonnanceur qui rentabilise au maximum la grappe en minimisant le nombre de nœuds sans tâche à exécuter à tout instant, la bête noire d’un tel système est la fragmentation 3 . L’algorithme d’ordonnancement spatial adopte des politiques d’optimisation qui visent à rentabiliser les temps de calcul dans un souci de rapidité d’exécution. Indirectement, le rendement énergétique du calculateur (nombre de tâches exécuté par rapport à l’énergie globale consommée) s’en voit valorisé, mais ce n’est pas pour autant que la consommation d’énergie est diminuée. En effet la consommation électrique d’un composant se caractérise par le produit de sa consommation énergétique instantanée et d’un temps. Actuellement, les fonctionnalités implémentées par les algorithmes d’ordonnancement spatiaux visant à diminuer la consommation énergétique globale d’une grappe sont peu évoluées et surtout peu utilisées. Comme nous l’avons laissé entendre précédemment, une grappe de calcul intègre différents niveaux d’ordonnancement. Un premier niveau à la hauteur des nœuds (ordonnanceurs en temps partagé) et un second niveau au dessus des nœuds matérialisé par l’ordonnanceur spatial. Ce qui va nous intéresser par la suite est la couche supérieure de l’architecture qui, finalement, pilote la couche inférieure en répartissant des tâches d’exécution. Si l’on fait référence à l’architecture en place au sein du calculateur du CEA, l’ordonnanceur spatial est un composant logiciel, indépendant du système d’exploitation qui fait partie de la catégorie des "Batch scheduler", nommé SLURM (Simple Utility for Ressource Management). Lorsqu’un utilisateur souhaite lancer l’exécution d’un programme, c’est directement à SLURM qu’il doit s’adresser afin de paralléliser l’exécution du programme. 1.3 Les bibliothèques de communication Un programme séquentiel standard n’est pas optimisé pour s’exécuter sur une grappe de calculateur, car, sa conception fait qu’il ne peut utiliser qu’un seul processeur à la fois. C’est pourquoi, pour que l’exécution d’un programme fonctionnant sur une grappe de calculateur soit efficace, le programme en question doit avoir les moyens de répartir ses calculs sur plusieurs processeurs afin de paralléliser sont travail. Ce n’est qu’à cette condition que les temps de calcul sont divisés. Pour réaliser cette "parallélisation", les programmes doivent utiliser une librairie telle que PVM, ou encore MPI à ce jour la librairie la plus utilisée. 1.3.1 PVM Parallel Virtual Machine [6] a pour but de faciliter l’écriture d’applications parallèles sur un réseau de stations de travail hétérogènes. L’utilisateur définit un ensemble de machines qui sera vu comme une seule grande machine multiprocesseur à mémoire distribuée. Cette approche permet le regroupement d’hôtes ayant 3 On parle de fragmentation d’espace lorsque l’ordonnanceur n’est pas capable de combler les vides dans la grille d’allocation des tâches de calcul Florent Reynier 5 1.3 Les bibliothèques de communication des caractéristiques différentes (machine vectorielle, station graphique, station de travail, cluster, robot de stockage, etc ...). Les communications dans PVM sont basées sur les protocoles TCP et UDP car ils sont les plus répandus et favorisent la portabilité. L’envoi de messages est synchrone, ce qui signifie que le processeur émetteur reste bloqué tant que les données à envoyer ne sont pas toutes émises. La réception de messages quant à elle est soit bloquante (le processeur récepteur sera bloqué tant que les données reçues ne seront pas accessibles), soit non bloquantes. PVM est constitué de trois entités principales : – Le démon PVM. Il est exécuté sur chaque hôte de la machine virtuelle et permet d’acheminer et contrôler les messages ; – La bibliothèque des routines PVM permettant le passage de messages, la création et la coordination des tâches, etc. ; – La console, qui sert à gérer la vie de l’ensemble des tâches de la machine virtuelle. PVM est un modèle de programmation simple et portable. Cependant, il ne fournit pas de mécanisme de tolérance aux pannes, ce qui pourrait être nécessaire pour certains modèles de grille de calculs. 1.3.2 MPI Message Passing Interface [7] est la norme la plus utilisée en ce qui concerne le calcul parallèle et distribué. MPI est une spécification pour développer des programmes parallèles basée sur la notion de passage de message. Il existe des librairies répondant à cette norme, par exemple Open MPI [8] ou, MPC (MultiProcessor Computing)[9] la librairie développée et utilisée par le CEA. Une application MPI est un ensemble de processus autonomes exécutant chacun son propre code et communiquant via des appels à des fonctions et des procédures de la bibliothèque MPI. La communication peut se dérouler soit de manière point à point entre deux processeurs, soit de manière collective en réalisant plusieurs communications à partir d’une seule requête afin de transmettre des données à tous les processus du groupe. Ces communications peuvent être soit bloquantes soit non bloquantes. Enfin, contrairement à PVM, MPI est capable de détecter et traiter les erreurs [7] pouvant survenir au cours de son fonctionnement via un mécanisme nommé Error Handling. 1.3.3 Techniques de parallélisation Les programmes réalisés au travers des librairies énoncées précédemment, sont divisés en deux catégories selon la manière dont leur exécution est effectuée : SMPD (Simple Program, Multiple Data) : L’application est lancée n fois, chaque processus est complètement autonome dans la parallélisation de ses calculs et a en charge de se positionner par rapport aux n − 1 autres processus. MPMD (Multiple Program, Multiple Data) : Un ensemble de n applications différentes et interactives sont lancées simultanément. En général un fichier de configuration passé à l’ordonnanceur décrit le rôle de chaque processus les uns par rapport aux autres. Florent Reynier 6 Politiques d’ordonnancement Avant d’aborder les moyens potentiels destinés à réduire l’énergie électrique consommée par une grappe, il est nécessaire de comprendre les différentes politiques que peuvent employer les ordonnanceurs spatiaux pour répartir les tâches sur chaque nœud. 2 Politiques d’ordonnancement Bon nombre de personnes qui exécutent régulièrement des programmes sur des systèmes tel que celui du CEA se plaignent souvent de la manière dont l’ordonnancement est accompli. Le travail réalisé par un algorithme d’ordonnancement spatial est complexe, car il doit rentabiliser au maximum l’utilisation de la grappe tout en minimisant les temps de calcul. Beaucoup de questions peuvent apparaitre quant à la priorité que l’on peut donner aux programmes ayant un temps d’exécution court et nécessitant peu de processeurs par rapport à ceux gourmands en processeurs, en temps de calcul et plus difficiles à agencer dans la pile d’exécution. Doit-on favoriser les temps de calcul courts et différer l’exécution des programmes demandant un long temps d’exécution ? Ceci est à définir en fonction de l’environnement dans lequel s’intègre le calculateur. C’est pourquoi cette partie se consacrera à la description des différents algorithmes d’ordonnancement spatiaux existant [10][11]. 2.1 Algorithmes sans retard Un des moyens pour gérer l’équité entre les différents programmes à exécuter est de les lancer par ordre de soumission (premier arrivé premier servi), c’est ce que l’expression "sans retard" veut dire. 2.1.1 FCFS Il existe différentes politiques pour décider de l’allocation des processeurs aux tâches en attente. La politique la plus simple est celle appelée FCFS (First Come, First Served). Elle est fondée sur une politique sans retard avec une seule file d’attente. Lorsqu’une tâche arrive (figure 2), elle est automatiquement mise dans cette file et n’est servie que lorsque celles qui sont arrivées avant elle dans la file ont été démarées et que les ressoruces dont elle a besoin sont disponibles (figure 3). Cette méthode ne permet pas une utilisation efficace des ressources [12] (en moyenne, seulement 25% des ressources sont utilisées sur la machine IBM/SP2 avec le système à exécution par lots LoadLeveler). En effet, cette politique ne prend pas en compte la fragmentation de l’espace (seule une tâche peut être exécutée à la fois ce qui peut entraîner une sous-exploitation de certaines ressources). 2.1.2 Déclinaison Il existe une déclinaison de FCFS en politique gloutonne (figure 4). Elle consiste à vider la file d’attente des tâches en attribuant à chaque fois le nombre minimal de ressources requises et de recommencer immédiatement avec la prochaine tâche en file d’attente (si la prochaine tâche en file d’attente exige plus de ressources qu’il y en a de disponible, alors l’algorithme se bloque en attendant une libération des ressources). Cependant, cette politique n’est pas très efficace non plus. En effet, Florent Reynier 7 2.1 Algorithmes sans retard Fig. 2 – Représentation des dates d’arrivée et des dates d’échéances de tâches non ordonnancées. Nombre de processeurs Tâche D Tâche C Nombre maximum de processeurs Tâche B Tâche A t si plusieurs grosses tâches se suivent dans la file d’attente, elles ne peuvent pas s’exécuter en même temps parce qu’elles demandent trop de ressources. 2.1.3 FCFS-FF Une autre politique pour remédier à ce problème est le FCFS-FF (First Come, First Served, First Fit). Cette politique permet de mettre les tâches dans différentes files (dépendant par exemple du temps d’exécution de la tâche). Et ensuite, par exemple, selon les horaires (travaux de nuit : travaux ayant un long temps d’exécution, travaux de jour : travaux ayant un court temps d’exécution), l’ordonnanceur vide les différentes files (selon une politique FCFS). La première tâche trouvée dans les files qui correspond à la politique en cours est exécutée. Bien qu’elle soit plus performante, cette technique n’est pas non plus la plus efficace [12] (40% à 60% des ressources sont utilisées). Florent Reynier 8 2.2 Algorithmes avec contraintes de priorités Fig. 3 – Illustration de l’algorithme FCFS (les tâches arrivent selon le schéma de la figure 2). Nombre de processeurs Nombre maximum de processeurs Tâche B Tâche A Tâche C Tâche D t 2.1.4 Backfilling La technique du backfilling permet d’exécuter des tâches de courte durée qui sont à la fin de la file d’attente avant des tâches de longue durée qui sont placées devant dans la file. Pour réaliser cela, il faut soit que l’utilisateur spécifie une durée approximative de temps d’exécution de sa tâche, soit que l’ordonnanceur soit capable de trouver ces informations à partir des analyses de compilation. En pratique (figure 5), dans la plupart des cas, il est demandé à l’utilisateur de fournir une durée approximative du temps d’exécution de sa tâche. Exemple : Soit une tâche A de longue durée en cours d’exécution sur différents nœuds. Supposons qu’il reste des nœuds non utilisés par A. Le backfilling permet d’exécuter des tâches (C,D...) sur les nœuds restants disponibles à condition que ceux-ci ne se terminent pas après la tâche A (cela dans le but de ne pas décaler le démarrage de la tâche B qui est encore en file d’attente, mais qui n’a pu être démarrée, faute de ressources disponibles en quantité suffisante). Cette technique permet une utilisation des ressources d’environ 80%. 2.2 Algorithmes avec contraintes de priorités Une priorité est attribuée à chaque tâche. Cette priorité dépend de l’importance de la tâche ou bien de son temps d’exécution. L’avantage de cette méthode est qu’elle permet de traiter des travaux de courte durée rapidement. Ainsi cette méthode est efficace (maximisation de l’utilisation des ressources), et est d’une certaine manière interactive (les tâches plus courtes peuvent être exécutées avant les plus longues). L’inconvénient est qu’il peut y avoir un risque de famine4 . 4 Les processus de longue durée peuvent n’avoir jamais accès aux processeurs si des processus de courte durée arrivent en permanence Florent Reynier 9 2.3 Algorithmes basés sur l’heure de fin Fig. 4 – Illustration de l’algorithme FCFS selon la politique gloutonne (les tâches arrivent selon le schéma de la figure 2). Nombre de processeurs Nombre maximum de processeurs Tâche B Tâche D Tâche A Tâche C t 2.2.1 IBM SP Scheduler L’IBM SP Scheduler allie la méthode de priorité et celle de retard limite. À chaque tâche sont associé une priorité et un retard limite. Chaque fois qu’une nouvelle tâche est insérée dans la file, toutes les priorités et retards limites sont recalculés. Par exemple, si une tâche A est soumise avec un temps d’exécution estimé à 15 minutes et que dans la file d’attente, il y a une tache B (de même priorité que A) dont le délai maximum de lancement est fixé à 60 minutes, alors l’ordonnanceur va pouvoir lancer la tâche A, en sachant que lorsqu’elle se finira, la tâche B, n’aura pas dépassé son heure limite de lancement. Les techniques employées dans l’ordonnanceur IBM SP Scheduler apportent un gain d’environ 10% par rapport au backfilling. 2.3 Algorithmes basés sur l’heure de fin Cette méthode impose à une tâche une heure de fin d’exécution. Elle est très utilisée dans les systèmes qui sont à temps réel. Le problème majeur de cette méthode est que dans certains cas il n’est pas possible de trouver une adéquation entre les travaux à exécuter et les différentes heures de fin à respecter. Ces algorithmes sont très contraignants, car ils doivent gérer les applications interactives tout en étant efficaces et en assurant qu’il ne puisse y avoir un risque de famine. 2.3.1 EDF - Earliest Deadline First EDF est un algorithme d’ordonnancement préemptif utilisé dans les systèmes temps réel. Il attribue une priorité à chaque tâche en fonction de la date d’échéance de cette dernière. Au plus vite une tâche doit être réalisée, au plus tôt elle aura de chances d’être exécutée. Un défaut de cet algorithme est qu’il ne sait pas gérer Florent Reynier 10 2.4 Déclinaison optimisant la consommation énergétique Fig. 5 – Illustration de l’algorithme backfilling en comparaison au FCFS de la figure 3 (les tâches arrivent selon le schéma de la figure 2). Nombre de processeurs Nombre maximum de processeurs Tâche D Tâche C Tâche B Tâche A Exécution de A Exécution de B t les tâches lorsque le système est surchargé. Dans ces conditions l’utilisation d’un tel algorithme peut poser problème. 2.3.2 RED - Robust Earliest Deadline RED est un ordonnanceur plus "robuste" qu’EDF car il donne des garanties que EDF n’a pas dans le cas où le système devient surchargé. RED est fondé sur un service minimum garanti. Deux types de tâches sont définis, les tâches critiques et les autres. Les tâches critiques sont assurées de se terminer dans tous les cas dans le temps imparti. Les tâches non critiques peuvent subir un léger retard en cas de surcharge du système. 2.4 Déclinaison optimisant la consommation énergétique Le principe présenté peut être vu comme une surcouche des algorithmes présentés auparavant, ayant pour but de réduire la consommation en énergie d’une grappe de calculateurs. 2.4.1 LC - Concentration L’ordonnanceur de concentration de charge (LC) tente de charger certains nœuds de la grappe au maximum afin de pouvoir mettre en mode veille à des Florent Reynier 11 Méthodes pour réduire la consommation énergétique fins d’économie d’énergie les nœuds non utilisés. Dans le cas où la charge augmente, les nœuds éteints se réactivent afin de ne pas créer de dégradation des performances. On distingue essentiellement deux type d’arrêts : – Arrêt seul du processeur, le reste du système (mémoires et disques durs) reste sous tension ; – Arrêt complet du système avec la possibilité de sauvegarder l’ensemble du contexte d’exécution pour un redémarrage plus rapide. Cette méthode permet de gagner en énergie consommée par les nœuds, cependant il est nécéssaire de prendre en compte le temps de redémarrage et d’arrêt ainsi que les pics d’intensité liés au redémarrage de chaque nœud. 3 Méthodes pour réduire la consommation énergétique Après avoir présenté succinctement le fonctionnement d’une grappe de calcul, nous allons adopter un point de vue axé sur la consommation énergétique de ces systèmes. Les processeurs étant les dispositifs consommant le plus d’énergie au sein d’un ordinateur, aborder leur modèle de consommation énergétique est impératif avant d’évoquer les différents moyens pour réduire la quantité d’énergie qu’ils absorbent. Par conséquent, il est nécessaire de comprendre comment l’énergie consommée par une grappe de calculateurs peut être évaluée. 3.1 Mesure de l’énergie consommée A l’image du TOP500 [4], il existe un classement nommé Green500 [13] qui vise à classifier les 500 calculateurs les plus efficaces en matière de consommation énergétique. Avant d’exposer la méthode d’évaluation proposée par le Green500 définissons clairement ce que sont l’énergie instantanée et l’énergie consommée : Définition 2 (Puissance instantanée) Quantité d’énergie électrique consommée par unité de temps, exprimée en Watts (W ). Ce qui correspond à un Joule fourni par Seconde. Dans le cas où la tension U et l’intensité I sont continues, la puissance instantanée Pi s’écrit : Pi = U × I Définition 3 (Énergie consommée) Quantité d’énergie électrique consommée pendant une période de temps donnée, exprimée en Joules (J). Dans le cas où la puissance instantanée et le temps de fonctionnement s’écrivent respectivement Pi et t alors l’énergie consommée Ec s’écrit : Ec = Pi × t Le classement du Green500 est effectué grâce à un rendement, le P P W (Performance Per Watt) dont l’unité est le GFlops/Watt 5 , qui n’est ni plus ni moins 5 106 d’opérations sur des flottants par seconde et par Watt Florent Reynier 12 3.2 Modèle de consommation énergétique du processeur que le rapport du résultat d’un test de performance sur l’énergie moyenne consommée pour effectuer ce test. L’établissement du P P W doit répondre à un protocole défini par le Green500 [14], la puissance de calcul Rmax doit être évaluée grâce à un Benchmark nommé Linpack [15] utilisé pour établir le classement du TOP500. La puissance consommée pendant l’exécution du Benchmark Ē(Rmax ) quant à elle ne doit prendre en compte que les composants mis en jeu par l’exécution de Linpack, c’est pourquoi la puissance moyenne consommée par la grappe de calcul est évaluée sur un échantillon de serveurs Ēunit (Rmax ) (la plus petite unité de composants pour laquelle on peut mesurer l’énergie) puis ramenée à l’échelle du calculateur : PPW = Rmax Ē(Rmax ) Ē(Rmax ) = Ēunit (Rmax ) × n avec n, le nombre d’unités au sein du serveur L’énergie moyenne consommée Ēunit d’un équipement ne s’obtient pas directement, car les appareils de mesure de puissance donnent des valeurs dont l’unité est en Watt ce qui correspond à une consommation instantanée. Pour obtenir la consommation électrique en Joules, il est donc nécessaire d’intégrer sur le temps la consommation P̄ (Rmax ) instantanée. 3.2 3.2.1 Modèle de consommation énergétique du processeur Énergie consommée et temps de calcul Un processeur est un circuit intégré de la famille des CMOS, un tel circuit répond aux équations génériques suivantes [16] Puissance instantanée consommée en (Watts) : Ptotal = Pstat + Pdyn Pstat Puissance consommée par une porte CMOS au repos Pdyn Puissance consommée lors de la commutation (1) Énergie globale consommée en (Joules) : Etotal = (Pstat + Pdyn ) × t = Estat + Edyn avec t le temps de fonctionnement (2) Relation fréquence - tension d’alimentation : V Tension d’alimentation λ Constante liée au type du processeur V = λf f fréquence de cadencement du processeur (3) Il est important de noter que la tension d’alimentation est liée à la fréquence de cadencement du processeur (3) par un facteur λ positif. Ce qui veut dire que plus la tension d’alimentation V croît, plus la fréquence de fonctionnement du processeur f peut être augmentée, et inversement lorsque la tension décroît. Dans le cas où la relation entre la tension d’alimentation et la fréquence n’est pas respectée, le processeur ne fonctionne plus correctement. En outre la période τ étant inversement proportionnelle à la fréquence, le temps de traitement d’une tâche (n×τ , avec n le nombre de coups d’horloge pour réaliser la tâche) sera d’autant plus faible que la tension sera élevée. Florent Reynier 13 3.2 Modèle de consommation énergétique du processeur Relation énergie - fréquence - tension d’alimentation : Pdyn n f C f= =C ×f ×V2 V 1 τ Constante liée au type de processeur Fréquence de cadencement du processeur Tension d’alimentation (4) Une tâche nécessite n coups d’horloge, ce qui donnera un temps d’exécution de secondes. On obtient donc ainsi l’énergie : Edyn = n × C × λ2 × f 3 f Edyn = n × C2 × f 2 = n × C2 × 1 avec C2 = λ2 × C τ2 Edyn = n × C × V 2 (5) (6) Il ressort que l’énergie pour réaliser une tâche évolue avec le carré de la fréquence (??). Fig. 6 – Relation entre l’énergie et le temps de calcul d’une tâche. Etotal A Edyn B Edyn = n × C2 × 1 τ2 Estat τ : période de l’horloge τmin = 1 fmax τmax = 1 fmin Le schéma 6 illustre le principe énoncé. Nous nous intéressons à une fonction g liant Edyn à τ la période d’horloge sur l’intervalle I [τmin , τmax ] qui représente la plage de variation de la fréquence g du processeur. L’arc [A,B] permet de mettre en valeur la convexité de g sur I. De plus la fonction g est strictement monotone décroissante sur l’intervalle I, ce qui confirme le principe énoncé sur la relation entre Edyn et τ (??), que nous pouvons élagir à ET otal puisque EStat est constante. En conclusion, allonger la durée d’exécution d’une tâche diminue considérablement l’énergie consommée par l’exécution de son traitement. Florent Reynier 14 3.2 Modèle de consommation énergétique du processeur 3.2.2 Équirépartition des temps de calcul De manière générale, un processeur n’exécute pas qu’une tâche mais un ensemble de tâches. Dans ce contexte, l’intervalle de temps total d’exécution doit être équiréparti sur chacune des tâches pour tirer parti de la convexité de la fonction g. L’exemple suivant est une application numérique basée sur deux tâches T 1 et T 2 nécessitant un coup d’horloge et un processeur dont la fréquence est dans 1 l’intervalle [1, 10 ] Hz. La tâche 1 doit s’exécuter avant la tâche 2, la tâche 2 doit être terminée au plus tard à l’instant 10 (Tmax ). Plusieurs modes de fonctionnement permettent de respecter cet ordonnancement comme le montrent les figures ci-dessous : Pour rappel : Edyn = C2 × f 2 = C2 × 1 (n supposés égal à 1) τ2 Fig. 7 – Exécution des deux tâches au plus vite. Edyn Tmax Edyn = C2 × (1 + 1) = C2 × 2J 1 1 2 10 t Fig. 8 – Exécution de la première tâche en 1s et de la deuxième en 9s. Edyn Edyn = C2 × 1 + 1 81 = C2 × 1.0123J 1 1 Tmax 0.0123 2 10 t En bilan, nous pouvons tout d’abord dire qu’allonger le temps d’exécution des tâches à la date d’échéance permet de gagner une quantité d’énergie considérable(figure 7 par rapport aux figures 8 et 9). Pour aller plus loin, lorsque l’on se réfère aux la figure 8 et 9, l’exécution de deux tâches à des vitesses identiques jusqu’à la date d’échéance (figure 9) permet d’économiser plus d’énergie, que si elles avaient été exécutées à des vitesses différentes sur la même période de temps (figure (8)). Florent Reynier 15 3.3 Dynamic Voltage Scaling Fig. 9 – Exécution des deux tâches en 5s chacune. Edyn Edyn = C2 × 1 25 + 1 25 = C2 × 0.08J Tmax 0.08 1 2 10 3.3 t Dynamic Voltage Scaling Dans le domaine des systèmes embarqués, les principes énoncés sur l’énergie consommée, le temps de calcul et l’équirépartition ont fait l’objet de recherches et sont aujourd’hui connus sous le nom de DVS (Dynamic Voltage Scaling). Un DVS est une méthode qui vise à diminuer la part d’énergie consommée par le processeur en faisant varier sa tension de commande, et par conséquent sa fréquence de fonctionnement. Les algorithmes qui utilisent cette technique de variation de tension, ont besoin des données qui suivent pour déterminer l’intervalle de temps d’exécution de chaque tâche : – Une date de lancement au plus tôt donnant l’instant où l’exécution de la tâche peut commencer ; – Une date d’échéance indiquant à quel moment l’exécution de la tâche doit être terminée. Un système dont on connait l’intervalle de temps sur lequel chaque tâche doit s’exécuter appartient à la catégorie des systèmes temps réel. La règle, pour de tels systèmes est de terminer l’exécution des tâches au plus tard à la date d’échéance. Tous les algorithmes partent du principe que la date d’échéance d’exécution d’une tâche est la date à laquelle l’utilisateur a besoin du résultat du calcul implémenté par la tâche. C’est pourquoi la nécessité d’exécuter la tâche le plus rapidement possible (à une fréquence élevée) n’est pas pertinente. Il est plus logique d’adopter une politique de juste à temps et de livrer le résultat du calcul à la date d’échéance en jouant sur la tension d’alimentation du processeur (les principes 3.2.1 et 3.2.2 sont donc repris). On peut citer un algorithme proposé par G.Cassandras qui a pour but d’optimiser la commande dynamique de la tension d’alimentation d’un processeur avec des contraintes de temps réel [17]. Il existe d’autres types d’algorithmes implémentant les DVS, moins optimaux car basés sur l’utilisation antérieure du processeur et non sur l’utilisation future [16]. On parle d’algorithmes de prédiction. 3.4 Application au système du CEA La grappe de calcul du CEA utilise un algorithme Backfilling qui a besoin des dates de lancements et d’échéances de chaque tâche pour réaliser son ordonnancement. C’est le point commun avec les algorithmes DVS qui permet d’avancer Florent Reynier 16 3.4 Application au système du CEA qu’implémenter une surcouche de l’algorithme Backward basée sur le DVS peut diminuer la consommation énergétique instantanée du calculateur. Cependant il est nécessaire de comprendre la manière dont fonctionne le système. Comme nous l’avons exposé dans la partie 1, l’ordonnanceur est un logiciel nommé SLURM qui régit l’exécution de programmes implémentés en utilisant des librairies répondant à la norme MPI. Nous n’avons pas eu le temps d’étudier en détail le fonctionnement de ces deux composants, une part d’inconnue est donc présente quant aux données disponibles pour réaliser un algorithme basé sur le DVS. Toutefois nous avons commencé à rechercher des moyens pour répondre à ces questions. Il est impératif de réaliser en premier lieu un environnement capable de reproduire l’architecture en place au sein du Tera-100. Plusieurs solutions ont été évaluées pour faire fonctionner SLURM ou bien des algorithmes d’ordonnancement : UML (User Mode Linux ) : Un émulateur de système d’exploitation Unix ultra léger [18][19], ce qui en fait par conséquent un moyen très intéressant pour simuler des grappes de calcul via son mode cluster sans consommer trop d’énergie et sur un seul ordinateur. SimGrid : Un simulateur de grappe de calculateur [20] capable d’exécuter des algorithmes d’ordonnancement personnalisés. SLURM : De la même manière qu’UML, SLURM (Simple Linux for Ressource Management)[21] possède un mode permettant de simuler tout un ensemble de nœuds à partir d’un seul ordinateur. Simuler des algorithmes d’ordonnancement dans un environnement le plus fidèle possible à celui du Tera-100 sera la première chose à mettre en place. Néanmoins, les solutions présentées n’intègrent pas réellement le modèle de consommation électrique des processeurs permettant d’évaluer la performance énergétique d’un algorithme d’ordonnancement. La deuxième étape sera donc de créer un outil permettant d’évaluer la consommation énergétique de la grappe de calcul simulée. Florent Reynier 17 Conclusion Conclusion La première partie de ce Master Recherche a été dédiée à l’introduction des différents termes et techniques liés aux grappes de calculateurs. Notamment, les tâches, les ordonnanceurs et l’ensemble des politiques d’ordonnancement appliquées à ce jour au sein des grappes de calculateurs en particulier au CEA. Les principes de fonctionnement globaux d’une ferme de calculateurs introduits, les différents moyens pour évaluer et réduire la consommation énergétique d’un calculateur ont été étudiés. Le Dynamic Voltage Scaling est une des méthodes qui, implantée en tant que surcouche d’un algorithme d’ordonnancement spatial offre des réductions de consommation d’énergie conséquentes, à condition que le système fonctionne dans un contexte temps réel (connaissance des dates d’arrivées et d’échéance de chaque tâche). Pendant la période de stage, la première chose à faire sera de créer une maquette de simulation reproduisant fidèlement le fonctionnement de la grappe de calcul du CEA. Par la suite il sera nécessaire d’ajouter à la maquette mise en place un modèle de consommation énergétique. Ce n’est qu’à ces deux conditions que les performances énergétiques des algorithmes d’ordonnancement pourront être évaluées afin de répondre à la problématique de minimisation de la consommation énergétique maximale d’un ordinateur. Florent Reynier 18 RÉFÉRENCES Références [1] Calcul à haute performance (HPC ) au sein du CEA. http://www-hpc.cea.fr/. [2] Site internet du CEA-DAM (direction des applications militaires). http://www-dam.cea.fr/dynamique/accueil/accueil.asp. [3] Calculateur Tera-100 du CEA. http://www-hpc.cea.fr/fr/complexe/tera10.htm. [4] Classement des 500 calculateur les plus puissants au monde. http://www.top500.org/. [5] Détails sur l’odonnancement par algorithme de round-robin. http://choices.cs.uiuc.edu/~f-kon/RoundRobin/node1.html. [6] Parallel virtual machine : librairie libre pour la réalisation de programmes parallèles. http://www.csm.ornl.gov/pvm/. [7] Description de la norme mpi 2.2. http://www.mpi-forum.org/docs/mpi-2.2/mpi22-report.pdf. [8] Open mpi : librairie libre pour la réalisation de programmes parallèles. http://www.open-mpi.org/. [9] Librairie mpi utilisée par le cea. http://mpc.sourceforge.net/. [10] Jérôme GAILLARD. Ordonnancement de tâches dans des grappes de calculateurs, 2007. http://www.irisa.fr/myriads/bibadmin/uploads/pdf/ Gal07Master.pdf. [11] Jérôme GAILLARD. Rapport bibliographique 0rdonnancement de tâches dans des grappes de calculateurs, 2007. ftp://ftp.irisa.fr/local/caps/ DEPOTS/BIBLIO2007/biblio_gallard_jerome.pdf. [12] James Patton Jones and Bill Nitzberg. Scheduling for parallel supercomputing : A historical perspective of achievable utilization. In Dror G. Feitelson and Larry Rudolph, editors, Job Scheduling Strategies for Parallel Processing, pages 1–16. Springer-Verlag, 1999. Lect. Notes Comput. Sci. vol. 1659", http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.23. 3413&rep=rep1&type=pdf. [13] Les 500 calculateur en terme de rendement puissance de calcul / puissance consommée. http://www.green500.org. [14] Méthode de calcul pour réaliser le classement du green500. http://www.green500.org/docs/pubs/tutorial.pdf. [15] Details sur le benchmark Linpack. http://www.top500.org/project/linpack. [16] Daniel LEPRINCE Eugen FELLER, Christine MORIN. State of the art of power saving in clusters and results from the edf case study, 2010. http: //hal.archives-ouvertes.fr/docs/00/54/38/10/PDF/RR-7473.pdf. Florent Reynier 19 RÉFÉRENCES [17] Qianchuan ZHAO Jianfeng MAO, Christos G. CASSANDRAS. Optimal dynamic voltage scaling in energy-limited nonpreemptive systems with real-time constraints. IEEE TRANSACTIONS ON MOBILE COMPUTING, 2007. http://vita.bu.edu/cgc/Published/TMCprint_06_07.pdf. [18] Site officiel de user mode linux UML. http://user-mode-linux.sourceforge.net/. [19] Jeff DIKE. User Mode Linux. Prentice Hall, 2006. [20] Site officiel de simgrid. http://simgrid.gforge.inria.fr/. [21] Site officiel de simple linux utility for ressource management SLURM for ressource management. https://computing.llnl.gov/linux/slurm/. Florent Reynier 20