RenPar 18 / SympA 2008 / CFSE 6 Fribourg, Suisse, du 11 au 13 février 2008 Rééquilibrage de charge en-ligne bi-critère Matthieu Pérotin, Patrick Martineau & Carl Esswein Université François Rabelais, Labortoire d Informatique de Tours, 64 av J. Portalis, 37200 Tours - France matthieu.perotin@univ-tours.fr Résumé La recherche en informatique et ses applications demandent une puissance de calcul croissante. Dans cet article, une formalisation du besoin est proposée afin de répondre à cette demande en supprimant les procédures de soumission de jobs contraignantes et peu conviviales. De plus, on souhaite utiliser les ordinateurs déjà en place dans les universités au sein de salles de travaux pratiques de manière la plus simple possible pour les utilisateurs. Un modèle mathématique du problème est proposé afin d apporter une solution au problème d équilibrage de charge. La complexité du problème et une condition nécessaire pour qu un algorithme résolvant le problème soit un approximateur sont établies. Un simulateur est proposé et implémenté. Une nouvelle heurisitique est présentée et comparée avec des heurisitiques classiques de la littérature. Mots-clés : équilibrage de charge, ordonnancement en ligne, Grid, calcul haute performance 1. Introduction 1.1. Objectif L objectif est de produire une solution pour le calcul haute performance utilisant les centaines d ordinateurs qui équipent déjà les universités, par exemple au sein de salles de travaux pratiques. Ces ordinateurs sont souvent récents, interconnectés par un réseau rapide et peu utilisés : ils ne sont que marginalement utilisés durant la nuit, pendant les enseignements leur charge est souvent très basse. Cet article propose une solution permettant d utiliser cette puissance résiduelle en satisfaisant deux objectifs. Le premier est que les utilisateurs légitimes des ordinateurs, principalement les étudiants, ne doivent pas être pénalisés. Il ne serait pas acceptable qu un utilisateur voie son confort se dégrader. En effet la machine sur laquelle il travaille ne doit pas crouler subitement sous les tâches des autres utilisateurs. Le second objectif à atteindre est de produire un système utilisable facilement. On peut préciser cet objectif en trois points : 1. La procédure de soumission de tâches parallèles doit être aisée ; 2. On ne peut pas demander à l utilisateur d estimer la durée de ses travaux ; 3. On ne veut pas imposer un langage de programmation ou une librairie particulière : l utilisateur doit pouvoir utiliser le langage qu il préfère. 1.2. État de l art On s intéresse essentiellement au modèle de parallélisme de type distribution de processus (par opposition au parallélisme de type distribution de données tel Boinc ([7], [8])). Ce modèle contient des systèmes où des processus sont migrés d un ordinateur à un autre. L hypothèse sur laquelle cette méthode repose est la compatibilité binaire des programmes. Cela n est pas toujours possible, un exécutable ne fonctionnant correctement que pour un couple (matériel, système d exploitation) donné. Certains systèmes tels Condor [1] résolvent ce problème en imposant la mise à disposition d un exécutable spécifique pour chaque couple. ProActive [3] fonctionne au-dessus d une machine
virtuelle Java et résout ainsi le problème de façon plus élégante, mais il impose l utilisation d un langage donné. On s intéresse plus précisément aux Single System Image (SSI) qui migrent des processus en cours d exécution de façon transparente pour l utilisateur. OpenMosix [16] ou Kerrighed [2] implémentent de tels systèmes. L utilisateur a l illusion d être face à une machine unique multi-processeurs : ainsi il n a ni besoin d utiliser des bibliothèques spécifiques, ni besoin de changer ses habitudes de programmation. La granularité de tels procédés est généralement le processus, parfois le thread. On se propose de déployer une telle solution en résolvant le problème de l unicité du couple (matériel, système d exploitation) par l utilisation de la virtualisation. La virtualisation permet de lancer un système d exploitation dans un autre. Il est ainsi possible de faire tourner un environnement dédié au calcul parallèle sur presque n importe quel système avec un coût d administration réduit [5]. Avec une architecture virtualisée, un ordinateur fait tourner au-dessus d un système d exploitation un processus dans lequel un autre système d exploitation est exécuté. Des processus séquentiels classiques peuvent être exécutés dans le système d exploitation de base, tandis que l on peut déployer tous les outils nécessaires à l exécution de processus parallèles dans les machines virtuelles. Ces machines pouvant être mises en réseau, on peut y déployer un SSI malgré une contrainte d hétérogénéité de systèmes d exploitation et de matériels. Le coût d exécution dans une machine virtuelle ne cesse de baisser, et peut être très réduit si les processus font peu d appels systèmes. De nombreux modèles d équilibrage de charge ont été présentés dans la littérature ([9], [13], [18], [20]). Ils sont souvent très simples et supposent un usage exclusif des ordinateurs. [10] et [18] négligent les contraintes liées à l occupation mémoire et au modèle de réseau. De même tous les processus ne bénéficient pas d une migration. 1.3. Contribution Cet article présente le problème d équilibrage de charge. Des contraintes liées à l occupation mémoire, au modèle de réseau et à la métrique de charge on été prises en compte. De plus, des hypothèses fortes ont été faites : on ne peut pas estimer les temps d exécution. Un processus est susceptible d être créé sur n importe quel ordinateur, de façon imprévisible a priori. De même on ne peut pas prévoir la date d arrivée des processus. Les processus sont créés à l initiative des utilisateurs. Cela signifie que dans ce modèle, les processus n apparaissent pas dans une file globale que l on vide lorsque les processeurs sont inactifs. De plus, on considère, comme c est le cas sur un ordinateur classique, que l exécution des processus se fait de façon préemptive : les processus ne sont pas exécutés séquentiellement sur un processeur. Un simulateur est ici proposé. Il est flexible et permêt l exécution de nombreux cas de figure. Il est utilisé afin de comparer deux heurisitiques issues de la littérature. SIMPLE+ est une légère amélioration de l algorithme classiquement utilisé par OPENMOSIX. RUDOLPH est l algorithme proposé par [18] et RBT est une contribution de cet article. L organisation de l article reflète ces deux aspects. Dans une première section un modèle d étude sera donné et la complexité du problème établie. En outre, il sera montré que SIMPLE+ implémentée dans les solutions techniques existantes a une performance qui ne peut être garantie. Une seconde section présentera le simulateur implémenté avec SimGrid. La génération d instances sera abordée et des résultats expérimentaux permettront de comparer les heuristiques les unes aux autres. 2. Modélisation 2.1. Modèle Mathématique Un modèle d étude est ici proposé afin de répondre à la question d ordonnancement suivante : comment choisir quel processus migrer vers quelle machine? Soit M l ensemble des ordinateurs de l université. Soit m = M le nombre total d ordinateurs, et m j l ordinateur j, pour j = 1..m Chaque ordinateur m j est caractérisé par sa quantité de mémoire vive totale (mem(m j )), la vitesse de son processeur (speed(m j )) et son état (state(m j )) qui peut être libre ou occupé dépendamment de la 2
présence d un utilisateur physique travaillant sur la machine à un instant donné. { 0 si mj est libre state(m j ) = 1 sinon Le réseau est modélisé par une matrice carrée N de taille m, où N i,j est le débit réseau disponible entre les ordinateurs m i et m j. Cette valeur peut varier au cours du temps en fonction de la charge sur le réseau. Cette modélisation est une simplification de l architecture réelle : on ne considère que la connexion des ordinateurs les uns avec les autres, sans se préoccuper de l enchaînement de switchs et de routeurs. Soit P = {p i } i=1..p l ensemble des processus à l état activable sur M. i = 1..p, j = 1..m, soit { 1 if pi s P ij = execute sur m j 0 sinon Soit mu(p i ) la mémoire utilisée par p i La première fonction objectif est l équilibrage de charge : plus la charge sera équilibrée, plus vite les processus se finiront. La charge instantanée d un ordinateur m j, InstantLoad j est définie par : InstantLoad j = Cette définition classique est généralement bonne pour un ordinateur unique ou pour comparer la charge entre des ordinateurs homogènes. Cependant, elle est inappropriée pour comparer la charge d ordinateurs de puissance variable. Ainsi une autre métrique qui dépend de la vitesse des ordinateurs et de leur état est proposée. Soit load j = (1 + K state(m j )) InstantLoad j speed(m j ) la charge de l ordinateur m j, où K est une constante entière positive qui permet de spécifier la charge maximale acceptable sur un ordinateur sur lequel un utilisateur est connecté. Une seconde fonction objectif est le temps de communication réseau qui est à minimiser. Les migrations de processus peuvent être longues, et empêcher le gain de performance ([15] et [14]). Ainsi les migrations doivent être évitées, elles sont pourtant nécessaires pour équilibrer la charge. 2.2. Résolution du problème en-ligne Le problème auquel on s intéresse est en-ligne [11], car plusieurs paramètres sont acquis en ligne, en particulier l état des machines, l arrivée et la disparition des processus. On se propose donc de laisser la situation se déséquilibrer et de la rééquilibrer à intervalles réguliers. À un instant donné on considère l état global du système et on fait l hypothèse qu il n évoluera plus. Des décisions d ordonnancement sont alors prises en conséquence, en résolvant un problème d ordonnancement hors ligne. À l instant de décision suivant, soit l hypothèse s est avérée exacte, auquel cas il n y a rien à faire, soit elle s est avérée fausse et on réitère le processus. Ainsi on se retrouve face à la résolution d une suite de problèmes hors ligne plutôt qu à la résolution d un problème en ligne. À l instant de décision, on modélise les migrations grace à une variable binaire : i = 1..p, j = 1..m, { 1 if pi est migré vers m X ij = j 0 sinon On considère que si p i est initialement sur m j et n est pas migré, alors X ij = 1. Ce modèle est très proche du problème de rééquilibrage de charge défini par [6] : Définition 1 Le problème de rééquilibrage de charge [6] : Étant donnée une répartition de n tâches sur m processeurs, ainsi qu un entier positif k, déplacer au plus k tâches pour minimiser la charge maximale sur un processeur. Plus généralement, soit c i le coût de migration de la tâche i, on souhaite déplacer les tâches en ne dépensant pas plus qu un budget B donné. p i=1 P ij 3
Le modèle d Aggarwal ne considère que des processeurs uniformes, et la charge est définie comme étant la somme de la taille des procesus. Dans le modèle proposé dans cet article, les processus ont une taille constante au regard de la fonction de charge, conformément à la mesure de charge classique d UNIX. On se retrouve donc face un problème hors ligne dont les deux fonctions objectifs sont : Équilibrer la charge : min max j=1..m load j Minimiser le coût des migrations : min m m k=1 l=1 i=1 p N k,l P ik X il mu(p i ) Face à ce problème bi-critère, l approche ɛ-contrainte [19] est appropriée, et vient naturellement comme la quantité de processus que l on peut migrer entre deux instants de décision. Ainsi la seconde fonction objectif devient une nouvelle contrainte : m m k=1 l=1 i=1 p N k,l P ik X il mu(p i ) Const Seul l objectif d équilibrage de charge demeure. Le modèle proposé est NP-Difficile au sens fort. Une réduction de la variante décisionnelle à 3-Part est donnée dans [17]. 2.3. Algorithmes et taux de compétitivité Un algorithme trivial dont l idée n est pas très éloignée de celle de Rudolph et al ([18]) est appelé SIMPLE. Il est par exemple utilisé par OpenMosix. Cet algorithme est complètement distribué et un agent tourne sur chaque ordinateur. Cet agent prend des décisions de migration pour les processus s y trouvant. Il peut être écrit ainsi : Tant qu il existe un ordinateur moins chargé, lui envoyer un processus (quelle que soit la façon de choisir un processus). Il a été montré dans [17] que cet algorithme n est pas un approximateur du problème. On peut généraliser ce résultat pour montrer que tout algorithme n autorisant pas de dégradation de la valeur de la fonction objectif n est pas approximateur, et que cette condition est donc une condition nécessaire pour l obtention d un tel algorithme. 3. Méthodologie d évaluation Afin de comparer différentes heuristiques de résolution du problème LoadBalancing, des tests ont été réalisés dans le simulateur SimGrid ([4], [12]). 3.1. Génération d Instances Deux types de données sont à considérer afin de réaliser la simulation : les processus et les utilisateurs. Processus Les processus sont modélisés comme ayant deux paramètres : une durée et une occupation mémoire. Par souci de simplification, l occupation mémoire est considérée comme étant constante au cours du temps. On caractérise les processus plus en détail comme pouvant être courts (temps d exécution de l ordre de la seconde) ou longs (plusieurs dizaines de minutes), petits (quelques Mo) ou gros (plusieurs dizaines de Mo). L exécution des processus se fait de façon préemptive, comme c est le cas sur un système réel. Les Utilisateurs Le paramètre essentiel générateur d évènements est l utilisateur. On peut en considérer deux types : Utilisateur classique (type A) : il s agit d un utilisateur unique se connectant sur une machine afin d effectuer un travail ne demandant pas de calcul intensif. Il créé essentiellement des processus courts, et utilise une machine pendant environ 1h30. 4
Utilisateur intensif (type B) : il s agit d un utilisateur demandeur de puissance de calcul. Il lance essentiellement des processus longs, par dizaines et utilise un ordinateur durant la journée entière Pour pouvoir créer un processus sur une machine, il faut que la machine dispose d une mémoire libre au moins égale à la taille en mémoire du processus. Si ce n est pas le cas, le processus est refusé. 3.2. Algorithmes Trois méthodes d ordonnancement ont été considérées et implémentées dans le simulateur. RBT L idée de RBT est de calculer une borne inférieure en relaxant la contrainte de mémoire, puis d essayer de s en approcher le plus possible par une méthode round robin. On peut l écrire ainsi : Si je suis la machine la plus chargée Alors Calculer la solution du problème en relaxant la contrainte de mémoire Migrer autant de processus que nécessaire pour atteindre ma charge idéale en envoyant à tour de rôle aux machines sous-chargées en fonction de leur charge calculée. Rudolph L algorithme de [18] a été adapté pour convenir au contexte décrit. On peut écrire cette variante ainsi : Si je suis la machine la plus chargée Alors Soit i la machine à laquelle je peux envoyer le plus de processus afin d équilibrer nos charges Équilibrer ma charge avec i SIMPLE+ L algorithme SIMPLE+ ici proposé est une version améliorée de SIMPLE. Il est proposé afin d éviter les problèmes d oscillation que SIMPLE peut connaître : une tâche migrée vers une machine n ayant pas assez de mémoire vive pour l accueillir, est de nouveau migrée en retour sur la machine initiale. Afin de tenter d éviter ces situations, on propose l algorithme suivant : Si je suis la machine la plus chargée Alors Si La machine la moins chargée a suffisamment de mémoire pour accueillir mon plus petit processus Alors Envoyer mon plus petit processus à la machine la moins chargée Sinon S il existe une machine à même de recevoir mon plus petit processus, le lui envoyer RANDOM On considère un algorithme aléatoire, RANDOM, que l on peut décrire ainsi : si je suis la machine la plus chargée, alors envoyer un processus tiré au hasard à une machine tirée au hasard. NULL Enfin on se comparera au résultat de la simulation dans le cas où l on n effectue pas de rééquilibrage de charge. 3.3. Résultats Trois instances sont considérées. Une première instance, (A), est composée de six ordinateurs interconnectés par l intermédiaire d un switch. Quatre sont de puissance égale et disposent de 512 Mo de mémoire vive, deux sont deux fois plus rapides et disposent de deux fois plus de mémoire. La simulation s étend sur une période de 24 heures, au cours desquelles des utilisateurs se connectent sur les ordinateurs. Les créations de processus ont lieu exclusivement sur les ordinateurs les plus rapides et sur l un des autres. Les trois autres ordinateurs n ont pas d utilisateurs sur la période. Une deuxième instance, (B), est identique à l instance (A), avec l ajout de 6 nouveaux ordinateurs identiques aux 6 premiers. Des processus sont générés sur trois ordinateurs, les neufs autres n ont pas d utilisateurs durant la période. La troisième instance, (C), est composée de 12 ordinateurs et est obtenue en connectant deux instances (A) à un même switch. Pour comparer les résultats donnés par les différents algorithmes on utilise deux 5
indicateurs. Le premier est une traduction directe de la fonction objectif du problème, c est-à-dire la charge maximale. Afin de pouvoir comparer des instances différentes, on utilise l évolution au cours du temps de la fonction : δ(t) = max j=1..m load j,t min j=1..m load j,t max j=1..m load j,t Pour vérifier l adéquation du critère d équilibrage de charge avec la performance du système, on présente un deuxième indicateur. Il s agit du nombre de tâches acceptées par le système ainsi que le nombre de tâches qui ont pu être terminées par le système sur l intervalle de temps de 24 heures. Dans le modèle, une tâche est refusée si la ma chine ne dispose pas d une mémoire libre au moins égale à la taille en mémoire du processus. On présente le rapport de ces nombres avec le nombre de demandes de création, égal à la somme des nombres de tâches acceptées et refusées. L hypothèse que l on cherche à vérifier est que si la charge est correctement équilibrée alors le système travaille plus efficacement et est à même de réaliser plus de tâches dans le même intervalle de temps. On rappelle que le volume de communications réseau n est pas évalué. En effet, puisque l on utilise une méthode de résolution de type ɛ-contrainte, ce volume n est plus un critère : c est devenu une contrainte. Étant donné le caractère stochastique de la simulation, les résultats donnés sont des moyennes sur 10 lancements. NULL RANDOM SIMPLE+ RUDOLPH RBT δ(t) (A) 0,9 0,36 0,32 0,32 0,32 Acceptées (A) 45,88% 82,18% 85,39% 85,69% 85,11% Terminées (A) 41,02% 63,86% 71,94% 72,28% 74,20% δ(t) (B) 0,94 0,57 0,53 0,42 0,55 Acceptées (B) 40,37% 95,62% 95,31% 99,97% 97,07% Terminées (B) 38,07% 88,94% 89,31% 89,02% 90,62% δ(t) (C) 0,85 0,44 0,36 0,35 0,42 Acceptées (C) 29,45% 77,92% 75,76% 87,79% 78,13% Terminées (C) 26,72% 57,88% 57,37% 52,43% 60,75% TAB. 1 Résultats des simulations (Acceptées : taux de tâches non refusées pour manque de mémoire, Terminées : taux de tâches menées à terme sur la période de 24 heures.) 3.4. Analyse Les résultats obtenus confirment que le modèle proposé est pertinent. On remarque d une part que l utilisation d une règle simple et irréfléchie (RANDOM) produit des résultats meilleurs que ceux obtenus en ne faisant rien. Cela se caractérise par le fait que la valeur du critère est plus basse et que plus de tâches sont menées à terme. D autre part on constate que l utilisation d une règle simple et un peu plus réfléchie (SIMPLE+) produit des résultats meilleurs que ceux de RANDOM relativement au critère δ(t). Si RANDOM est en moyenne plutôt performant (en particulier dans l instance C), il connaît le plus grand écart type relatif à ses résultats. Il est donc le moins stable. On remarque par ailleurs que dans le cas (A) où peu de machines sont présentes, les performances des différents algorithmes sont très similaires. Cela s explique par le faible choix à faire vis-à-vis des migrations. L écart se creuse lorsque l on augmente les choix possibles. Bien que non pris en compte dans les critères, RUDOLPH est particulièrement efficace pour équilibrer la charge mémoire. Il possède ainsi le plus fort taux d acceptation : les machines chargées évacuent plus vite leurs processus, libérant de la place pour les suivants. La contrepartie est que les machines sont globalement plus chargées que lors de l exécution des autres heuristiques. À cause du modèle d exécution préemptif, les ordinateurs arrivent à finir moins de tâches sur 24 heures. Son taux de refus bas se corrèle directement avec une 6
valeur de δ(t) basse et sa stratégie de chercher à toujours migrer le plus gros volume. Quant à RBT, il entraîne le refus de plus de tâches, mais les machines sont ainsi moins chargées, et plus de processus sont menés à terme dans le délai imparti. Le nombre de tâches terminées est plus faible dans le cas C que dans les autres cas. D une part, le nombre de tâches menées à terme est moins bon que dans le cas B. Cela est dû au fait que les machines sont plus chargées. D autre part, les performances sont moins bonnes que dans le cas A. Cela s explique par le fait que les communications induites par le système est plus important. Ces communications incluent les messages de synchronisation, par lesquels chaque ordinateur transmet ses informations (charge, état, mémoire libre) aux autres ordinateurs. La valeur moyenne du critère δ(t) est moins bonne dans le cas B que dans le cas C. Cela est dû au fait que seuls trois ordinateurs génèrent de la charge, et les mécanismes d équilibrage mettent plus de temps à obtenir une situation équilibrée. D où un impact direct sur la valeur moyenne du critère. 4. Conclusion Un modèle d étude a été proposé. Un mécanisme d équilibrage de charge distribué et en-ligne a été exposé, puis implémenté au sein du simulateur SimGrid. Pour ce faire, l ensemble du processus a été décomposé en trois sous-ensembles : les ressources, les utilisateurs et leurs tâches. Des hypothèses fortes ont été effectuées : l impossibilité d estimer les temps d exécution, la prise en compte des contraintes de mémoire et l exécution parallèle des tâches sur un processeur donné. L apport de règles d ordonnancement heuristiques simples a été prouvé dans ce cadre. Les pistes d études sont nombreuses : outre l apport de nouvelles heuristiques, il convient maintenant de fixer un certain nombre de paramètres de façon expérimentale. En particulier la variable, K de la fonction objectif a une incidence directe sur le nombre de processus s exécutant sur un ordinateur où un utilisateur est connecté. La diffusion des informations de synchronisation a aussi un impact direct sur les performances globales du système. L utilisation de communications de type broadcast n est plus possible au delà d un nombre raisonnable d ordinateurs. D autres méthodes de diffusion sont à l étude. Par ailleurs, le modèle peut être étendu au cas où la mémoire des processus varie au cours du temps. Une autre relaxation d un cas pourtant bien réel a été faite et mérite d être étudiée : l hypothèse qu un processus s exécute aussi rapidement sur l ordinateur sur lequel il a été créé que sur un autre ordinateur du réseau (à la vitesse du processeur près). De nombreux cas réels peuvent mettre en défaut cette hypothèse, en particulier dans le traitement des appels systèmes. Nous travaillons actuellement sur la formalisation et la modélisation des appels systèmes émis par un processus afin de les inclure à notre simulation. D autres contraintes pertinentes sont considérées comme les contraintes de précédence et les communications inter-tâches. Parallèlement, le déploiement de la solution technique est en cours de planification. Bibliographie 1. Condor. http ://www.cs.wisc.edu/condor/. 2. Kerrighed. http ://www.kerrighed.org/. 3. Objectweb consortium proactive. http ://www-sop.inria.fr/oasis/proactive/. 4. Simgrid. http ://simgrid.gforge.inria.fr/. 5. Vmware. http ://www.vmware.com. 6. Aggarwal (G.), Motwani (R.) et Zhu (A.). The load rebalancing problem. Proc. ACM SPAA, 2003, 2003. 7. Anderson (D.P.). Boinc : A system for public-ressource computing and storage. 5th IEEE/ACM International Workshop on Grid Computing, 2004. 8. Anderson (D.P.), Cob (J.), Korpela (E.), Lebofsky et Werthimer. Seti at home : An experiment in public ressource computing. Communications of the ACM, vol. 45 No. 11, Nov 2002, pp. 56 61. 9. Berenbrink (Petra) et al. Randomized and adversarial load balancing. Proceedings of the eleventh annual ACM symposium on Parallel algorithms and architectures, 1999, pp. 175 184. 7
10. Berenbrink (Petra), Friedetzky (Tom) et Goldberg (Leslie Ann). The natural work-stealing algorithm is stable. In : IEEE Symposium on Foundations of Computer Science, pp. 178 187. 11. Borodin (Allan) et El-Yaniv (Ran). Online Computation and Competitive Analysis. Cambridge University Press, 1998. 12. Casanova (Henri), Legrand (Arnaud) et Marchal (Loris). Scheduling distributed applications : the simgrid simulation framework. Proceedings of the third IEEE International Symposium on Cluster Computing and the Grid (CCGrid 03), 2003. 13. Casavant (T.L.) et Kuhl (J.G.). A taxonomy of scheduling in general-purpose distributed computing systems. IEEE Transactions on Software Engineering, 1988, pp. 141 154. 14. Downey (Allen B.) et Harchol-Balter (Mor). A note on The Limited Peroformance Benefits of Migrating Active Processes for Load Sharing. Rapport technique, Computer Science Division University of California Berkeley, 1995. 15. Eager (Derek L.), Lazowska (Edward D.) et Zahorjan (John). The limited performance benefits of migrating active processes for load sharing. SIGMETRICS, May 1988, pp. 662 675. 16. Hanquez (Vincent) et Bar (Moshe). Openmosix kernel patch website. http ://openmosix.sf.net. 17. Perotin (Matthieu), Martineau (Patrick) et Esswein (Carl). équilibrage de charge réaliste pour la grille. Rapport Interne - LI Tours, 2008. 18. Rudolph (Larry), Slivkin-Allalouf (Miriam) et Upfal (Eli). A simple load balancing scheme for task allocation in parallel machines. In : ACM Symposium on Parallel Algorithms and Architectures, pp. 237 245. 19. T kindt (V.) et Billaut (J.C). Multicriteria Scheduling. Springer Verlag, Berlin, 2002. 20. Xu (Chengzhong) et Lau (Francis C.). Load Balancing in Parallel Computers : Theory and Practice. Norwell, MA, USA, Kluwer Academic Publishers, 1997. 8