• Aucun résultat trouvé

4.3 Injection de Fautes

4.3.2 G´en´eration des Param`etres

Nous nous int´eressons ici `a la g´en´eration al´eatoire de l’instant d’injection, du

mot et du bit cible.

Sommet de la pile Base de la pile Etape 1 Adresses décroissantes %g6 %psr %l1 %l2 %g7 Base de la pile Sommet de la pile Adresses décroissantes %g6 %psr %l1 %l2 %g7 Contexte %g7 + mot Fin Etape 3 corrompu

Valeur XOR masque

Base de la pile Sommet de la pile Adresses décroissantes %g6 %psr %l1 %l2 %g7 Etape 2 Contexte Base de la pile Sommet de la pile Adresses décroissantes %g6 %psr %l1 %l2 %g7 Contexte Début Etape 3 %g7 + mot Valeur

4.3. Injection de Fautes 79

Obtention du Mot Cible et du Masque

Pour N mots de mˆeme section efficace, le choix se r´esume `a un tirage unique de

1 parmi N. Il suffit de g´en´erer un nombre al´eatoire dans l’intervalle [0 : 1), de le

multiplier parN−1 et d’en prendre la partie enti`ere. En langage C,my_rand()´etant

la fonction qui retourne un nombre entre 0 et 1, floorf() la fonction qui retourne

la partie enti`ere d’une nombre `a virgule flottante et(unsigned int)l’op´eration qui

permet de transformer le type d’une variable en entier non sign´e (cast), cela s’´ecrit :

mot = (unsigned int)floorf( my_rand() * (N - 1) ) ;

Une fois le mot choisi, il reste `a d´eterminer le bit cible. Les mots du LEON ont

une taille de 32 bits. Afin de d´eterminer le masque, on g´en`ere un nombre al´eatoire

dans l’intervalle [0; 1], puis on le multiplie par 31, ensuite on en prend la partie

enti`ere. Cette partie enti`ere donne le nombre de d´ecalages `a gauche que la valeur

0x1 doit subir pour placer le bit cible en position. En C, l’op´erateurrepr´esentant

le d´ecalage `a gauche, cela s’´ecrit :

masque = 0x1 (unsigned int)floorf( my_rand() * 31 ) ;

Obtention du Temps selon le Mod`ele Binomial

Nous rappelons que le mod`ele binomial permet, pour une fluenceF de particules

p

i

,i ∈[1 :F], d’obtenir la liste des particules qui doivent conduire `a une injection de

faute. Pour obtenir cette liste, il faut pour chaque particule d´ecider si elle conduira

ou non `a une injection. Nous rappelons que la probabilit´e qu’une particule d´eclenche

un upset est la section efficace σ.

En r`egle g´en´erale, pour obtenir des nombres al´eatoires distribu´es selon une loi

de probabilit´eP(x) donn´ee, on peut utiliser la technique derejection sampling [57].

On borne alors la fonctionP(x) en abscisse (X_MAX), et on g´en`ere un couple (x

1

, y

1

)

de nombre al´eatoires uniform´ement distribu´es, l’un entre 0 et X_MAX, l’autre entre

0 et 1. Si y

1

< P(x =x

1

) alors le point x

1

est accept´e comme r´ealisation de P(x),

sinon il est rejet´e. La figure 4.8 illustre cette technique.

Dans le cas qui nous int´eresse la loi P(x) est la loi de probabilit´e d’une variable

de Bernoulli. Puisque x ne peut valoir que 1 (succ`es) ou 0 (´echec), il n’est pas

n´ecessaire de tirer un couple de valeurs al´eatoires, une seule est n´ecessaire. Si le

nombre al´eatoire x

1

compris entre 0 et 1 est inf´erieur `a la probabilit´e de succ`es p,

alors l’essai est r´eussi. En C, pour chaque particulep

i

, le test s’exprime par :

1

y1

y2

x2 x1

x2 accepté

x1 rejeté

X_MAX

(X_MAX, 1)

0

4.3. Injection de Fautes 81

qui retourne 1 si la particule doit ˆetre associ´ee `a une injection de faute, 0 sinon.

Nous rappelons que le mod`ele binomial ne donne pas d’instant d’injection de

faute, puisque nous ne connaissons pas quand arrivent les particules qui sont

s´elec-tionn´ees pour ˆetre associ´ees `a une injection. Afin d’utiliser ce mod`ele, nous cr´eons

artificiellement des temps d’arriv´ee.

Pour une fluence F, nous associons un temps d’exp´erienceT. Le temps d’arriv´ee

t

i

de la particule p

i

, i ∈[1 :F] est calcul´e selon :

t

i

=i×FT

La g´en´eration d’instants d’injection de faute se fait de la mani`ere suivante. Il

suffit de parcourir la liste de particules, et pour chaque particule, g´en´erer un nombre

al´eatoire xentre 0 et 1. Six < σ, une faute doit ˆetre inject´ee, et on calcule le temps

d’injection comme pr´ecis´e ci dessus. En bout de chaˆıne de traitement du mod`ele,

nous obtenons alors une liste d’instants croissants associ´es `a une injection de faute.

Obtention du Temps selon le Mod`ele Poissonnien

Lorsque la fonction inverse de la distribution de probabilit´e cumul´ee de la loiP(x)

existe et a une forme analytique, il est plus efficace de g´en´erer des nombres al´eatoires

selon la m´ethode de la transform´ee inverse (inverse transform) qu’en utilisant la

technique de rejection sampling.

Pour une variable al´eatoire X , si

X =F

−1

(U) (4.1)

U ´etant distribu´e al´eatoirement entre 0 et 1, alors X est une variable al´eatoire de

densit´e cumul´ee F(x).

En effet, si X est tel qu’en 4.1 avec F(x) une fonction de densit´e cumul´ee

quel-conque,

P(X ≤x) = P(F

−1

(U)≤x)

= P(U ≤F(x)

= F(x)

qui est la d´efinition de la fonction de densit´e cumul´ee de X.

Pour une variable al´eatoire X distribu´ee selon la loi exponentielle de param`etre

λ, F(X) s’´ecrit

Si l’on pose U =F(X), on obtient

X =−ln(1λU) (4.2)

En pratique, pour une section efficace σ et un flux Φ, λ =σ×Φ, on se place `a

l’instantt

0

= 0. On g´en`ereX selon l’´equation 4.2, et X donne le tempst

1

=X de la

premi`ere injection. On se place ensuite en t

1

et on g´en`ere un nouveau X qui donne

t

2

=t

1

+X, et ainsi de suite.

D´ecoupage du Temps d’Injection en Cycles d’Horloge et Ex´ecutions

Afin d’obtenir des temps d’injections relatifs `a l’ex´ecution en cours, et exprim´es

en cycles d’horloge, plusieurs ´etapes sont n´ecessaires.

Tout d’abord on d´ecoupe la liste des fautes `a injecter (exprim´ee en temps absolu

T) en temps relatifs `a l’ex´ecution t :

t= (T)modulo (dur´ee de l’ex´ecution)

Ensuite, on convertit les temps t en cycles d’horloge :

n

cycle

= t

f

f ´etant la fr´equence du processeur.

Enfin, dans le cas o`u plusieurs injections par ex´ecution doivent ˆetre r´ealis´ees, il

faut prendre en compte la dur´ee de la routine CEU et d´ecaler d’autant les prochaines

injections. PourN injections `a r´ealiser dans une mˆeme ex´ecution, avecT

CEU

la dur´ee

d’une injection, n

i

(l’instant de la i-`eme injection pour i∈[1 :N]) devient

n

i

+ (i−1)×T

CEU

On obtient alors une liste d’instants d’injection de fautes par ex´ecution et mesur´ee

en coups d’horloge processeur. Ce traitement est repr´esent´e sur la figure 4.9