Changes between Version 1 and Version 2 of replication_distribution


Ignore:
Timestamp:
May 20, 2016, 4:06:40 PM (8 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • replication_distribution

    v1 v2  
    11= Politique de réplication / distribution =
    22
     3[Outline]
     4
    35La politique de réplication / distribution vise deux objectifs: renforcer la localité, et SURTOUT minimiser la contention.
    4  * Pour les données non partagées ou read-only, (segments de type CODE, STACK) on cherche à les répliquer dans tous les clusters de l’architecture pour les rapprocher des thread utilisateurs.
     6 * Pour les données read-only (segments de type CODE), on cherche à les répliquer dans tous les clusters de l’architecture pour minimiser les points de contention.
     7 * Pour les données non partagées, (segments de type STACK) on cherche à les répliquer dans tous les clusters de l’architecture pour les rapprocher des thread utilisateurs.
    58 * Pour les données partagées ( segments DATA, HEAP, MMAP), on cherche à les distribuer le plus uniformément possible dans tous les clusters pour éviter la contention.
    69
    7 On fait l’hypothèse que - pour chaque processus P - le descripteur du processus P, et certaines structures qu’il contient
    8 telles que la table des pages (PT) et la liste des vsegs (VSL) sont répliquées dans tous les cluster qui contiennent
    9 au moins un thread de P.
    10 
    11 1)  pour un processus utilisateur P
    12 
    13 Un vseg désigne une zone mémoire contigüe dans l’espace virtuel d’un processus, auxquels sont attachés
    14 certains attributs (droit d’accès, politique de réplication/distribution dans les différents clusters, cachabilité, etc.).
    15 
    16 - Un vseg est public quand il peut être accédé par n’importe quel thread du processus,
    17 quel que soit le cluster dans lequel le thread s’exécute. Il est private quand il n’est accédé que par les threads
    18 s”exécutant dans le même cluster que le cluster ou est mappé le vseg.
    19 
    20 - Un vseg private est entièrement mappé dans la mémoire physique du cluster K dans lequel il est accessible.
    21 Il est enregistré dans liste des segments et dans la table des pages du cluster K, mais  pas dans les autres clusters.
    22 
    23 - Un vseg public est enregistrés dans la liste des segments et dans la table des pages de tous les clusters actifs
    24 (i.e. tous les clusters qui contiennent un thread de P).
    25 Pour maintenir la cohérence entre les tables de pages, chaque vseg public possède un cluster de référence, qui est le cluster
    26 propriétaire du processus (i.e. le cluster Z où a été créé le processus).
    27 Les réplicas du descripteurs de processus (et surtout les tables
    28 associées) autres que celui contenu dans le cluster de référence peuvent être considérées comme des caches read-only.
    29 
    30 - Un vseg peut être localised (toutes les pages du vseg sont mappées dans le même cluster),
    31 ou distributed (différentes pages sont mappées dans différents clusters en utilisant par exemple les bits de poids
    32 faibles comme clé de distribution). Les vsegs privés sont toujours localised.
     10
     11== 1)  pour un processus utilisateur P ==
     12
     13Un '''vseg''' désigne une zone mémoire contigüe dans l’espace virtuel d’un processus, auxquels sont attachés certains attributs (droit d’accès, politique de réplication/distribution dans les différents clusters, cachabilité, etc.).
     14
     15Pour chaque processus P, le descripteur du processus, et certaines structures qu’il contient telles que la table des pages (PT) et la liste des vsegs (VSL) sont répliquées dans tous les cluster qui contiennent au moins un thread de P.
     16
     17 * Un vseg est ''public'' quand il peut être accédé par n’importe quel thread du processus, quel que soit le cluster dans lequel le thread s’exécute. Il est ''private'' quand il n’est accédé que par les threads exécutant dans le même cluster que le cluster ou est mappé le vseg.
     18
     19 * Un vseg ''private'' est entièrement mappé dans la mémoire physique du cluster K dans lequel il est accessible. Il est enregistré dans liste des segments et dans la table des pages du cluster K, mais  pas dans les autres clusters.
     20
     21 * Un vseg ''public'' est enregistré dans la liste des segments et dans la table des pages de tous les clusters actifs (i.e. tous les clusters qui contiennent un thread de P). Pour maintenir la cohérence entre les tables de pages, chaque vseg ''public'' possède un cluster de référence, qui est le cluster propriétaire du processus (i.e. le cluster Z où a été créé le processus). Les réplicas du descripteurs de processus (et les tables associées) autres que celui contenu dans le cluster de référence peuvent être considérées comme des caches read-only.
     22
     23 * Un vseg peut être ''localised'' (toutes les pages du vseg sont mappées dans le même cluster), ou ''distributed'' (différentes pages du même vseg sont mappées dans différents clusters en utilisant par exemple les bits de poids faibles comme clé de distribution). Un vseg ''private'' est toujours ''localised''.
    3324
    3425Il existe sept types de vsegs, correspondant à des politiques de réplication/distribution différentes :
    3526
    36 - CODE :           private / plusieurs vsegs / mêmes adresses virtuelles, même contenu, un vseg par cluster actif
    37 - STACK :          private / plusieurs vsegs / un vseg par thread de P, mappé dans le cluster hébergeant le thread
    38 - DATA :             public  / un seul vseg / distributed
    39 - HEAP :            public  / un seul vseg / distributed
    40 - REMOTE :      public  / plusieurs vsegs / chaque vseg localised (dans le cluster concerné par le remote_malloc(x,y) )
    41 - FILE :              public  / plusieurs vsegs / chaque vseg localised (dans le cluster contenant le fichier concerné par le mmap() )
    42 - ANON :           public  / plusieurs vsegs / chaque vseg distributed (associé à un mmap() anonyme )
     27|| type        ||               ||                  ||   nombre                ||    commentaire                                              ||
     28|| CODE     ||  private   || localised   || un par cluster actif || mêmes adresses virtuelles, même contenu  ||
     29|| STACK    ||  private  ||  localised   || un par thread         || dans le cluster hébergeant le thread             ||
     30|| DATA       ||  public   || distributed || un par processus   || données globales partagées                         ||
     31|| HEAP      ||  public   || distributed || un par processus   || utilisé pour le malloc() standard                    ||
     32|| REMOTE ||  public   || localised   || un par cluster actif || utilisé par le remote_malloc(x,y)                     ||
     33|| FILE        ||  public   || localised   || un par MMAP(file)    || dans le cluster contenant le fichier file          ||
     34|| ANON     ||  public   || distributed || un par MMAP(anon) || équivalent au type HEAP                             ||
    4335
    44362) pour le noyau,