Académique Documents
Professionnel Documents
Culture Documents
Introduction Plan
• ein : nème événement sur le site i • H : ensemble des événements de l’application, muni de
l’ordre partiel #
• ein # ejm ( ein happens before ejm ) ssi : si ( e /# e’ et e’/ # e ) alors e || e’ (concurrence)
• T = entiers naturels N
• Tous les messages portent l’horloge de leur émetteur à
l’instant d’émission (estampillage)
• 2 règles de mise à jour :
– R1 : avant tout événement (interne, émission, réception),
le site i exécute
– Ci = Ci + d (d > 0, généralement d = 1)
– R2 : lorsque le site i reçoit un message portant une
estampille Cmsg, il exécute
– Ci = max (Ci, Cmsg)
– Appliquer R1
– Délivrer le message -> événement «!réception!»
Exemple Exemple
1 1
! !
[1] [1]
!
1
Exemple Exemple
1 1
! !
[1] [1]
! ! !
2 2 3
[3]
! !
1 1
Exemple Exemple
1 2 1 2
! ! ! !
! ! ! !
2 3 2 3
[3] [3]
! ! !
1 1 4
Exemple Exemple
1 2 1 2
! ! ! !
4 4
! ! ! ! ! !
2 3 2 3
[3] [3]
[5]
! ! ! ! !
1 4 1 4 5
Exemple Exemple
1 2 6 1 2 6
! ! ! ! ! !
4 4 5
! ! ! ! ! ! !
2 3 2 3
[3] [3]
[5] [5]
! ! ! ! ! !
1 4 5 1 4 5
Exemple Horloges scalaires et causalité
• Simplement consistantes
1 2 6 7 C(e31) < C(e12) mais e31 || e12
! ! ! !
[1] [2]
• Peuvent être utilisées pour définir un ordre total << sur
les événements
4 5 ei << ej % C(ei) < C(ej) ou [ C(ei) = C(ej) et i < j ]
! ! ! !
2 3
[3] • C(e) = h indique que (h - 1) événements se sont déroulés
[5]
séquentiellement avant e.
! ! !
1 4 5
0
!
0
[1 0 0]
Exemple Exemple
1 1
0 0
! !
0 0
[1 0 0] [1 0 0]
1 !
0 0
! !
0 0
1 1
Exemple Exemple
1 1 2
0 0 0
! ! !
0 0 0
[1 0 0] [1 0 0] [2 0 0]
1 1 1 1
1 ! 2 ! 1 ! 2 !
0 0 [1 2 0] 0 0 [1 2 0]
0 0
! !
0 0
1 1
Exemple Exemple
1 2 1 2
0 0 0 0
! ! ! !
0 0 0 0
[1 0 0] [2 0 0] [1 0 0] [2 0 0]
1 1 1 1 2
1 ! 2 ! 1 ! 2 ! ! 3
0 0 [1 2 0] 0 0 [1 2 0] 0
0 0
! 1 ! ! 1 !
0 0
2 2
1 1
2 2
Exemple Exemple
1 2 1 2 3
0 0 0 0 2
! ! ! ! !
0 0 0 0 3
[1 0 0] [2 0 0] [1 0 0] [2 0 0]
1 1 2 1 1 2
1 ! 2 ! ! 3 1 ! 2 ! ! 3
0 0 [1 2 0] 0 0 0 [1 2 0] 0
0 [1 2 3] 0 [1 2 3]
! 1 ! 1 ! ! 1 ! 1 !
0 0
2 2 2 2
1 1
2 3 2 3
Exemple Exemple
4
2
1 2 3 1 2 3
3
0 0 2 0 0 2
! ! ! ! ! ! !
0 0 3 0 0 3
[1 0 0] [2 0 0] [1 0 0] [2 0 0]
1 1 2 2 1 1 2 2
1 ! 2 ! ! 3 4 ! 1 ! 2 ! ! 3 4 !
0 0 [1 2 0] 0 0 0 0 [1 2 0] 0 0
0 [1 2 3] 0 [1 2 3]
! 1 ! 1 ! ! 1 ! 1 !
0 0
2 2 2 2
1 1
2 3 2 3
Horloges vectorielles et causalité Simplification du test de causalité
• Définissent un ordre partiel sur les événements • Si e a lieu sur le site i, e’ sur le site j :
– tous les vecteurs ne sont pas comparables
– V ||!V’ dénote 2 vecteurs V et V’ non comparables e # e’ % VC(e)[i] " VC(e’)[i]
• Conditions d’application :
– Canaux FIFO
Exemple Exemple
1 1
! !
0 0
0 0
{( 1,1 )} {( 1,1 )}
0 0
0
0 {( 3,1 )}
1
0 !
Exemple Exemple
1 1
! !
0 0
0 1 0 1
{( 1,1 )} {( 1,1 )}
0 1 0 1
0 0
! 0 ! 0
0 0
0 {( 3,1 )} 0 {( 3,1 )}
1 1
0 ! 0 !
0
0 {( 4,1 )}
0
1 !
Exemple Exemple
1 1
! !
0 0
0 1 1 0 1 1
{( 1,1 )} {( 1,1 )}
0 1 2 0 1 2
0 1 0 1
! 0 ! 0 ! 0 ! 0
0 0 0
0 {( 3,1 )} 0 {( 3,1 )} 0 {( 3,2 )}
1 1 2
0 ! 0 ! 0 !
0 0
0 {( 4,1 )} 0 {( 4,1 )}
0 0
1 ! 1 !
Exemple Exemple
1 1
! !
0 0
0 1 1 1 0 1 1 1
{( 1,1 )} {( 1,1 )}
0 1 2 3 0 1 2 3
0 1 2 0 1 2
! 0 ! 0 ! 0 ! 0 ! 0 ! 0
0 0 0 0 0
0 {( 3,1 )} 0 {( 3,2 )} 0 {( 3,1 )} 0 {( 3,2 )} 0
1 2 1 2 3
0 ! 0 ! 0 ! 0 ! 1 !
0 0
0 {( 4,1 )} 0 {( 4,1 )}
0 0
1 ! 1 !
Exemple Exemple
1 1
! !
0 0
0 1 1 1 0 1 1 1 1
{( 1,1 )} {( 1,1 )}
0 1 2 3 0 1 2 3 4
0 1 2 0 1 2 4
! 0 ! 0 ! 0 ! 0 ! 0 ! 0 1 !
0 0 0 0 0 0 0 0
{( 3,1 )} {( 3,4 ), {( 3,1 )} {( 3,4 ),
0 0 {( 3,2 )} 0 0 0 0 {( 3,2 )} 0 0
4
(4,1)} 4
(4,1)}
1 2 3 1 2 3
0 ! 0 ! 1 ! 1 ! 0 ! 0 ! 1 ! 1 !
0 0
0 {( 4,1 )} 0 {( 4,1 )}
0 0
1 ! 1 !
Implémentation de la méthode S/K Implémentation (suite)
• Quelle information maintenir sur chaque site ? • Pourquoi des dates scalaires ?
– Celle qui permet à j de savoir quelles composantes de son – Tous les événements à considérer ont lieu sur le même
vecteur d’horloge envoyer à i : site j
• Horloge vectorielle de dernière émission vers i " ils sont identifiés de manière unique par VCj[j]
• Sous quelle forme ? • Gestion des dates d’émission : vecteur LS
• Matrice ? – LS : Last Sent
– La colonne i est le vecteur d’horloge du dernier envoi à i
– LSj[i] = valeur de VCj[j] lors du dernier envoi de j à i
PB : stockage local en N2
• Vecteurs ? • Gestion des dates de modification : vecteur LU
– On peut stocker les dates d’émission sous forme scalaire : LS
– LU : Last Update
– On stocke aussi les dates (scalaires) de modification de chacune
des composantes du vecteur d’horloge : LU – LUj[k] = valeur de VCj[j] lors de la dernière modification
de VCj[k]
! 2 vecteurs sur chaque site en plus de l’horloge vectorielle
1
• Efficace si les interactions entre processus sont localisées :
0 !
!
– Chaque processus ne communique qu’avec un petit nombre
m1 2
d’autres processus 0
1 1
0 ! 0 !
! !
0 m1 2 0 m1 0
3 3
{(1,1)} {(1,1)}
! ! ! 0 ! ! ! 0
m2 m2
{(2,3)} {(2,3)}
2 2
1 1
! ! ! ! 3 ! ! ! ! 3
0 0
4 4
1 1
m1 # m2
Perte sur la causalité (suite) Fowler / Zwaenepoel
1
• Gestion de vecteurs de dépendance
0
! ! – Un vecteur de dépendance n’est pas une horloge vectorielle
m1 0
0 – Mais il permet de les reconstruire
3
{(1,1)} • Principe :
! ! ! 0
– Chaque processus gère un vecteur D de taille N
m2
{(2,3)} – Lors d’une émission de message, un processus y inclut la
2
1 dernière valeur de sa composante locale Di[i]
! ! ! ! 3
0 – Lors de la réception par i d’un message en provenance de j
4 contenant la valeur d :
1
Exemple Exemple
1
!
0
0 {1}
0
Exemple Exemple
1 1
! !
0 0
1
0 {1} 0 {1}
0 0 1
0
! 0
0 0
0 {1} 0 {1}
1 1
0 ! 0 !
Exemple Exemple
1 1
! !
0 0
1 1 1
0 {1} 0 {1}
0 1 0 1 2
0 0 1
! 0 ! 0 ! 0
0 0
0 {1} 0 {1}
1 1
0 ! 0 !
0 0
0 {1} 0 {1}
0 0
1 ! 1 !
Exemple Exemple
1 1
! !
0 0
1 1 1 1 1
0 {1} 0 {1}
0 1 2 0 1 2 3
0 1 0 1 2
! 0 ! 0 ! 0 ! 0 ! 0
0 0 0 0
0 {1} 0 {2} 0 {1} 0 {2}
1 2 1 2
0 ! 0 ! 0 ! 0 !
0 0
0 {1} 0 {1}
0 0
1 ! 1 !
Exemple Exemple
1 1
! !
0 0
1 1 1 1 1 1
0 {1} 0 {1}
0 1 2 3 0 1 2 3
0 1 2 0 1 2
! 0 ! 0 ! 0 ! 0 ! 0 ! 0
0 0 0 0 0 0 0
0 {1} 0 {2} 0 0 {1} 0 {2} 0 0 {4}
1 2 3 1 2 3 4
0 ! 0 ! 1 ! 0 ! 0 ! 1 ! 1 !
0 0
0 {1} 0 {1}
0 0
1 ! 1 !
Exemple Analyse de l’information
1
!
0 • Interprétation de Di[k]
1 1 1 1
0 {1} – Indice du dernier événement sur le site k dont dépend
1 2 3 4
0 directement l’événement considéré sur le site i
0 1 2 4
2
! 0 ! 0 ! 0 0 ! ! !
2
! ! 1
0 0 0 0
0 {1} 0 {2} 0 0 {4} ! !
1 2 3 4
0 ! 0 ! 1 ! 1 !
• Perte de l’information liée à la transitivité
0 – Di[k] stocke l’information en provenance directe de k
0 {1} – i ne peut pas apprendre par l’intermédiaire de j l’état
0
d’avancement de k
1 !
Répéter 0 0
– VCold(e) = VCi(e) 0 0
{2}
– Pour chaque composante non nulle VCi(e)[k] : 0 0
0 0 0 00
0 0 0 0
0 0
{2} 0 0
{2}
1 2 1 2
! 1 1 ! ! 1 1 !
0 0
0 {1} 0 {1}
0 0
1 ! 1 !
Exemple Exemple
1 1
1 11 ! 2 1 11 ! 2
2 22 0 2 22 0
VCold = 0 VCi = 20 0
VCold = 0
2 VCi = 20 0
0 0 {2} 0 0 {2}
0 00 0 00
1 2 1 2
! 2 2 ! ! 2 2 !
0 0 0 0
0 0 0 0
0 0
{2} 0 0
{2}
1 2 1 2
! 1 1 ! ! 1 1 !
0 0
0 {1} 0 {1}
0 0
1 ! 1 !
Exemple Exemple
1 1
1 11 ! 2 1 11 ! 2
2 22 0 2 22 0
VCold = 0
2 VCi = 20 0
VCold = 0
2 VCi = 20 0
0 0 {2} 0 0 {2}
0 00 0 1
00
1 2 1 2
! 2 2 ! ! 2 2 !
0 0 0 0
0 0 0 0
0 0
{2} 0 0
{2}
1 2 1 2
! 1 1 ! ! 1 1 !
0 0
0 {1} 0 {1}
0 0
1 ! 1 !
Exemple Exemple
1 1
1 11 ! 2 1 11 ! 2
2 22 0 2 22 0
VCold = 0
2 VCi = 20 0
VCold = 0
2 VCi = 20 0
0 0 {2} 0 0 {2}
1
0 1
00 1
0 1
00
1 2 1 2
! 2 2 ! ! 2 2 !
0 0 0 0
0 0 0 0
0 0
{2} 0 0
{2}
1 2 1 2
! 1 1 ! ! 1 1 !
0 0
0 {1} 0 {1}
0 0
1 ! 1 !
Exemple Efficacité de la méthode
1
1 11 ! 2
2
• Minimisation de la somme d’information gérée :
22 0
VCold = 0
2 VCi = 20 0
– Un vecteur par processus
0 0 {2}
1
0 1
00 – Un scalaire par message
1 2
! 2 2 !
0
0 {1}
0
1 !
• Les horloges matricielles caractérisent la causalité • La causalité est la relation qui permet d’analyser une
application répartie
• Quel intérêt par rapport aux horloges vectorielles ? – Pas d’exécutions identiques
– Utilisées pour caractériser l’information obsolete : – Nécessité de tracer le lien entre les événements
• Log répartis
• Bases de données réparties • Le type d’horloge dépend de l’application
– Consistance forte ? Horloges vectorielles
• Calcul d’état global
– Consistance simple ? Horloges scalaires
• Section critique équitable
A
baisse de
pression
• [1] jauge
augmentation
B d'activité pompe
[2]
• [3]•
[5]
1 tuyau + •
[4] B'
• observateur
A'
1 jauge
• L’observateur reçoit 2 messages
1 pompe baisse de
A
pression
• jauge – Baisse de pression : émis à la date [1]
augmentation
1 observateur B d'activité pompe
– Augmentation d’activité : émis à la date [3]
• •
• • observateur
L’augmentation d’activité n’est pas la cause de la baisse de pression
B' A'
Horloges vectorielles
1
0 1
0 • 2
jauge
0
1
1
• • pompe
0 1
1 observateur
2
• • 2
2
1