Sarah Moussouni Vers l’introduction de politique d’ordonnancement dans la compilation de programmes Lustre resultats

De Ensiwiki
Aller à : navigation, rechercher


Vers l’introduction de politique d’ordonnancement dans la compilation de programmes Lustre

Labo Laboratoire VERIMAG
Equipe Synchrone
Encadrants Karine.Altisen@imag.fr,Christophe.Rippert@imag.fr

Etudiant

Sarah Moussouni

Introduction

Ces dernières années, la vérification des systèmes informatiques critiques est devenue un sujet de recherche important en raison du développement croissant de logiciels pour la médecine, les moyens de transports ou les centrales nucléaires... Dans ces domaines, une erreur de programmation peut coûter très cher financièrement ou en vies humaines.

Dans ce cadre, les informaticiens ont été amenés à développer des langages dits synchrones dédiés à la programmation des systèmes réactifs.

Étant un langage synchrone, la caractéristique essentielle de Lustre est de pouvoir spécifier des comportements déterministes.Et étant dédié au développement des systèmes réactifs, il permet d’avoir des applications s’exécutant directement sur machine nue (sans système) car un système d’exploitation pourrait introduire un certain indéterminisme dans l’exécution. I.e. les mêmes séquences d’événements peuvent avoir des traitements qui varient de façon non prévisible d’une exécution à une autre.

Cependant, des travaux de recherche récents considèrent que l’introduction d’un minimum de services systèmes permettrait l’implémentation d’ordonnancement dynamique qui pourrait gérer les tâches urgentes ainsi que d’autres contraintes liées à l’environnement d’exécution qui ne sont pas toujours prévisibles et qui ont un temps d’exécution non connu d’avance par notre système réactif.

Cette idée d’utiliser un minimum de système est liée au besoin d’introduire une méthode de compilation différente de la compilation traditionnelle. Cette nouvelle méthode propose que le système (OS) permette la séparation, factorisation de tâches en sous-tâches.

Schema du projet.jpg

Éléments de pré-requis

Il est nécessaire au lecteur d'avoir une bonne maitrise des notions de base en système, programmation C et notions de processus léger.

Travail réalisé

Le but est de comprendre de façon fine l'ordonnancement statique, identifier les difficultés (c.f. les exemples de plus en plus compliqués avec des dépendances entre les nœuds) et simuler cet ordonnancement avec un modèle d'ordonnancement dynamique (les PThreads) pour avoir l'intuition de comment ça pourrait se passer dans un OS avec un scheduler classique.


Sémantique constante (implémentation avec Pthread)

L’objectif principal de cette première partie est l’étude de différents cas d’ordonnancement et cela se fera en simulant les différents cas de figure que l’ordonnanceur peut rencontrer après la décomposition en sous-bloc.

Les différents cas l’ordonnancement de deux tâches:

  • Tâches indépendantes ayant les mêmes arguments d’entrée
  • Tâches avec priorité : ordre dans l’exécution
  • Tâches qui dépendent l’une de l’autre

L’objectif principal est de démonter que l’on peut garantir l’équivalence entre l’exécution d’un programme en compilation classique et son exécution après l’avoir décomposé en plusieurs sous-tâches séparées.

Méthode : Chaque thread peut être attribué à une tâche spécifique qui s'exécutera en parallèle des tâches des autres threads (Glu entre les tâches).

Exemple

Exemple simulation.jpg

Compilation séparée : Intégration dans les outils

Objectif Etude de la compilation séparée d’un programme Lustre qui contient plusieurs nœuds qui sont suivant leur fonction indépendant/dépendant entre eux. Cette phase consiste à analyser la compilation, exécution et glu nécessaire lors de la décomposition d’un programme en 2 ou plusieurs sous-blocs. Problématique

  • Quelle sont les modifications dans le code pour créer la communication entre les fichiers (bloc de codes)?
  • En quoi consiste cette ‘glu’ de communication?

Après la phase de décomposition du programme, les sous-blocs résultants peuvent être liés entre eux. Plusieurs cas de figure sont à prendre en considération lors de la compilation et de l’ordonnancement de ses tâches:

  • Pas de communication entre les nœuds
  • Communication entre les nœuds du même sous-bloc
  • Communication entre les nœuds de sous-blocs différents

Conclusion

Objectifs de cette étude

  • Etude de la compilation classique de Lustre
  • Analyse des problèmes de l’ordonnancement
  • Maintien du déterminisme des langages synchrones avec la prise en considérations des différentes contraintes

Les expérimentations décrites relève de changement de code applicatif manuellement et les perspectifs avenirs de cette étude serai d’améliorer le code C généré par le compilateur en injectant automatiquement du code répondant au besoin de la compilation séparée. Aussi d'étudier les critères de séparation en sous-tâches: critères temporels, interruptions, consommation énergétique … et expérimenter la faisabilité d’ordonnancer des sous-tâches par un ordonnanceur exemple: Ordonnanceur Rate-Monotonic en initialisant la brique de base extraite du système NXTosek sur lego (cf- TER Tatiana CURELLI)

Documents additionnels