• Aucun résultat trouvé

Gestion dynamique d'applications parallèles à mémoire partagée

mais sur des n÷uds. Ce sont les actions réveiller un n÷ud et éteindre un n÷ud qui allument ou éteignent les n÷uds. Ces actions sont dénies par :

un ensemble de n÷uds éligibles, c'est à dire, l'ensemble des n÷uds de la grappe, un ensemble de processus éligible, c'est à dire, l'ensemble vide. En eet, ces actions

n'agissent pas sur des processus.

Fonction de simulation. La fonction de simulation associée à cette ressource physique est : si l'on ajoute un processus sur ce processeur, est-ce que la charge de la grappe est toujours homogène avec un maximum de 2 processus en cours d'exécution par n÷uds ? . Arbre de priorité

Cette politique globale d'ordonnancement étant composée d'une seule politique élé-mentaire, il ne nous a pas parut pertinent de présenter un arbre de priorité réduit à une une seule politique élémentaire avec 4 actions. Nous préférons présenter l'algorithme qui est selon nous plus intéressant (voir algorithme 5).

Algorithme 5 : Algorithme d'équilibrage de charge selon la politique d'économie d'énergie.

1. si (charge_processeur > 200%) ET (du_travail_en_attente) ET (pas_de_noeuds_disponibles) ET (des_noeuds_éteind) alors

essayer de réveiller un noeud.

n

2. si (charge_processeur > 200%) ET (du_travail_en_attente) ET (des_noeuds_sont_disponibles) alors

essayer de réveiller des processus sur des noeuds distants.

n

3. si charge_processeur == 100% alors

essayer de déplacer sur un noeud ayant aussi 100% de charge processeur.

n

4. si charge_processeur < 100% alors

(essayer de réveiller des processus sur des noeuds (local ou distants) ayant 100%

de charge processeur) OU (éteindre le noeud).

n

Cette algorithme contient quatre cas particuliers permettant d'équilibrer la charge des processeurs avec une densité de deux processus par n÷uds. Les n÷uds inactifs sont éteind.

En cas d'arrivé en liste d'attente d'une nouvelle tâche et que des n÷uds disponibles sont nécessaires, l'algorithme prend en charge le réveil des n÷uds.

4.2.3 Filtre sur les processus

Cette politique n'implémente pas de ltre sur les processus.

4.3 Gestion dynamique d'applications parallèles à mémoire partagée

Étienne Rivière a proposé dans [38] un ordonnanceur adapté aux applications parallèles fondées sur une mémoire partagée. Il a développé un ordonnanceur sur le système Kerrighed qui ore une mémoire partagée entre l'ensemble des n÷uds de la grappe. L'ordonnanceur réalise de l'équilibrage de charge en fonction de la ressource processeur. Les processus sont

placés sur les n÷uds à leur création et peuvent être déplacés en cours d'exécution. Dans le cas d'un déplacement en cours d'exécution, l'initiative revient au n÷ud chargé.

Lors d'une migration d'un processus, seul les éléments de contexte et l'état du processus sont envoyés au n÷ud de destination. L'ensemble des données manipulées par le processus (mémoire, chier...) est envoyé ensuite de manière paresseuse du n÷ud d'origine vers le n÷ud de destination.

4.3.1 Politique

L'objectif de la politique est d'assuré un équilibrage de charge entre les diérents pro-cesseurs de la grappe. Pour ce faire, l'ordonnanceur du système déplace des processus au cours du temps. Cependant, si l'ordonnanceur à le choix entre diérents processus, alors il pourrait être intéressant de déplacer celui qui ferait le moins de défauts de pages sur le n÷ud de destination. Pour ce faire, il faut introduire un indicateur de coût d'utilisation de la mémoire virtuelle partagée distribuée (MVPD) qui est le rapport entre le temps passé à exécuter le code de l'application et le temps passé à exécuter le code de mise en ÷uvre de la mémoire partagée.

4.3.2 Écriture de la politique

Pour mettre en place une telle politique, il nous faut créer deux politiques élémentaires.

La première consiste à équilibrer la charge entre les processeurs. La seconde consiste à placer les processus de manière optimisée sur les n÷uds.

Équilibrage de la charge entre les processeurs

L'équilibrage de la charge entre les processeurs est la même que celle dénie dans le paragraphe 4.1.2. La diérence est que dans le cas présent, cette politiqué élémentaire est de priorité maximum an de garantir avant tout une utilisation homogène de la grappe. De plus, an de permettre un regroupement de processus par anité, il faut permettre à un n÷ud monoprocesseur ou multiprocesseur d'exécuter plus que un processus simultanément.

Ainsi, tous les processus exécuté sur un même n÷ud monoprocesseur ou multiprocesseur bénécient de la mémoire partagée de ce n÷ud. Nous dénissons un seuil qui est de 3 processus d'une même application pour un processeur. Ainsi, la politique d'équilibrage de la charge des processeurs s'assure qu'en continu, au maximum 3 processus sont en cours d'exécution par processeurs. Ce seuil est arbitraire et peut surement être optimisé par une étude plus approfondie qui dépasse le cadre de ce document.

Actions. Nous utilisons une action qui est celle de déplacement d'un processus. Cette action a déjà été expliquée dans le paragraphe 4.1.2.

Fonction de simulation. La fonction de simulation associée à cette ressource physique est : si l'on ajoute un processus sur ce processeur, est-ce que la charge de la grappe est toujours homogène avec un maximum de 3 processus en cours d'exécution par n÷uds ? . Placement ecace des processus

Cette politique gère une ressource logique qui est le placement ecace des processus.

En eet, en imaginant que la charge processeur soit vérié, il est peut-être possible que les processus utilisant des mêmes pages mémoire ne soient pas placée de manière cohérente sur la grappe. Cette politique élémentaire doit à partir de l'indicateur d'anité entre les processus conçu par [38], rechercher des processus partageant de nombreuses pages mémoires, mais ne partageant pas la même mémoire physique.

4.3. GESTION DYNAMIQUE D'APPLICATIONS PARALLÈLES À MÉMOIRE PARTAGÉE41

Fig. 4.3 Exemple d'arbre de priorité pour la gestion dynamique d'applications commu-niquant par mémoire partagée.

La ressource placement ecace des processus qui est dénie par : le taux d'anité des processus présent sur même n÷ud,

le taux d'anité d'un processus par rapport à un n÷ud.

Actions. Nous utilisons deux actions. Dans le cas ou un mauvais placement de proces-sus est détecté, la politique élémentaire essaye de déplacer les procesproces-sus mis en cause en veillant à ne pas rompre la politique d'équilibrage de charge, à savoir un maximum de trois processus par processeur. Cette action est dénie de la même manière qu'au paragraphe 4.1.2.

De plus, nous utilisons une action qui est celle du réveil des processus. Cette action a déjà été expliquée dans le paragraphe 4.1.2.

Fonction de simulation. La fonction de simulation associée à cette ressource logique est : si l'on déplace le processus P sur le n÷ud N, est-ce que son anité mémoire sera meilleure avec les processus du n÷ud N ? .

Arbre de priorité

L'arbre des priorités de cette politique est représenté sur la gure 4.3. La première politique que nous décrivons est celle de la gestion de l'équilibrage de charge entre les processeurs. La seconde politique de priorité inférieure est celle du placement optimisé des processus sur les processeurs.

Concrètement, l'équilibrage de la charge entre les processeurs est assuré en premier lieu. Pour ce faire, l'ordonnanceur peut être amené à déplacer des processus. Lorsque la politique d'équilibrage de charge entre les processeurs est vériée, le système tente de placer les processus de manière optimale.

Notons que sur cet arbre de priorité il n'y a pas d'action ne_rien_faire, cela est dû au fonction de simulation. En eet, chaque action étant simulée avant sa réalisation, le cas ou toutes les simulations échouent revient implicitement à réaliser l'action ne_rien_faire.

Filtre sur les processus

Cette politique n'a pas besoin d'appliquer un ltre général sur les processus.

Chapitre 5

Mise en ÷uvre

Nous avons développé un prototype dans le contexte du système à image unique Ker-righed. Ce prototype composé de diérents modules indépendants. Une telle modularité rend le système évolutif et plus générique.

Dans ce chapitre nous présentons notre ordonnaceur modulaire. Puis, nous précisons notre mise en ÷uvre dans le cadre du système à image unique Kerrighed. Enn, nous eectuons des évaluations an de valider notre prototype.

5.1 Ordonnanceur modulaire

L'ordonnanceur global est réparti sur l'ensemble des n÷uds de la grappe. Chaque n÷ud exécute un centre de décision. L'ensemble des centres de décision forment l'ordonnanceur global. Les centres de décision peuvent communiquer entre-eux grâce à des socket TCP/IP.

Un centre de décision lit la politique de l'administrateur et selon celle-ci, surveille les ressources an d'exécuter les bonnes actions.

An de rendre notre système le plus générique possible, nous avons organisé son infra-structure en diérents modules indépendants les uns des autres. La gure 5.1 représente l'architecture de notre mise en ÷uvre. C'est le centre de décision qui met en liaison ces diérents modules. De plus, le système est conçu pour que diérentes personnes puissent interagir. Par exemple, les actions peuvent être écrites par les développeurs du système d'exploitation. Les ressources peuvent être écrite par des constructeurs de matériels. Au nal, l'administrateur de sa grappe, n'a besoin de spécier uniquement sa politique s'il dispose de tous les modules nécessaires.

La politique de l'administrateur est un chier texte. De plus, l'infrastructure du système est constituée de ressources et d'actions qui sont dénies par des fonctions que nous étudions dans les paragraphes suivants. Enn, nous disposons d'autres outils comme les ltres pour les n÷uds et pour les processus, les comparateurs, et les fonctions de tri. Nous étudions chacun de ces modules dans les paragraphes suivants. Chacun de ces modules est compilé en tant que librairie ce qui permet par exemple de rajouter une action, sans avoir à recompiler l'ensemble du système. Enn, nous avons développé notre prototype en langage C.

5.2 Mise en ÷uvre de l'ordonnancement dans le cadre de

Documents relatifs