Changes between Initial Version and Version 1 of thead_scheduling


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

--

Legend:

Unmodified
Added
Removed
Modified
  • thead_scheduling

    v1 v1  
     1= Ordonnancement des threads =
     2
     31) Problèmes liés à la distribution des thread
     4
     5Dans ALMOS, comme dans ALMOS-MK, il existe un ordonnanceur par CPU.
     6Chaque ordonnanceur gère un nombre borné de threads, qui sont attaché à un CPU au moment de la création du thread, et qui ne migrent pas en cours d’exécution.
     7
     8Un thread peut être dans 6 états en cours d’exécution:
     9- Dans l’état READY, le thread est éligible pour s’exécuter sur e CPU auquel elle est attachée. Tous les thread éligibles pour un CPU sont  enregistrés dans une file d’attente de tous les threads éligibles pour ce CPU.  Il existe une file d’attente de type READY pour chaque CPU.(champs “list” de la structure thread_t)
     10- Dans l’état WAIT, le thread est bloqué en attente de la disponibilité d’une ressource. Le thread est enregistré dans une file d’attente de tous les threads en attente de cette ressource. Il existe autant de files d’attentes que de ressources partagées.
     11- Dans les états USR ou KERNEL, le thread est en cours d’exécution sur son CPU,
     12soit en mode  user, soit en mode kernel. Il n’est enregistré dans aucune  file d’attente.
     13- Les état CREATE et DEAD, sont des états transitoires lors de la création ou de la destruction du thread.e thread
     14
     15Dans ALMOS, les files d’attente utilisées dans les états READY et WAIT sont implémentés comme des listes doublement chaînées internes grâce au champs “list” de la structure thread_t. Ces listes chaînées ont une racine, qui est enregistrée dans la structure scheduler_t (pour la liste READY), ou dans la structure de donnée représentant la ressource convoitée (pour les listes WAIT).
     16
     17Les files d’attente de type WAIT posent un problème particulier pour ALMOS-MK.
     18En effet une liste READY est toujours locale à un cluster, mais une liste WAIT peut contenir un nombre quelconque de threads s’exécutant dans différents clusters.
     19Il s’agit donc de listes chaînées “trans-clusters”.
     20De même, l’ensemble des threads appartenant à un même processus est représenté
     21dans ALMOS par une liste doublement chaînée interne, grâce au champs “rope” de la structure thread_t.  La racine de cette liste chaînée est enregistrée dans la structure task_t représentant le processus. Les thread d’un même processus pouvant être distribués sur tous les clusters de l’architecture cette liste ROPE est également une liste chaînée “trans-clusters”.
     22
     23Ces listes chaînées “trans-cluster” sont incompatibles avec  la politique de confinement de l’approche multi-kernels, et le premier problème est donc la représentation de ces files d’attentes de type WAIT. et READY ainsi que la représentation de l’ensemble des thread d’un processus (liste ROPE).
     24
     25Un second problème est lié à la mise à jour dynamique les listes READY et WAIT lors des opérations  d’ordonnancement liées aux ressources partagées :
     26- premier scénario: un thread T s’exécutant sur un CPU P dans un cluster K  se trouve bloqué sur une certaine ressource partagée située dans un cluster J (par exemple prise d’un mutex). Le noyau du cluster K doit enregistrer le thread T dans la liste WAIT dont la racine est dans le cluster J, avant de sélectionner un nouveau thread à exécuter sur le CPU P.
     27- second scénario: un thread T s’exécutant sur un CPU P dans un cluster K  relâche une ressource partagée situé dans un cluster J (par exemple libération d’un mutex). Le noyau du cluster K doit identifier le premier thread T’ en attente sur le mutex,
     28retirer T’ de la liste WAIT dont la racine est dans le cluster J, et l’introduire dans la liste READY du CPU chargé d’exécuter T’, qui peut se trouver dans un troisième cluster L.
     29
     30Le second problème est donc lié à la modification à distance des files d’attente READY et WAIT, puisque ALMOS-MK ne peut accéder à des structures de données distantes qu’en utilisant soit des RPCs, soit des accès directs remote_read() / remote_write().
     31
     322) Solutions envisagées
     33
     342.1) Solution “pointeurs étendus”
     35Elle consiste à modifier la bibliothèque de manipulation des listes double chaînées,
     36pour utiliser des pointeurs étendus (PTR / CID) sur 64 bits pour représenter les listes WAIT et ROPE. Il faut évidemment re-écrire les fonctions et macros de parcours de listes, mais la structure générale n’est pas modifiée.
     37Pour ce qui concerne les modifications de ces listes, il est possible d’utiliser systématiquement des lectures / écritures distantes, puisque les modifications sont locales, et que chaque liste est protégée par un verrou.
     38
     39Le principal avantage de cette solution est d’éviter le coût des RPCs, son principal
     40inconvénient est que la re-écriture du code des schedulers peut constituer un travail important. 
     41
     422.2) Solution “listes externes”
     43L’idée directrice est de supprimer toutes les listes chaînées “trans-clusters”.
     44Les listes READY sont déjà mono-cluster par construction.
     45Les listes WAIT sont implémentés au moyen d’un chaînage “externe” et sont entièrement stockées dans le cluster K contenant la ressource partagée, et
     46exclusivement gérées par le noyau du cluster K.
     47La liste des thread d’un processus est représentée par un tableau (ou un arbre) stocké dans la structure task_t représentant le processus (au lieu de la liste ROPE
     48distribuée). Dans cette approche, toutes les modifications des listes WAIT sont réalisées par des RPCs.
     49
     50Le principal avantage de cette solution est de respecter la philosophie générale de l’approche client/serveur. Son principal inconvénient est le coût des RPCs pour chaque modification d’une liste WAIT.