Page professionnelle – Thomas Robert

Maître de Conférence

TP analyse quantitative – Prism

Le but de ce TP est de vous faire manipuler PRISM, un outil permettant la caractérisation des attributs de sûreté de fonctionnement : fiabilité et disponibilité.
Le TP est découpé en trois parties, mais tout d’abord nous allons décrire le système étudié.

I Description du Système

Nous considérons un système en charge de réaliser un asservissement (contrôle de système). Afin de garantir une bonne fiabilité et disponibilité des calculs, une architecture tolérante aux fautes est choisie: réplication active à trois répliques et un « voteur ». Nous disposons de données nous permettant d’affirmer que chaque calculateur subit des défaillances de type crash dont la date d’apparition suit une loi exponentielle de paramètre lambda de telle sorte que le temps moyen avant défaillance soit de 1000h. Nous considérerons que la minute est l’unité de temps utilisé dans les modèles. On suppose que les répliques sont totalement isolées. Ceci signifie que l’activation des fautes sur les différentes répliques sont des phénomène aléatoires indépendants.

De plus, l’état de l’application en charge de l’asservissement peut devenir erroné à chaque calcul avec une probabilité f supposée égale dans un premier temps à 0.25. On considère qu’à partir du moment où l’état d’exécution est erroné, il le demeure pour chaque réplique.  Le voteur est jugé de fiabilité et disponibilité parfaite (idem pour le réseau).
Nous allons d’abord étudier un modèle à base de chaînes de Markov à temps discret pour modéliser l’état de fiabilité de l’architecture pour une exécution de l’architecture. Vous modéliserez le même comportement en utilisant un modèle défini comme un produit de chaînes de Markov. Ce modèle doit vous permettre d’évaluer des critères de fiabilité plus contraignants, comme par exemple garantir une séquence d’exécutions correctes consécutives. Enfin, vous aurez à proposer un modèle de disponibilité pour l’architecture complète en utilisant un modèle de chaîne de Markov à temps continu.

II Lancement de l’outil de modélisation/analyse.

L’outil PRISM permet de spécifier des chaînes de Markov et autres processus stochastiques, puis de réaliser des analyses sur ces derniers. Concernant les chaînes de Markov, les analyses suivantes sont possibles :  calcul de la probabilité stationnaire pour déterminer vers quelle distribution d’état « converge » la chaîne, ou un calcul sur un état transitoire pris à une date précise. Il est possible de généraliser le dernier cas en évaluant la probabilité qu’une formule de type PCTL soit vraie pour une chaîne donnée.
Pour lancer l’outil, saisissez la ligne suivante :
export PATH=/cal/homes/trobert/tool/prism-4.3.1-src/bin/:$PATH
Une fois cette ligne saisie, vous pouvez exécuter PRISM via la commande :

xprism

La fenêtre suivante s’affiche  :

En cas de problème à utiliser la version pré-installée, vous avez toujours la possibilité de l’installer sur votre compte. Suivez ce lien (choisissez la version source code )

Dans la partie droite de cet écran, vous pouvez saisir votre modèle au format texte, c’est la vue Model (onglet en bas à gauche).

Lors de la définition d’un modèle PRISM vous devez préciser :
  • le type de modèle : dtmc (discret) ou ctmc (continu) est fixé globalement
  • les modules : le modèle est constitué de plusieurs modules chacun correspondant à une chaîne de Markov de même type. La déclaration d’un module commence toujours pas le mots clés « module » suivi d’un identifiant. Ensuite vient la déclaration de l’état, puis des transitions. La définition du module se termine par le  mot clés « endmodule« 
  • Les transitions des modules peuvent être étiquetées afin de définir des transitions synchronisées au sens du produit classique d’automate: pour franchir une transition nommée « e » il faut que chaque automate franchisse une transition étiquetée « e ». Pour plus d’infos consulter la page sur les modules dans le manuel.
  • Il est possible d’utiliser des constantes pour faciliter la modification des paramètres numériques d’un modèle. Ces constantes peuvent être initialisées dans le modèle, ou instancier à la volée lors des analyses. La syntaxe est « const <type> <identifiant> = <val> ;« . Les types supportés sont : int, bool, double.

Exercice 1

Recopiez le modèle suivant dans la fenêtre de modélisation:

dtmc
const double r=0.75;
module TMROnDemand
s: [0..3] init 3 ;
[] s>0 -> r : (s'=s) + 1-r:(s'=s-1);
endmodule

Ce modèle est proposé pour étudier la fiabilité de TMR pour le cas où l’on suppose que toutes les répliques sont actives et sans erreur au départ.

La ligne « [] s>0 -> r : (s’=s) + 1-r:(s’=s-1);  » décrit un ensemble de transitions en réalité.

Pour chaque valuation de s telle que s>0 (donc 1,2,3) il y a deux arcs sortants. Le « + » sépare les alternatives. Chaque arc est décrit par une probabilité « : » une règle de mise à jour où à l’instant k s’ correspond à \(s_{k+1}\) et s à \(s_k\). De manière pragmatique, s permet de compter le nombre de répliques fiables. Pour exploiter ce modèle, il est nécessaire de calculer une probabilité transitoire car la distribution de probabilité des valuations de s doit être évaluée pour un certain nombre d’arc franchis.  

Question 1 Il existe un instant pour lequel le calcul de la probabilité transitoire de chaque état permet de déterminer la probabilité des différents état fonctionnel et non fonctionnels d’une exécution de TMR. Déterminer ce nombre de transitions, puis calculer la probabilité que TMR fonctionne correctement à partir d’un état totalement fonctionnel en faisant évaluer la distribution transitoire de la chaîne à la date voulue.

Remarque : vous pouvez vérifier l’exactitude du calcul avec la formule suivante qui donne la fiabilité de TMR à partir du paramètre q représentant la fiabilité d’une réplique (en supposant que les états de fonctionnement des répliques sont des variables aléatoires indépendantes).

$$R(q)= q^3 +3 q^2(1-q)$$

Question 2 Définissez une formule permettant de retrouver ce même résultat sans avoir à sommer les probabilités des états de fiabilité (la formule permettant de décider si TMR est fiable suite à une exécution de chacune de ses répliques).
 
Rappel : Vous utiliserez la syntaxe de PCTL : P<contrainte de probabilité> [<Formule CTL ou LTL>]
Par exemple si la chaine définit l’état z, P>0.4 [ G (z>0)] est une formule vraie si la probabilité que z reste non nul est supérieure à 0.4
Il est possible d’utiliser « P=? \([\Phi]\) » pour déclencher le calcul de la probabilité que la chaîne satisfasse la formule de chemin \(\Phi\). Consultez le manuel en ligne pour plus de détails.
Question 3 Enlevez l’initialisation mais pas la déclaration de r, et utilisez une « expérience » pour tracer l’évolution de la fiabilité de TMR en fonction de différentes valeurs de r : de 0.2 à 1 par pas de 0.01
Remarque : ces opérations se font dans la fenêtre Properties
 

Exercice 2

Un ingénieur prétend que le modèle ci dessus ne permet d’évaluer la fiabilité du système pour une séquence d’exécutions consécutives corrects. Nous allons essayer de comprendre pourquoi.

Réalisez les deux question suivantes sans utiliser PRISM

Question 1 évaluer la probabilité que TMR produise un résultat correct sachant qu’avant le début de l’exécution n répliques sont défaillantes (vous ferez le calcul pour n = 0…3)

Remarque pour n=0 et n=3 la réponse est triviale.

Question 2 Nous supposerons que la probabilité de défaillance d’une réplique fonctionnelle ne varie pas. Calculez la probabilité que TMR ait été fonctionnel pour deux traitements consécutifs sur l’architecture répliquée à partir de l’état où toutes les répliques sont fonctionnelles (utilisez les valeurs précédemment demandées)

Remarque : cela revient à calculer la probabilité que TMR fonctionne correctement une fois (utilisez la formule précédemment fournie), et qu’en fonction de l’état fonctionnel (2 répliques correctes ou 3 répliques correctes) TMR puisse rester dans un état fonctionnel encore une fois.

En résumé, vous devriez constater que le premier modèle est pessimiste d’environ 10% (on passe ~60% à 54% de fiabilité).

Nous allons essayer de retrouver ce résultat via PRISM puis le généraliser.

Il est possible de représenter un réseau de chaines de Markov sous PRISM. Cependant, il faut bien comprendre le lien entre un tel modèle à temps discret et l’écoulement du temps.

Pour comprendre ce lien, nous prendrons le cas très simpliste de chaines de Markov déterministes nommées C1, C2: pour i=1,2 leur état « Si » est inclus dans 0..5, et initialisé à 0 de plus

\(P(Si(k+1)=(Si(k)+1) mod 6|Si(k))=1\), ou mod et l’opérateur modulo (attention dans le code la notation change légèrement).

Voici comment une telle paire de chaînes peu être définie :

dtmc 
module C1
S1 :[0..5] init 0;
[] true -> 1: (S1'=mod(S1+1,6));
endmodule

module C2 = C1[S1=S2] endmodule

Analysons la déclaration : la déclaration de la première chaine est très standard. La seconde chaîne est déclarée par duplication. Le principe est de donner le nom du modèle à copier (ici C1 puis de détailler les substitution de noms de variables à réaliser). Admettons que l’on ait une chaîne nommée old, dont l’état est oldS. On peut créer la chaîne new d’état newS comme ceci module new = old[oldS=newS] endmodule. Pour plus de détails consultez le manuel. Évaluez la formule P=? [F[1,1] (S1=1 & S2=1)]

Remarque : il y  a une hypothèse implicite lors de cette analyse. Lorsque plusieurs chaînes peuvent progresser, il y a un tirage de loi uniforme pour savoir laquelle progresse. Comme les transitions ne sont pas synchrone, une seule est franchie à chaque incrément du temps. Il est possible de nommer les transitions ce qui permet de les synchroniser.

Modifier le modèle en ajoutant un identifiant quelconque entre les deux crochets au début de la ligne décrivant les transitions de C1. Évaluez la formule P=? [F[1,1] (S1=1 & S2=1)]

Question 4 Proposez un modèle composé de trois chaînes de markov, une pour chaque réplique. Sous l’hypothèse que les états de ces répliques sont x1,x2,x3, alors l’état de fiabilité de TMR doit pouvoir s’exprimer comme \(x1+x2+x3\ge 2\)

Vérifiez que vous obtenez bien les mêmes valeurs de fiabilité que dans l’exercice 1.

Question 5 Définissez la formule PCTL permettant d’évaluer la probabilité que l’architecture reste fiable durant dix sollicitations consécutives à partir de son état initial.

Il est possible d’utiliser des constantes que vous pourrez faire varier lors d’une expérience pour évaluer des variantes d’une formule. Pour cela, vous devez ajouter la dite constante dans la fenêtre Properties avant de l’utiliser dans la partie formule. De plus il est possible de faire varier plus d’une constante à la fois lors d’une expérience, il convient tout de même de dire celle qui servira de base pour l’axe x. Les autres variantes correspondront à différentes courbes.

Question 6  Utilisez une constantes pour évaluer la variation de la fiabilité de TMR pour un nombre T d’exécutions consécutives variant de 1 à 20 (prenez un pas de 1), et une autre constantes pour évaluer l’impact de la probabilité de défaillance d’une réplique sur ces courbes pour l’intervalle [0.75 1] avec un pas de 0.05.

Vous devriez obtenir quelque chose comme cela :

Anecdote :  sur un avion on peut arriver à exiger plusieurs heures de fonctionnement sans aucune défaillances. Pour des applications s’exécutant toutes les 10 ou 100 ms, je vous laisse imaginer ce qu’il faut comme fiabilité de base pour les dits composants. (on utilise des choses plus avancé qu’un simple TMR d’un autre coté).

Exercice 3

Dans ce dernier exercice, nous nous intéressons à la modélisation de la disponibilité du système.  Nous distinguons fiabilité et disponibilité en supposant que le logiciel subit des défaillances en valeur tandis que le matériel est sujet aux défaillances silencieuses (aussi appelées crashs). Ainsi, il faut décider que quels sont les états de disponibilité du système. En effet, si un calculateur crash, le fonctionnement logique de TMR est affecté car le vote doit se faire sur 2 répliques. Dans le cas extrême, on peut considérer l’architecture disponible mais peu fiable si l’on accepte que tant qu’un calculateur est en service, alors la fonction délivrée par TMR est disponible.

En supposant que n désigne le nombre de réplique non « crashées », dans ce tp TMR est déclarée disponible tant que \(n\ge 1\).

Question 1 Modéliser le comportement d’un calculateur dont la date de défaillance suit une loi exponentielle dont le paramètre est appelé taux de défaillance.  Modéliser un calculateur dont le temps moyen avant défaillance est de 100h. Définissez le modèle pour que la minute soit l’unité de temps. (utilisez une constante comme dans le premier cas).

Notez : pour les chaines continues, on ne définit pas les « self-transitions » i.e. les boucles. De plus la somme des taux est libre (elle n’a pas d’obligation à faire 1. La moyenne d’une loi exponentielle est l’inverse de son taux).

Il est possible de sauvegarder les données d’une expérience PRISM sous différents formats. Si vous exportez les données d’une expérience ou vous faite variez une constante représentant le temps (e.g. T). Il devient possible de calculer le temps moyen pour qu’une certaine transition soit prise.

Question 2 Utilisez une expérience permettant d’avoir, pour chaque instant jusqu’à 10000, la probabilité d’être dans l’état défaillant. Pour cela, vous pourrez engendrer la courbe correspondant à P=?[F[T,T] Q] avec Q la formule indiquant l’état de défaillant de votre réplique. Puis, utilisez un tableur ou le script R fourni ci-dessous pour calculer la date moyenne de la transition de l’état fonctionnel vers celui de défaillance.

#!/usr/bin/Rscript
args<-commandArgs(TRUE)
table <- read.csv(file=args[1], head=FALSE,skip=1,sep=",")
u<-table$V1
v<-table$V2
r<-diff(v)*u[-1]
print(sum(r))

 

ATTENTION : le produit synchronisé de chaines n’a pas beaucoup de sens pour les chaines continues (car PRISM multiplie les taux associés aux transitions). Il faut donc laisser les transitions non synchronisées.

Question 2 Définissez un produit de chaînes continues permettant de modéliser la disponibilité de TMR et son temps moyen de passage en état indisponible.

Question 3 Refaites le calculs pour un critère  de disponibilité exigent qu’au moins deux répliques soient disponibles (afin de pouvoir détecter une erreur de calcul).

A- t-on gagné en disponibilité avec TMR ?