1. Introduction - Real Time Systems Software
Transcription
1. Introduction - Real Time Systems Software
Institut de Recherche en Communications et Cybernétique de Nantes STORM Simulation TOol for Real-time Multiprocessor scheduling 1. Introduction STORM est un outil de simulation destiné à l'analyse du comportement et l'évaluation de performances de politiques d'ordonnancement. Figure 1 - Vue externe de STORM Il permet, à partir de la spécification des caractéristiques d'une architecture logicielle (les tâches à ordonnancer), d'une architecture matérielle (les ressources d'exécution pour ces tâches) et du choix d'une politique d'ordonnancement, de simuler une exécution de ces tâches sur ces ressources selon les règles de cette politique, ceci sur une durée d'étude donnée. Pour cela, le simulateur déroule unité de temps après unité de temps, les changements d'état des tâches en fonction de leurs contraintes "structurelles", les décisions d'ordonnancement qui peuvent en résulter et qui en conséquence peuvent à leur tour engager de nouveaux changements d'état. Comme le montre la figure 1, la spécification des architectures et politique d'ordonnancement se fait via un fichier XML à fournir en entrée de l'outil. Le résultat de la simulation est quant à lui observable via des traces directement visualisées ou pouvant être enregistrées. Page 1 Institut de Recherche en Communications et Cybernétique de Nantes Le code nécessaire à l'usage de STORM est présent dans l'archive storm-X.X.jar 1 . Celleci doit donc être chargée sur le poste de travail. La configuration minimale recommandée est la suivante : Machine virtuelle java Sun, version > 1.5. Processeur: pentium 3 1Ghz ou powerPC G4 600 Mhz. 512 Mo de mémoire. Pour utiliser STORM, une IHM est mise à disposition. Elle est démarrée, pour la version 2.0, par la commande (à lancer dans le répertoire contenant l'archive, via une fenêtre MSDOS sous Windows): java -jar storm-2.0.jar La figure 2 montre la fenêtre d'accueil de l'IHM en réponse à cette commande. Figure 2 - Interface de STORM 2. L'interface utilisateur Elle se présente sous la forme d'une fenêtre principale incluant une fenêtre intitulée "Console". C'est dans cette dernière que l'utilisateur dialogue avec l'outil, via la frappe de commandes spécifiques après l'invite "##>". La fenêtre principale est quant à elle utilisée pour la visualisation des résultats qui sont produits par certaines commandes. 1 X.X fait ici référence au numéro de la version du logiciel. Page 2 Institut de Recherche en Communications et Cybernétique de Nantes 2.1. Les commandes de la console Les différentes commandes mises à disposition de l'utilisateur sont présentées ci-après. Entre parenthèses se trouve la version réduite de la commande. help (?) Affiche l'ensemble des commandes accessibles via la console. Exemple : ##> help exec <FileName.xml> Lance une simulation à partir des spécifications fournies en entrée dans le fichier de nom FileName.xml. Celui-ci est décrit dans la section suivante. Exemple : ##> exec test-edf1.xml plotall (pa) Affiche les fenêtres visualisant le résultat de la simulation dernièrement lancée. Pour chaque tâche, une fenêtre présente le diagramme temporel de son exécution sur un intervalle allant de la date 0 à la date 50 (valeurs par défaut). La figure 3 illustre un tel diagramme de tâche. Le titre de la fenêtre fait référence au nom donné à la tâche dans la description XML fournie en entrée. Pour chaque processeur, une fenêtre présente le diagramme temporel des exécutions cumulées des tâches qui l'utilisent sur un intervalle allant de la date 0 à la date 50 (valeurs par défaut). La figure 4 illustre un tel diagramme de processeur. Le titre de la fenêtre fait référence au nom donné au processeur dans la description XML fournie en entrée. Exemple : ##> plotall Figure 3 - Diagramme temporel de la tâche déclarée T1 Page 3 Institut de Recherche en Communications et Cybernétique de Nantes Figure 4 - Diagramme temporel du du processeur déclaré CPU B Ces fenêtres peuvent être déplacées et ré-agencées au sein de la fenêtre principale à l'aide de la souris et en pointant sur leur bandeau supérieur. Pour chacun de ces diagrammes, en cliquant simplement sur une zone, les informations relatives à la tâche concernée s'affiche. La figure 5 montre le résultat d'une telle manipulation effectuée sur le diagramme d'un processeur. Figure 5 - Informations contextuelles Sur le diagramme temporel d'une tâche, des icônes sont utilisées pour y repérer des instants particuliers : • Instant de première activation de la tâche • Instant d'activation (d'un travail) de la tâche • Instant de fin d'exécution (d'un travail) de la tâche • Date d'échéance (d'un travail) de la tâche Page 4 Institut de Recherche en Communications et Cybernétique de Nantes • Blocage ou déblocage (d'un travail) de la tâche Le numéro dans le cercle indique l'état du compteur de blocage. Cette information est à mettre en relation avec les états internes des tâches que gère le noyau de simulation et n’est utile que pour la mise au point des algorithmes d’ordonnancement. windowsinfo (wi) Affiche la liste des diagrammes temporels actuellement présentés accompagnés de leur identifiant interne. C'est cet identifiant qui repère ce diagramme dans toute commande où il pourrait être nécessaire de le désigner. C'est par exemple le cas de la commande "print". Exemple : ##> windowsinfo setpos <WindowIdentifier> <Offset> (sp) Modifie l'intervalle de visualisation du diagramme temporel désigné via son identificateur interne, la valeur d'offset fournie spécifiant sa nouvelle date de début (sa date de fin devenant alors min(Offset+50,duration) 2 ). Exemple : ##> setpos 2 35 graphdata (gd) Affiche le graphe des dépendances par les données entre tâches (voir la figure 6). Exemple : ##> graphdata Figure 6 - Graphe de dépendance entre tâches 2 « duration » renvoie à l’attribut de même nom de la balise « SIMULATION » du fichier XML en entrée. Page 5 Institut de Recherche en Communications et Cybernétique de Nantes calcpower <ProcessorIdentifier> (cp) Calcule et affiche la consommation électrique pour le processeur dont l'identificateur interne est spécifié, sur la durée de la simulation. Exemple : ##> calcpower 0 ##> CPU Power consumption for CPU B 0,06 J duration 75 ms 0,85 W ##> La formule de calcul de la consommation électrique est la suivante: E E = ∑ ( p. pd .d .) et P = t t E : énergie en Joule ; P : puissance en Watt ; p : puissance du processeur (variable en fonction de son état) en Watt ; pd : "power deviation" de la tâche utilisant le processeur, "pd=1" si le processeur n'est pas utilisé ; d : durée entre deux mesures (ici 1 ms) ; t : durée de la simulation en s. plotpower <ProcessorIdentifier> (pp) Affiche le graphe de la consommation électrique du processeur dont l'identificateur interne est spécifié (voir la figure 7), sur la durée de la simulation. Exemple : ##> plotpower 3 Figure 7 - Consommation électrique du processeur CPU B en Watt Page 6 Institut de Recherche en Communications et Cybernétique de Nantes print <DiagramIdentifier> <FileName> (pr) Sauvegarde le diagramme temporel d'identificateur interne spécifié, dans le fichier de nom « FileName » au format jpeg. Exemple : ##> print 0 /tmp/cpuA.jpg closeall (cla) Efface tous les diagrammes temporels actuellement présents dans la fenêtre principale (la fenêtre Console est bien sûr maintenue). Exemple : ##> closeall clear (cls) Efface le contenu de la fenêtre Console. Exemple : ##> clear 3. Le fichier XML de spécification de la simulation Cette section décrit le fichier XML fourni en paramètre de la commande "exec" introduite précédemment. Comme précisé en introduction, il est destiné à spécifier les architectures logicielle et matérielle ainsi que la politique d'ordonnancement considérées pour la simulation.Le fichier est organisé de manière hiérarchique autour d'un certain nombre de balises comme montré par la figure 8. Dans ce qui suit, chaque balise et les attributs statiques qui l'accompagnent sont présentés. Il est toutefois possible, pour le développeur de nouvelles classes d'ordonnanceur, d'introduire et de renseigner de nouveaux attributs dynamiques au sein des blocs repérés par les balises SCHED et TASK. Figure 8 - Liste des balises du fichier XML Page 7 Institut de Recherche en Communications et Cybernétique de Nantes SIMULATION La balise racine SIMULATION du fichier XML doit être suivie de l'attribut "duration" dont la valeur indique la borne supérieure de l'intervalle de simulation (sachant que sa borne inférieure vaut 0). La simulation ayant lieu de manière discrète, pas temporels élémentaires les uns après les autres, celle-ci doit être exprimée dans cette même unité. Exemple: <SIMULATION duration="75"> . . . </SIMULATION> SCHED La balise SCHED s'attache à la spécification de l'ordonnanceur utilisé par la simulation. Son attribut "className" doit indiquer le nom de la classe Java qui modélise l'ordonnanceur considéré. Un certain nombre de classes sont fournies dans la bibliothèque d'ordonnanceurs associés à STORM. On dispose ainsi de : storm.Schedulers.FP_P_Scheduler.java storm.Schedulers.FP_NP_Scheduler.java storm.Schedulers.FP_M_Scheduler.java storm.Schedulers.FP_P_FIFO_Scheduler.java storm.Schedulers.FP_M_FIFO_Scheduler.java storm.Schedulers.EDF_P_Scheduler.java storm.Schedulers.EDF_NP_Scheduler.java storm.Schedulers.RR_Scheduler.java Fixed Priority Preemptive Fixed Priority Non-Preemptive Fixed Priority Mixed 3 Fixed Priority Preemptive/FIFO 4 Fixed Priority Mixed/FIFO 5 Earliest Deadline First Preemptive Earliest Deadline First Non-Preemptive Round Robin Exemple: <SCHED className="storm.Schedulers.FP_P_Scheduler"></SCHED> CPUS La balise CPUS (pour "CPU Set") annonce l'ensemble des processeurs composant l'architecture matérielle sur laquelle l'exécution des tâches doit être simulée. Cette balise n'affiche pas d'attribut propre mais doit inclure une (cas d'une architecture monoprocesseur) ou plusieurs (cas d'une architecture multiprocesseur) balises "CPU". 3 4 5 Mixed indique un mélange de tâches préemptives et non-préemptives dans la configuration. Dans un contexte entièrement préemptif les tâches sur un même niveau de priorité sont gérées en FIFO. Dans un contexte mixte les tâches sur un même niveau de priorité sont gérées en FIFO. Page 8 Institut de Recherche en Communications et Cybernétique de Nantes CPU La balise CPU permet de définir une instance de processeur présente dans l'architecture matérielle. Les attributs qui doivent accompagner cette balise sont : • className : le nom de la classe Java modélisant le type du processeur. Il s'agit là de référencer un élément d'une bibliothèque de types de processeur au comportement caractérisé (voir la liste des types disponibles ci-dessous); • name : le nom donné à l'instance de processeur qui servira à la désigner dans les résultats produits (voir, par exemple, le titre donné aux diagrammes temporels affichés) ; id : un identifiant numérique qui servira à désigner cette instance de processeur au sein du noyau de simulation. Celui-ci doit être unique pour tout le fichier XML. • Un certain nombre de classes seront fournies au sein de STORM modélisant quelques types de processeur. Actuellement on dispose uniquement d'un processeur simple sans DVFS : • storm.Processors.CT11MPCore avec deux états de consommation : "running" à 1 W et "idle" à 0.2 W. Exemple : <CPU className="storm.Processors.CT11MPCore" name ="CPU B" id="1" ></CPU> TASKS La balise TASKS (pour "TASK Set") annonce l'ensemble des tâches composant l'architecture logicielle dont on veut simuler l'exécution. Cette balise n'affiche pas d'attribut propre mais doit inclure une ou plusieurs balises "TASK". TASK La balise TASK permet de définir une instance de tâche présente dans l'architecture logicielle. Les attributs qui peuvent accompagner cette balise sont : • • • • • className : le nom de la classe Java modélisant le type de la tâche. Il s'agit là de référencer un élément d'une bibliothèque de types de tâche au comportement caractérisé (voir la liste des types disponibles ci-dessous); name : le nom donné à l'instance de tâche qui servira à la désigner dans les résultats produits (voir, par exemple, le titre donné aux diagrammes temporels affichés) ; id : un identifiant numérique qui servira à désigner cette instance de tâche au sein du noyau de simulation. Celui-ci doit être unique pour tout le fichier XML. WCET : la durée d'exécution "Worst Case" de cette instance de tâche ; activationDate : la date de première activation de cette instance de tâche ; Page 9 Institut de Recherche en Communications et Cybernétique de Nantes • • • • • priority : la priorité fixe de cette instance de tâche, obligatoire pour les ordonnanceurs à priorité fixe ; deadline: le délai critique dont fait état l'exécution de tous les travaux de cette instance de tâche. Si cette valeur est non renseignée mais que la période a une valeur, alors le délai critique est égal à l’attribut « period » ; period : la période d'activation de cette instance de tâche ; powerDeviation : charge en % de l'occupation énergétique ; nopreempt : si ="0" la tâche est en mode non-préemptif. Cet attribut est seulement géré avec les algorithmes d'ordonnancement mixte préemptif/nonpréemptif. La liste des types de tâche pouvant valuer l'attribut "className" est : • storm.Tasks.PTask_NAM : tâche périodique, sans mémorisation des activations survenant avant la fin d'un travail et sans mécanisme de contrôle de dépassement d'échéance ; • storm.Tasks.ATask : tâche apériodique. Exemple: <TASK className="storm.Tasks.PTask_NAM" name ="TASK T2" period="5" id="3" WCET="3" priority="2" activationDate="10"> </TASK> DATAS La balise DATAS (pour "DATA Set") annonce l'ensemble des données échangées entre les tâches de l'architecture logicielle. Cette balise n'affiche pas d'attribut propre mais peut inclure une ou plusieurs balises "DATA". DATA La balise DATA permet de définir une instance de donnée qu'une instance de tâche de l'architecture logicielle produit à destination d'une autre instance de tâche. Les attributs qui doivent accompagner cette balise sont : • source : l'identifiant numérique repérant l'instance de tâche productrice de la donnée ; • destination : l'identifiant numérique repérant l'instance de tâche consommatrice de la donnée ; • rate : le taux de production de cette donnée, c'est-à-dire le nombre de fois où elle doit être produite pour pouvoir être consommée ensuite ; • size : la taille de la donnée (en octets). Exemple: <DATA source="3" destination="2" rate="1" size="10"></DATA> Page 10 Institut de Recherche en Communications et Cybernétique de Nantes 4. Exemple de fichier source et résultats d’exécution Il s’agit d’un fichier de test pour une architecture matérielle avec 2 processeurs et une architecture logicielle comprenant 3 tâches périodiques, indépendantes. L’ordonnancement est à priorités fixes en mode préemptif. Contenu du fichier <Test-FPP5.xml> <!-- FP_P Fixed Priority Preemptive--> <!-- Multiprocessor --> <SIMULATION duration="50"> <SCHED className="storm.Schedulers.FP_P_Scheduler"></SCHED> <CPUS> <CPU className="storm.Processors.CT11MPCore" name ="CPU A" id="11" ></CPU> <CPU className="storm.Processors.CT11MPCore" name ="CPU B" id="12" ></CPU> </CPUS> <TASKS> <TASK className="storm.Tasks.PTask_NAM" name ="PTASK T1" id="1" period="10" activationDate="0" WCET="5" priority="1"></TASK> <TASK className="storm.Tasks.PTask_NAM" name ="PTASK T2" id="2" period="9" activationDate="2" WCET="3" priority="5"></TASK> <TASK className="storm.Tasks.PTask_NAM" name ="PTASK T3" id="3" period="6" activationDate="4" WCET="2" priority="10"></TASK> </TASKS> </SIMULATION> Tableau récapitulatif des paramètres de l’architecture logicielle Tâche Offset Période WCET Priorité T3 4 6 2 10 T2 2 9 3 5 T1 0 10 5 1 Page 11 Institut de Recherche en Communications et Cybernétique de Nantes Résultats d’exécution Page 12