Changes between Initial Version and Version 1 of page_tables


Ignore:
Timestamp:
May 19, 2016, 7:27:14 PM (9 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • page_tables

    v1 v1  
     1= Construction dynamique des tables de pages =
     2
     31) Descripteur de vseg
     4
     5Un descripteur de vseg contient les informations suivantes :
     6- TYPE : définit la politique de réplication/distribution (CODE / STACK / DATA / HEAP / HEAPXY / FILE / ANON)
     7- FLAGS : définit les droits d’accès
     8- VBASE : adresse virtuelle  de base
     9- LENGTH : longueur du segment
     10- BIN : pathname to the .elf file. (seulement pour les types DATA et CODE)
     11- X,Y : coordonnées du cluster où est mappé le vseg (seulement pour un vseg localised)
     12- MAPPER : radix-tree contenant les pages physiques allouées à ce vseg (seulement pour les types CODE, DATA, FILE).
     13
     142) Descripteur de processus
     15
     16Dans chaque cluster, les différentes informations associées à un processus P sont regroupées dans le descripteur de processus.
     17Le PID (Process Identifier) est codé sur 32 bits, et il est unique dans le système : les 8 bits de poids fort contiennent
     18les coordonnées (X,Y) du cluster propriétaire Z, les 24 bits de poids faibles (LPID) contiennent le numéro local dans le cluster Z.
     19Le descripteur d’un processus P et les tables qui lui sont associées ne sont répliqués que dans les clusters qui contiennent
     20au moins un thread de P (appelés clusters actifs de P).
     21
     22Les principale informations stockées dans le descripteur processus sont les suivantes:
     23- PID :  processus identifier (contient les coordonnées du cluster propriétaire)
     24- PPID : parent processus identifier,
     25- XMIN, XMAX, YMIN, YMAX : recrangle recouvrant tous les clusters actifs
     26- PT : table des pages du processus,
     27- VSL : liste des vsegs du processus,
     28- FDT : table des fichiers ouverts du processus,
     29- TRDL : liste des threads du processus,
     30- ENV : variables d’environnement du processus,
     31
     32Le contenu des tables de pages évolue au cours du temps, et  n’est pas identique dans tous les clusters.
     33En effet le contenu des tables P évolue différemment dans les clusters en fonction des
     34défauts de pages causés par les threads de P s’exécutant dans les différents clusters.
     35De plus  le mapping des segments private (CODE et STACKS) varie d’un cluster à un autre.
     36Pour ce qui concerne les vsegs public, seul le cluster de référence contient l’état complet du mapping.
     37
     38De même, le contenu des listes de vsegs évolue au cours du temps, et n’est pas identique dans tous les clusters.
     39En effet chaque vseg private n’est enregistré que dans un seul cluster.
     40En revanche toutes les listes de vsegs doivent être identiques pour ce qui concerne les vsegs public.
     41Pour ce qui concerne les vsegs public, tout ajout dynamique d’un nouveau vseg public ou toute extension
     42doit être répercuté dans tous les clusters actifs.
     43
     443) Enregistrement et destruction des vsegs
     45 
     46La politique d’enregistrement et de destruction des vsegs dans les VSL(P,X) dépend du type de vseg:
     47
     483.1) DATA
     49Ce type de vseg est enregistré dans la VSL(P,Z)) du cluster Z  propriétaire du processus P au moment de la création de P.
     50Il est enregistré dans la VSL(P,A) d’un autre cluster A chaque fois qu’un thread de P est créé dans le cluster A,
     51si ce cluster ne contenait pas encore de thread du processus P.
     52La longueur est définie par le fichier .elf contenant le code binaire du processus.
     53Il n’y a pas de cluster de mapping pour un vseg distributed.
     54Ce type de vseg n’est détruit que lors de la destruction du processus.
     55
     563.2) CODE
     57Ce type de vseg est enregistré dans la VSL(P,Z) du cluster Z  propriétaire du processus P au moment de la création de P.
     58Il est enregistré dans la VSL(P,A) d’un autre cluster A chaque fois qu’un thread de P est créé dans le cluster A,
     59si ce cluster ne contenait pas encore de thread du processus P.
     60La longueur est définie par le fichier .elf contenant le code binaire du processus.
     61Le cluster de mapping est toujours le cluster local pour un vseg private.
     62Ce type de vseg n’est détruit que lors de la destruction du processus.
     63
     643.3) STACK
     65Un vseg de type STACK est enregistré dans la VSL(P,X) du cluster X chaque fois qu’un thread est crée dans le cluster X
     66par le processus P. Les VSL(P,Y) des autres clusters Y n’ont pas besoin d’être mises a jour car un vseg STACK
     67dans un cluster X n’est ni connu ni accédé depuis un autre cluster Y.
     68La longueur est définie par un paramètre global de l’OS : MIN_STACK_SIZE.
     69Le cluster de mapping est toujours le cluster local pour un vseg private.
     70Ce type de vseg est éliminé de la VSL(P,X) lors de la destruction du thread.
     71
     723.4) HEAP
     73Ce type de vseg est enregistré dans la VSL(P,Z) du cluster Z propriétaire du processus P au moment de la création de P.
     74Il est enregistré dans la VSL(P,A) d’un autre cluster A chaque fois qu’un thread de P est créé dans le cluster A,
     75si celui-ci ne contenait pas encore de thread du processus P.
     76La longueur est un paramètre global de l’OS : STANDARD_MALLOC_HEAP_SIZE.
     77Il n’y a pas de cluster de mapping pour un vseg distributed.
     78Ce type de vseg n’est détruit que lors de la destruction du processus.
     79
     803.5) REMOTE
     81Ce type de vseg est enregistré dans la VSL(P,A) de tous les clusters A qui contiennent au moins un thread de P,
     82au moment où un thread quelconque de P exécute un remote_malloc(x,y) dans un cluster K.
     83Le noyau du cluster K envoie une VSEG_REQUEST_RPC vers le cluster Z propriétaire de P, si un vseg de type REMOTE
     84n’existe pas déjà dans la VSL(P,K). Les arguments sont le PID, le type du vseg, les coordonnées (x,y), … To Be Completed …
     85Si ce type de vseg n’existe pas déjà dans la VSL(P,Z), le noyau de Z broadcaste une VSEG_REGISTER_BCRPC vers tous les
     86clusters actifs de P.   
     87La longueur est un paramètre global de l’OS : REMOTE_MALLOC_HEAP_SIZE.
     88Le cluster de mapping est défini par les arguments (x,y) du remote_malloc().
     89Ce type de vseg n’est détruit que lors de la destruction du processus.
     90
     913.6) FILE
     92Ce type de vseg est enregistré dans la VSL(P,A) de tous les cluster A qui contiennent au moins un thread de P,
     93au moment où un thread quelconque de P exécute un mmap(file , size) dans un cluster K.
     94Le noyau du cluster K envoie une VSEG_REQUEST_RPC vers le cluster Z propriétaire de P. Les arguments sont le PID,
     95le type de vseg, le descripteur de fichier, la taille … To be completed …
     96Le noyau du cluster Z broadcaste une VSEG_REGISTER_BCRPC vers tous les autres clusters actifs de P.
     97La longueur du vseg est définie par l’argument size du mmap().
     98Le cluster de mapping est défini par l’argument file, et il est quelconque puisque le cache d’un fichier peut être placé
     99sur n’importe quel cluster (répartition uniforme).
     100Ce type de vseg est  détruit lors de l’exécution du munmap(), en utilisant un mécanisme en deux RPC comme pour la création.
     101
     1023.7) ANON
     103Ce type de vseg est enregistré dans la VSL(P,A) de tous les cluster A qui contiennent au moins un thread de P,
     104au moment où un thread quelconque de P exécute un mmap(anonyme , size) dans un cluster K.
     105Le noyau du cluster K envoie une VSEG_REQUEST_RPC vers le cluster Z propriétaire de P. Les arguments sont le PID,
     106le type de vseg, le descripteur de fichier, la taille … To be completed …
     107Le noyau du cluster Z broadcaste une VSEG_REGISTER_BCRPC vers tous les autres clusters actifs de P.
     108La longueur du vseg est définie par l’argument size du mmap().
     109Il n’y a pas de cluster de mapping pour un vseg distributed.
     110Ce type de vseg est  détruit lors de l’exécution du munmap(), en utilisant un mécanisme en deux RPC comme pour la création.
     111
     1124) Introduction d’une nouvelle entrée dans une Table de Pages PT(P,K)
     113
     114L’ajout d’une entrée dans une PT(P,K), pour un processus P dans un cluster K est la conséquence d’un défaut de page
     115causé par n’importe quel thread du processus P s’exécutant dans le cluster K, sur le principe du “on-demand paging”.
     116Tous les threads d’un processus P placés dans un cluster K utilisent exclusivement la PT(P,K) locale, et reportent
     117le défaut de page  à l’instance locale du noyau. Le traitement du défaut de page dépend du type du segment :
     118
     1194.1) CODE
     120Il existe un vseg de ce type dans la VSL de tous les clusters contenant au moins un thread du processus P.
     121Si le cluster K qui détecte le défaut de page est différent du cluster propriétaire du processus Z, le noyau du cluster K doit allouer
     122une page physique dans le cluster K. Pour initialiser cette page, il envoie une PT_MISS_RPC au cluster Z propriétaire du processus.
     123Quand il obtient  le PTE stocké dans la PT(P,Z), il effectue un remote_memcpy() pour copier le contenu de la page physique
     124du cluster Z vers la page physique du cluster K. Il termine en introduisant le PTE manquant dans la PT(P,K).
     125Si le cluster K est le cluster propriétaire de Z, il alloue une page physique, initialise cette page en s’adressant au système de fichier,
     126pour récupérer le contenu de la page manquante dans le cache du fichier .elf, et met à jour la PT(P,Z).
     127
     128QUESTION : dans le cluster propriétaire Z, faut-il faire une copie de la page du cache de fichier vers une autre page physique ? [AG]
     129
     1304.2) STACK
     131Les vsegs STACK associées aux thread placées dans un cluster X sont mappées dans le cluster X,
     132et sont gérés indépendamment les uns des autres dans les différents clusters.
     133Le noyau du cluster X doit allouer une page physique, et l’enregistrer dans la PT (P,X) locale sans l’initialiser.
     134Si l’adresse demandée tombe dans la dernière page disponible pour le vseg, la longueur du vseg STACK peut être dynamiquement
     135localement augmentée dans la VSL(P,X) locale, si il y a de la place dans dans la zone de l’espace virtuel utilisée pour les piles.
     136Comme suggéré par Franck, on peut imaginer une politique d’allocation par dichotomie utilisant deux arguments : MAX_STACK_SIZE
     137définissant la longueur totale de la zone réservée aux piles, et MIN_STACK_SIZE définissant la longueur minimale d’une pile particulière.
     138
     1394.3) DATA
     140Ce vseg étant distributed, les pages physiques sont distribuées sur tous les clusters suivant les bits de poids faible du VPN.
     141Si le cluster K qui détecte le défaut de page est différent du cluster propriétaire Z, le noyau du cluster K envoie une PT_MISS_RPC
     142au cluster Z, pour obtenir  le PTE stocké dans la PT(P,Z). Les arguments sont le PID et le VPN de la page manquante.
     143Quand il reçoit la réponse, il met à jour la PT(P,K).
     144Si le cluster qui détecte le défaut de page est le cluster propriétaire Z, il sélectionne un cluster cible M à partir des bits
     145de poids faible du VPN, et envoie au cluster M une RPC_PMEM_GET_SPP pour obtenir le PPN d’une page physique du cluster M.
     146En réponse à cette RPC, le noyau du cluster M alloue une page physique et renvoie le PPN de celle-ci.
     147Le noyau du cluster Z s’adresse au système de fichier, pour récupérer le contenu de la page manquante dans le cache du fichier .elf,
     148et initialise la page physique dans M au moyen d’un remote_memcpy(). Finalement, il met à jour la PT (P,Z).
     149
     1504.4) HEAP
     151Ce vseg étant distributed, les pages physiques sont distribuées sur tous les clusters suivant les bits de poids faible du VPN.
     152Si le cluster K qui détecte le défaut de page est différent du cluster propriétaire Z, le noyau du cluster K envoie une PT_MISS_RPC
     153au cluster Z, pour obtenir  le PTE stocké dans la PT(P,Z). Les arguments sont le PID et le VPN de la page manquante.
     154Quand il reçoit la réponse, il met à jour la PT(P,K).
     155Si le cluster qui détecte le défaut de page est le cluster propriétaire Z, il sélectionne un cluster cible M à partir des bits
     156de poids faible du VPN, et envoie au cluster M RPC_PMEM_GET_SPP pour obtenir le PPN d’une page physique du cluster M.
     157En réponse à cette RPC, le noyau du cluster M alloue une page physique et renvoie le PPN de celle-ci.
     158Quand le noyau du cluster Z obtient le PPN, il met à jour la PT (P,Z).
     159
     1604.5) REMOTE
     161Ce vseg étant localised, les coordonnées du cluster de mapping M sont enregistrées dans le descripteur de vseg.
     162Si le cluster K qui détecte le défaut de page est différent du cluster propriétaire Z, le noyau du cluster K envoie une PT_MISS_RPC
     163au cluster Z, pour obtenir  le PTE stocké dans la PT(P,Z). Les arguments sont le PID et le VPN de la page manquante.
     164Quand il reçoit la réponse, il met à jour la PT(P,X).
     165Si le cluster qui détecte le défaut de page est le cluster propriétaire Z, il envoie au cluster M une RPC_PMEM_GET_SPP pour obtenir
     166le PPN d’une page physique du cluster M.
     167En réponse à cette RPC, le noyau du cluster M alloue une page physique, et renvoie le PPN de celle-ci.
     168Quand le noyau du cluster Z obtient le PPN, il met à jour la PT (P,Z).
     169
     1704.6) FILE
     171Ce vseg étant localised, les coordonnées du cluster de mapping M sont enregistrées dans le descripteur de vseg.
     172Si le cluster qui détecte le défaut de page K est différent du cluster propriétaire Z, le noyau du cluster K envoie une PT_MISS_RPC
     173au cluster Z, pour obtenir  le PTE stocké dans la PT(P,Z). Les arguments sont le PID et le VPN de la page manquante.
     174Quand il reçoit la réponse, il met à jour la PT(P,K).
     175Si le cluster qui détecte le défaut de page est le cluster propriétaire Z, il envoie au cluster M qui contient le cache du fichier
     176une GET_FILE_CACHE_RPC pour obtenir le PPN. Les arguments sont le PID, le descripteur du fichier, et l’index de la page dans le mapper.
     177En réponse à cette RPC, le noyau du cluster M accède au mapper du vseg et retourne le PPN correspondant.
     178Quand le noyau du cluster Z obtient le PPN, il met à jour la PT (P,Z).
     179
     1804.7) ANON
     181Ce vseg étant distributed, les pages physiques sont distribuées sur tous les clusters suivant les bits de poids faible du VPN.
     182Le traitement d’un défaut de page est le même que pour un vseg HEAP.
     183
     184QUESTION : Les mécanismes décrits ci-dessus pour  les types DATA, HEAP, REMOTE et ANON utilisent une RPC_PMEM_GET_SPP,
     185qui suppose que le noyau d’un cluster (M) peut “transmettre la propriété” d’une ou plusieurs pages physiques
     186à un autre cluster (Z) pour la durée de vie d’un processus. Il faut définir une politique d’allocation/libération de pages de
     187mémoire physique entre clusters… [AG]
     188
     189
     1905) Invalidation d’une entrée dans une Table de Pages
     191
     192Dans un cluster Z, propriétaire d’un processus P, le noyau peut décider d’invalider une entrée d’une PT(P,Z).
     193Cela peut se produire par exemple en cas de pénurie de mémoire dans le cluster Z, ou simplement en cas de munmap().
     194Sauf si le vseg concerné est de type STACK, l’entrée invalidée dans la PT(P,Z) doit aussi être invalidée
     195dans les PT(P,K) des autre clusters.
     196Pour ce faire, le noyau du cluster Z doit broadcaster une PT_INVAL_BCRPC vers tous les autres clusters actifs de P.
     197
     1986) Optimisation des RPC broadcast
     199
     200Dans une RPC broadcast, tous les clusters destinataires (même ceux qui ne sont pas concernés)
     201signalent la terminaison en incrémentant de façon atomique un compteur de réponses,  qui est scruté par le cluster initiateur.
     202
     203Pour réduire le nombre de destinatiares, le descripteur du processus P du cluster propriétaire Z peut maintenir quatre variables
     204XMIN, XMAX, YMIN, YMAX définissant le rectangle minimal recouvrant tous les clusters actifs de P à tout instant.
     205Dans ce cas une RPC broadcast ne doit être envoyée qu’a (XMAX - XMIN + 1) * (YMAX - YMIN +1) destinataires.
     206Ces variables sont mises à jour à chaque création de thread.
     207
     2087 ) Optimisation du traitement des PT_MISS
     209
     210Pour réduire le nombre de RPC causés par les défauts de page, le noyau d’un cluster X qui détecte un défaut de page peut
     211utiliser un remote_read() dans la table PT(P,Z) du cluster de référence au lieu d’une PT_MISS_RPC. Ceci impose cependant d’utiliser un lock multi-lecteurs pour éviter un état incohérent dans le cas d’une transaction PT_INVAL_BC_RPC simultanée
     212initiée par le cluster Z : Ce lock doit être pris systématiquement par le cluster propriétaire avant un PT_INVAL_BC_RPC, et par les autres clusters avant  un remore_read(). Il garantit que le PT_INVAL_BC_RPC  ne sera lancé qu’après la fin de tous les remote_read() en cours. Il garantit qu’aucun nouveau remote_read() ne sera plus accepté avant la completion du PT_INVAL_BC_RPC.