Modèle à objets dupliqués Daniel Hagimont IRIT/ENSEEIHT 2 rue Charles Camichel - BP 7122 31071 TOULOUSE CEDEX 7 [email protected] http://hagimont.perso.enseeiht.fr 1 Plan Exemples de partage par duplication Principe général Gestion de la cohérence Exemple d'implantation 2 Exemples Origine : extension aux systèmes répartis des méthodes de partage partage de la mémoire commune dans un SMP partage d’un système de fichiers (NFS) extension du partage de mémoire virtuelle dans Unix 3 Exemples Partage de la mémoire commune dans un SMP cache associé à chaque processeur Mise à jour immédiate (write through) ou retardée (write back) processeur processeur cache cache mémoire commune 4 Exemples Partage d’un système de fichier (NFS) cache NFS sur les sites clients invalidations périodiques partition montée partition exportée 5 Exemples Partage de mémoire virtuelle (Unix) partage de segments (suite de pages) partage de la mémoire centrale par couplage processus Unix segment mémoire centrale 6 Exemples Partage de mémoire virtuelle en réparti 7 Principe général Principe : fournir des objets partagés par couplage dans les espaces d’adressage de structures d’exécution (couplage virtuel) réparties Partage par copie locale (efficacité) Programmation simple (accès local) Le système charge éventuellement les données à la demande Le système assure la cohérence des données partagées 8 Implantations principales Mémoire Virtuelle Partagée Répartie • Distributed Shared Memory Niveau Matériel (multiprocesseurs, FireFly) matériel spécifique Mécanismes de pagination (Ivy) indépendance Librairies utilisateurs (Orca) impose une structure Unité de partage Octet (Ivy) Objets (méthodes/synchro, Orca) Cohérence Mise de cache (réplication) Propagation de mises à jour Différents degrés de cohérence acceptables en fonction des applications (exemple indicateurs sur la charge des machines) 9 Gestion de la cohérence Un exemple (initialement, a = b = 0) Processus 1 Processus 2 if (a >= b) a = a + 1; b = b + 1; print("OK"); Intuitivement, Processus 1 devrait toujours afficher OK … 10 Gestion de la cohérence Et ensuite … Processus 1 et 2 Processus 3 Processus 4 if (a > b) print("1 0"); if (b > a) print("0 1"); a = a + 1; b = b + 1; Processus 1 et 2 ne devraient pas afficher des résultats différen 11 Implantations principales Propagation des mises à jour Write-update • • • • Lectures locales sans communication Modifications : locales et envoyées en multicast Cohérence : propriétés sur l'ordre des messages Multicast peut être cher Write-invalidate • Généralement, n lecteurs – 1 écrivain • Invalidations si accès conflictuels • Plusieurs lectures/écritures locales sans communication (si en cache) 12 Gestion de la cohérence Cohérence : relation que gardent entre elles les différentes copies des données Cohérence stricte, cohérence séquentielle Cohérences faibles cohérence faible (weak consistency) cohérence à la sortie (release consistency) cohérence à l'entrée (entry consistency) Cohérences non-séquentielles cohérence causale cohérence FIFO cohérence à terme 13 Cohérence stricte Cohérence stricte : toute lecture sur un élément X renvoie une valeur correspondant à l'écriture la plus récente sur X Modèle idéal Impossible à mettre en œuvre • Synchronisation des horloges (impossible d'avoir un référentiel de temps absolu) • Temps de communication (une opération locale lancée après une opération distante peut se terminer avant) On essaie de s'approcher de ce modèle de cohérence, mais avec des modèles moins contraignants 14 Cohérence séquentielle Le résultat de l'exécution est identique à celui d'une exécution où Toutes les opérations sont exécutées selon une certaine séquence S (comme en centralisé) Les opérations exécutées par tout processus P figurent dans S dans le même ordre que dans P La cohérence interne des données est respectée dans S (après une écriture et jusqu'à la prochaine, la lecture délivre la valeur écrite) Remarque : on ne contraint pas l'ordre des opérations dans des processus différents P1 P2 P3 W(y)4 W(x)1 W(y)2 R(y)2 R(x)0 R(x)1 W2(y)2 R3(y)2 R3(x)0 W1(x)1 R3(x)1 W1(y)4 respecte l'ordre séquentiel 15 Exemples Cohérence stricte P1 P2 P3 W(x)a W(x)b R(x)a R(x)a P4 Cohérence séquentielle, non stricte P1 P2 P3 R(x)b W(x)a W(x)b R(x)a Cohérence non séquentielle P4 R(x)b R(x)a R(x)b P4 P1 P2 P3 R(x)b W(x)a W(x)b R(x)b R(x)a R(x)a R(x)b 16 Cohérence séquentielle Les processeurs doivent s'accorder sur l'ordre des accès un accès en écriture est terminé si une lecture à la même adresse rend la valeur écrite (quelque soit le processeur) chaque écriture doit être terminée pour continuer l'exécution (sinon 2 écritures peuvent s'inverser) Dans la pratique, algorithme d'ordonnancement global diffusion des modifications à tous les sites (ordre total) ou un serveur n'autorisant qu'une seul copie en écriture (par unité) lourd et inefficace 17 Cohérence séquentielle Inutile si synchronisation a une variable de synchronisation (avec P et V) pas nécessaire d'imposer des contraintes sur les opérations internes à une section critique P(a) W(x)v W(y)v W(z)v V(a) P1 P2 18 Cohérences faibles Imposent des contraintes de programmation pour fournir la cohérence séquentielle : synchronisation La cohérence faible (weak consistency) cohérence séquentielle sur les verrous les accès mémoires doivent être terminés avant chaque point de synchronisation P(a) R(x)1 W(y)2 W(z)3 V(a) P1 ack(a) P2 19 Cohérences faibles La cohérence à la sortie (release consistency) on différencie les points d'entrée et de sortie en sortie de synchronisation, les accès doivent être terminés mise à jour précoce (eager): envoi des modifications à tous les nœuds ayant une copie mise à jour paresseuse (lazy) : acquisition par le processeur qui reprend le verrou (sorte de cohérence à l'entrée) utilisation possible de diffs sur des pages TreadMarks (Rice) 20 Cohérences faibles La cohérence à l'entrée (entry consistency) association explicite entre variable de synchronisation et variables partagées lorsqu'on utilise un objet, on le vérrouille on met en cohérence l'objet lors de la prise du verrou Midway (CMU) 21 Cohérences non séquentielles Cohérence causale Ne considère que des événements reliés par une relation de causalité Pas un séquence unique OP1 précède OP2 causalement si OP1 précède OP2 sur le même processeur OP2 est une lecture de la valeur écrite par OP1 OP1 et OP2 sont concurrentes si pas de précédence causale transitive Cohérence causale : deux écritures concurrentes peuvent être vues dans des ordres différents sur des processeurs différents 22 Cohérences non séquentielles Cohérence causale complexe à mettre en œuvre (trace des dépendances, horloges vectorielles) gains significatifs (60-90%) pour certaines applications P1 P2 P3 P4 W(x)3 W(x)1 R(x)1 W(x)2 // R(x)1 R(x)3 R(x)2 R(x)1 R(x)2 R(x)3 "pas vu, pas pris !" 23 Cohérences non séquentielles Cohérence FIFO On ne considère la causalité qu'à l'intérieur d'un seul processus 2 écritures par un même processus doivent être vues par tous les processus dans le même ordre P1 P2 P3 P4 W(x)1 R(x)1 W(x)2 W(x)3 R(x)2 R(x)1 R(x)3 R(x)1 R(x)2 R(x)3 24 Cohérences non séquentielles Cohérence à terme (eventual consistency) Majorité de lectures, peu d'écritures Acceptable de lire une donnée non à jour Exemples : DNS, WWW ... En l'absence prolongée de modifications, les copies finiront pas devenir cohérentes Algorithmes dits "épidémiques" 25 Conclusion Conclusion intérêts du modèle à objets dupliqués • favorise les accès locaux (efficacité) • omniprésent Limites et perspectives de nombreux protocoles de cohérence • complexité • pas de protocole universel protocoles adaptés aux besoins spécifiques de applications • gestion du partage en mode déconnecté 26