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