Support de la persistance
ย ย La notion de persistance est fournie dans les langages de programmation pour unifier lโutilisation des donnรฉes persistantes et temporaires [Atkinson 87]. Elle a รฉtรฉ introduite dโabord dans les langages fonctionnels et notamment LISP, puis dans les langages de programmation de bases de donnรฉes, tels que Pascal/R [Schmidt 77] et PSโAlgol [Atkinson 83]. Il existe plusieurs maniรจres de rendre visible la persistance au niveau des langages de programmation : dans les langages Trellis/Owl et Eiffel, elle est fournie comme un trait rajoutรฉ du langage dโorigine ; dans le langage Guide, un objet est persistant dรจs lors quโil existe un chemin dโaccรจs menant ร lui depuis un des objets appelรฉs racines de persistance. On peut remarquer que cette technique est actuellement lโune des plus reconnue. Dans tous les cas de figure, lโimplantation de ce type de langages nรฉcessite lโutilisation dโun support de la persistance. Ce support peut รชtre basรฉ soit sur le systรจme de fichiers fourni par le systรจme dโexploitation, soit sur un systรจme de gestion de bases de donnรฉes, soit sur un systรจme de gestion dโobjets persistants [Cockshot 84]. Ces systรจmes de gestion associent de faรงon trรจs fine la notion de persistance ร celle dโobjets. Le systรจme offre ainsi des fonctions de stockage de haut niveau sรฉmantique, cโest ร dire dans lesquelles la notion dโobjet est connue, avec comme corollaire la prise en compte au niveau du systรจme de stockage des problรจmes de dรฉsignation et de partage relatifs aux objets. Lโobjet est alors lโunitรฉ de persistance et de partage [Hosking 93], ce qui permet de coller idรฉalement au langage. Lโinconvรฉnient majeur de cette solution est quโelle impose lโobjet comme unitรฉ de transfert entre la mรฉmoire de travail et celle de stockage. Or lโexpรฉrience, acquise avec le langage Guide [Freyssinet 91], a montrรฉ que la taille moyenne des objets รฉtait infรฉrieure ร 500 octets, ce qui est petit relativement ร la taille des pages (en gรฉnรฉral 4 Ko). De plus, un chargement objet par objet risque de mal convenir aux applications visรฉes qui utilisent couramment des milliers sinon des millions dโobjets [Cahill 93]. Le coรปt dโune lecture objet par objet deviendrait vite prohibitif. Cโest pourquoi, des รฉtudes sur le regroupement dโobjets dans des conteneurs, de faรงon ร rรฉduire le nombre des transferts entre la mรฉmoire et le disque ont รฉtรฉ menรฉes [Benzaken 90][Deppish 91]. Des solutions basรฉes sur le couplage de lโespace de stockage dans la mรฉmoire virtuelle des processus ont รฉtรฉ proposรฉes [Millard 93] [Shekita 90]. Le gros avantage de ce type de solution, est quโil permet de dรฉcoupler lโunitรฉ dโaccรจs ร lโinformation de lโunitรฉ de transfert entre la mรฉmoire et les disques. On accรจde aux objets de maniรจre uniforme et on transfรจre des pages. On peut ainsi clairement sรฉparer la gestion de lโaccรจs aux objets de celle de leur persistance. La solution que nous avons choisie pour le support des objets persistants des langages Guide et dโune version รฉtendue de C++ intรฉgrant la persistance et la distribution, sโappuie sur la dรฉfinition dโune machine de stockage de bas niveau sรฉmantique [Chevalier 94c]. Lโapproche retenue est celle du conteneur de stockage non typรฉ et non structurรฉ, appelรฉ grappe. La sรฉmantique interne dโune grappe est dรฉfinie par une couche supรฉrieure du systรจme : la machine ร objets qui gรจre lโaccรจs aux objets (synchronisation et protection) [Hagimont 93]. Lโaccรจs ร une grappe est rรฉalisรฉ par son couplage dans lโespace dโadressage des applications. La machine ร grappe est mise en ลuvre sur la machine de stockage pour laquelle la grappe est une simple suite de blocs. On peut caractรฉriser notre proposition du support de la persistance pour les langages ร objets par deux points forts :
โข Un modรจle de mรฉmoire uniforme structurรฉ autour de la notion de grappe,qui offre un support efficace pour le dรฉveloppement de la machine qui gรจre les objets.
โข Une mise en ลuvre rรฉpartie de ce support (par des gรฉrants de mรฉmoire(2)) qui permet de partager la charge associรฉe entre un ensemble de machines. Le mรฉcanisme de couplage, fourni par la machine ร grappes, permet dโoffrir ร la machine ร objets, une mรฉmoire de grappes uniforme au sens de Multics [Organick 72]. La machine de stockage fournit une interface suffisamment gรฉnรฉrale pour permettre la mise en ลuvre du stockage des grappes par utilisation de serveurs de stockage externes ร la plateโforme Guide.
La persistance dans les systรจmes de gestion de fichiers
ย ย Nous allons tout dโabord faire un bref rappel sur la mise en ลuvre de la persistance dans les systรจmes de gestion de fichiers (SGF) fournis par les systรจmes dโexploitation classiques. Un SGF assure trois fonctions : il permet la conservation des donnรฉes sous la forme de fichiers (cโest ร dire, un ensemble contigu ou non dโoctets), il fournit une fonction de dรฉsignation des fichiers afin que les utilisateurs puissent les manipuler au travers de noms symboliques et enfin il fournit une fonction de protection entre les utilisateurs. Au niveau du traitement de la persistance des donnรฉes (de leur conservation sous forme de fichier), les environnements classiquement bรขtis auโdessus des SGF (comme lโenvironnement C/C++) souffrent de deux dรฉfauts majeurs :
โข Lโappel aux fonctions de conservation, que se soit pour lโรฉcriture ou la lecture, est explicite. Le programmeur dโapplications doit donc gรฉrer les transferts entre la mรฉmoire de ses applications et les disques de conservation.
โข Lโunitรฉ dโรฉchange entre la mรฉmoire de travail et la mรฉmoire de stockage nโest pas le fichier mais lโenregistrement ou le bloc dโenregistrements (c.a.d. une chaรฎne de caractรจres quelconques). Il est donc nรฉcessaire de convertir la reprรฉsentation des donnรฉes en mรฉmoire virtuelle, en une reprรฉsentation diffรฉrente propre ร รชtre conservรฉe. Le systรจme introduit une dichotomie, au niveau des traitements, entre les donnรฉes temporaires et les donnรฉes persistantes. Des efforts ont รฉtรฉ entrepris depuis une dizaine dโannรฉes pour attรฉnuer, voire รฉliminer les contraintes dues ร la persistance classique. Cโest ainsi quโa รฉtรฉ introduite au dรฉbut des annรฉes 80, la notion de programmation persistante. Lโidรฉe de base consiste ร associer aux donnรฉes la propriรฉtรฉ dโรชtre persistantes et de laisser le systรจme mettre en ลuvre cette propriรฉtรฉ de maniรจre automatique. De plus, le systรจme essaye de conserver la mรชme reprรฉsentation des donnรฉes en mรฉmoire virtuelle quโen espace de conservation รฉliminant par la mรชme les conversions dโune reprรฉsentation dans lโautre. La mise en ลuvre de ces diffรฉrentes idรฉes suppose que le systรจme dโexploitation offre un support appropriรฉ. Dans la section suivante, nous allons donc รฉtudier les problรจmes liรฉs ร ce support.
Support dโun modรจle de mรฉmoire persistante
ย ย Le but de la prรฉsente section est dโรฉvaluer les incidences du modรจle de mรฉmoire persistante sur la mise en ลuvre de la persistance dans un systรจme rรฉparti et dโidentifier notamment les principales caractรฉristiques dโun tel support. Dans cette optique, une รฉtude de cas sur diffรฉrents systรจmes support de persistance est proposรฉe dans la section II.4. Lโinfluence de la rรฉpartition sur la gestion de la persistance concerne principalement trois aspects :
โข La dรฉsignation qui englobe les problรจmes dโidentification des objets, ainsi que ceux relatifs ร leur accรจs. Le systรจme doit รชtre capable de retrouver les objets conservรฉs mais aussi de gรฉrer les accรจs aux objets composites (ensemble ou groupe dโobjets).
โข Le partage qui regroupe la gestion de la concurrence dโaccรจs et le maintien de la cohรฉrence des donnรฉes en mรฉmoire virtuelle. La gestion du partage, notamment en mรฉmoire virtuelle, est ce qui diffรฉrencie le plus un systรจme support de persistance dโun SGF classique.
โข La conservation qui doit garantir lโintรฉgritรฉ des donnรฉes en espace de conservation, prenant notamment en compte les problรจmes de reprise aprรจs panne. A ce niveau, on attend du support de la persistance quโil offre une qualitรฉ de service proche de celle fournie par les systรจmes de gestion de base de donnรฉes.
Le systรจme Clouds
ย ย Clouds [Dasgupta 90] est un projet de recherche du Georgia Institute of Technology dont le but est la rรฉalisation dโun systรจme distribuรฉ ร base dโobjets. Deux des principaux domaines explorรฉs sont la tolรฉrance aux fautes et la reconfiguration dynamique. Le systรจme Clouds est rรฉalisรฉ au dessus du noyau Ra sur un ensemble de stations Sun 3/60 reliรฉes par un rรฉseau Ethernet. Ra [Bernabeu 88] est un noyau minimal,ย dรฉveloppรฉ par la mรชme รฉquipe que Clouds, qui fournit les outils nรฉcessaires pour la rรฉalisation de systรจmes dโexploitation distribuรฉs. Clouds dรฉfinit deux concepts :
โข Lโobjet est conceptuellement vu comme un espace virtuel dโadressage persistant(2). Lโobjet est une entitรฉ passive dont la durรฉe de vie est indรฉpendante de la durรฉe de vie de tout flot dโexรฉcution. Il survit aux arrรชts et aux pannes du systรจme. Sa destruction est explicite.
โข Le flot dโexรฉcution (ou ยซย threadย ยป) est lโentitรฉ active du systรจme. Il peut รชtre vu comme un processus lรฉger qui sโexรฉcute dans les espaces virtuels dโadressage constituรฉs par les objets sur lesquels il exรฉcute des mรฉthodes. (2) Notons que Clouds gรจre aussi des objets temporaires. Un flot peut ainsi ยซย traverserย ยป plusieurs objets. Plusieurs flots peuvent sโexรฉcuter concurremment dans un mรชme objet, la synchronisation de base est associรฉe aux opรฉrations de lโobjet.
Dรฉsignation et localisation Les objets sont dรฉsignรฉs par des identificateurs universels (sysname). Les sysnames sont des identificateurs logiques ne contenant aucune information de localisation physique. La localisation dโun objet se fait dโabord par recherche dans des tables locales ร la machine courante. Puis par la consultation des disques locaux. Enfin, en cas dโรฉchec, le systรจme diffuse la demande de localisation ร lโensemble des machines.
Partage Chaque objet est reprรฉsentรฉ par un espace dโadressage partagรฉ distinct. Le partage dโobjet est rรฉalisรฉ par partage de lโespace dโadressage qui le constitue par les diffรฉrents flots dโexรฉcution. Dans la pratique, un espace dโadressage vu par un flot dโexรฉcution est constituรฉ de trois rรฉgions : la Oโrรฉgion dans laquelle se trouve lโobjet proprement dit, la Pโrรฉgion dans laquelle se trouve la pile du flot dโexรฉcution et la Kโrรฉgion utilisรฉe par le noyau. Lโappel de mรฉthode sur un objet O2 depuis un objet O1 provoque la dรฉsinstallation de lโobjet courant O1 de la Oโrรฉgion, lโinstallation de O2 dans la Oโrรฉgion. Puis une fois lโinvocation terminรฉe, la rรฉinstallation de O1.
Stockage La mise en ลuvre de la persistance des objets est assurรฉe par le noyau au travers de segments. Le segment est un bloc nonโtypรฉ et contigu de mรฉmoire (le noyau nโassocie aucune sรฉmantique quant au contenu du segment). Un objet est rรฉalisรฉ par un ou plusieurs segments ; en gรฉnรฉral, un segment de code et un segment de donnรฉes. Le segment permet au noyau dโaccรฉder directement aux pages des objets (par exemple, pour pouvoir les paginer) au travers des mรฉcanismes de gestion de la mรฉmoire virtuelle. Les segments sont crรฉรฉs de maniรจre explicite ; ils persistent jusquโร leur destruction, elle aussi explicite. Les segments sont dรฉsignรฉs par un nom global unique. La localisation dโun segment, similaire ร celle dโun objet, se fait par recherche dans la table locale des segments actifs (en cours dโutilisation), puis par diffusion de la demande. Les segments sont gรฉrรฉs par des serveurs de partitions. Une partition est une entitรฉ active responsable de la gestion dโun ensemble de segments dans lโespace de conservation. Le noyau lui rรฉclame les segments lorsque cela est nรฉcessaire (installation dโun segment), puis les libรจre lorsquโils ne sont plus utilisรฉs. Le noyau accรจde donc aux segments au travers de lโinterface des partitions. Cette interface de bas niveau offre des fonctions de crรฉation, destruction, extension et installation ainsi que des fonctions permettant le chargement/dรฉchargement (ยซย page in/outย ยป) des pages de segments. Notons que les segments et les partitions de Clouds sont des concepts respectivement proches des objets mรฉmoires et des paginateurs externes du microโnoyau Mach (cf sousโsection III.3.3). Le stockage des segments est rรฉalisรฉ en utilisant le systรจme de fichier Unix. Chaque segment est stockรฉ dans un fichier Unix. Le serveur de partition responsable du segment fournit les pages de ce segment au noyau Ra ร travers le rรฉseau. Ce mรฉcanisme est rendu transparent au noyau grรขce ร lโinterposition dโun client de partition sur la machine du noyau (cf Fig. 2.2).
Protection La protection dans Clouds est rรฉalisรฉe par isolation des objets. Chaque objet est reprรฉsentรฉ par un espace dโadressage distinct dans la mesure oรน le systรจme ne place quโun seul objet ร un instant donnรฉ dans une Oโrรฉgion. On peut considรฉrer quโun flot dโexรฉcution traverse les espaces dโadressage des objets quโil invoque au cours de son exรฉcution. La protection entre utilisateurs ou applications est basรฉe sur lโutilisation de capacitรฉs. Vu dโun utilisateur, un objet est identifiรฉ par une capacitรฉ qui contient lโidentificateur de lโobjet ainsi que des droits dโaccรจs. Le propriรฉtaire dโun objet peut contrรดler la diffusion de la capacitรฉ associรฉe ร son objet vers les autres utilisateurs.
|
Table des matiรจres
Chapitre I Introduction
I.1 Support de la persistanceย
I.2 Stockage fiableย
I.3 Organisation du mรฉmoireย
Chapitre II Support de la persistance
II.1 La persistance dans les systรจmes de gestion de fichiers
II.2 Modรจle de persistanceย
II.3 Support dโun modรจle de mรฉmoire persistanteย
II.3.1 La dรฉsignation
II.3.2 Le partage
II.3.3 Le stockage
II.3.4 La protection
II.4 Prรฉsentation de diffรฉrents systรจmesย
II.4.1 Le systรจme Clouds
II.4.2 Le Distributed Shared Repository
II.4.3 Le gestionnaire de persistance Cricket
II.4.4 Le systรจme O2
II.4.5 Tableau rรฉcapitulatif
II.5 Conclusionย
Chapitre III Lโenvironnement Guide
III.1 Introduction au systรจme Guideย
III.1.1 La machine virtuelle Guide
III.1.2 Le modรจle de donnรฉes
III.1.3 Le modรจle dโexรฉcution
III.1.4 Le modรจle de mรฉmoire
III.1.5 Protection et sรฉcuritรฉ
III.1.6 Les services du systรจme Guide
III.2 Architecture gรฉnรฉraleย
III.2.1 Machine ร objets
III.2.2 Machine ร segments
III.2.3 Machine ร grappes
III.2.4 Service de stockage
III.2.5 Machine dโexรฉcution
III.3 Quelques caractรฉristiques de Mach 3.0ย
III.3.1 Les tรขches et les flots de contrรดles
III.3.2 Les communications
III.3.3 La gestion de la mรฉmoire virtuelle
III.4 Conclusionย
Chapitre IV Le support de la persistance dans Guide
IV.1 Architecture gรฉnรฉrale
IV.1.1 Gestion de grappes en mรฉmoire dโexรฉcution
IV.1.1.1 Organisation gรฉnรฉrale
IV.1.1.2 Dรฉsignation et localisation des grappes en mรฉmoire dโexรฉcution
IV.1.1.3 Protection
IV.1.1.4 Partage
IV.1.1.5 Gestion dynamique de la taille des grappes
IV.1.1.6 Interface
IV.1.2 Gestion de grappes en mรฉmoire de stockage
IV.1.2.1 Organisation gรฉnรฉrale
IV.1.2.2 Concepts
IV.1.2.3 Dรฉsignation et localisation
IV.1.2.4 Conservation et intรฉgritรฉ
IV.1.2.5 Interface
IV.2 Mise en ลuvre
IV.2.1 Architecture
IV.2.2 Gestion de la pagination
IV.2.3 La journalisation
IV.2.3.1 Algorithme
IV.2.3.2 Limitations
IV.2.3.3 รlimination des anciens journaux
IV.3 Conclusion
Chapitre V Evaluation du support de la persistance
V.1 รvaluation qualitative
V.1.1 Support des grappes temporaires
V.1.2 Conclusion
V.2 รvaluation quantitativeย
V.2.1 Instrumentation
V.2.2 Fonctions de la machine ร grappes
V.2.3 Pagination locale et pagination ร distance
V.2.4 Impact de la journalisation sur le service de stockage
V.2.5 Conclusion
V.3 Support du microโnoyauย
V.4 Conclusion
Chapitre VI Vers une fiabilitรฉ accrue
VI.1 Concepts de base et terminologieย
VI.2 De la duplication appliquรฉe au stockage des donnรฉesย
VI.2.1 La cohรฉrence des copies
VI.2.2 Gestion de la cohรฉrence
VI.3 Mise en ลuvre de la duplication des donnรฉes
VI.3.1 Algorithmes pessimistes
VI.3.1.1 Le quorum
VI.3.2 Algorithmes optimistes
VI.3.2.1 Lโantiโentropie estampillรฉe
VI.4 Application au stockage fiableย
VI.4.1 Coda
VI.4.2 Echo
VI.4.2.1 La gestion des caches dans Echo
VI.4.2.2 La tolรฉrance aux pannes dans Echo
VI.4.3 Comparaison
VI.5 Conclusion
Chapitre VIIย Pour un stockage fiable dans le systรจme Guideโ2
VII.1 Un prototype pour le systรจme Guideโ1
VII.1.1 Architecture
VII.1.2 Fonctions principales
VII.1.2.1 Cohรฉrence
VII.1.2.2 Verrouillage des objets et invalidation
VII.1.2.3 Localisation des objets
VII.1.3 รvaluation
VII.2 De Guideโ1 ร Guideโ2ย
VII.3 Un serveur de stockage fiable pour Guideโ2ย
VII.3.1 Architecture
VII.3.2 Fonctions principales
VII.3.3 Traitement de la panne dโun gรฉrant de mรฉmoire
VII.3.4 Restauration dโun serveur de secours
VII.3.5 Opรฉrations en mode dรฉconnectรฉ
VII.3.6 รvaluation
VII.4 Conclusionย
Chapitre VIII Conclusion
VIII.1 Contributionย
VIII.2 รvolution du domaine
VIII.2.1 รvolution des besoins
VIII.2.2 รvolution des techniques
VIII.3 Perspectives
VIII.3.1 Expรฉrimentations
VIII.3.2 Plateโforme
Tรฉlรฉcharger le rapport complet