Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
A proper gras_init function
[simgrid.git] / TODO
1 [sorry for the parts in french :]
2
3 ###
4 ### Avant 0.5
5 ###
6
7 - tcp->incoming_socks
8   sock specific tcp (buffsize) inutile
9
10 ###
11 ### Avant 1.0
12 ###
13
14 - gras_os_getload
15
16 - gras_datadesc_import_nws
17
18 - rawsock
19   Verifier que les messages vont pas sur des sock raw
20
21 - Documentation (en particulier DD et Msg)
22
23 - gras_datadesc_cpy -> donne la taille prise pour donner un poids aux messages
24
25 - callback en reception ?? (remettre les pointeurs sur fonction etc)
26
27 - Virer cat ignored
28   gras_ddt_new_ignored : Pas portable (taille) => virer cat?
29   Necessaire aux pointeurs sur fonction? Renomer 'void'
30
31 ###
32 ### Apres
33 ### 
34
35 - Adaptative timeout
36 - datadesc_set_cste: Donne la valeur par defaut en reception
37   plus de transfert, ce qui est utile pour les pointeurs sur fct
38
39 ============================================================================
40
41 * while (1) { fork; exec the child, wait in father }
42
43  - core ok (errors, logs ; dynars, dicts, hooks, pools; config, rrdb)
44  - virtualize (linux, solaris, SG) & conditions
45  - binary representation: any type, SNWF (Sender Native Wire Format)
46  - modules (logs, manage, token ring, bw)
47  - cleanups, documentation
48
49 [autoconf]
50   Check in autoconf that no datatype is bigger than 64, or dynar_map will
51     get into trouble...
52
53 [portability layer]
54   Dynar of type, such as ref of type
55   Generate convertors in assembler ?
56   Mallocators
57   
58 [Messaging]
59   Message forwarding
60   Message priority
61   Message declarations in a tree manner
62   
63 [errors]
64   Better split casual errors from programing errors.
65     The first ones should be repported to the user, the second should kill
66     the program (or, yet better, only the msg handler)
67   Allows the use of an error handler depending on the current module (ie,
68    the same philosophy than log4c using GSL's error functions)
69   Rethink the error codes. Source of inspirations are:
70    - comerr (common error reporting from ext2)
71    - libgpg-error
72
73 [logs]
74   Several appenders; fix the setting stuff to change the appender
75   Hijack message from a given category to another for a while (to mask
76     initializations, and more)
77   Allow each process in simulation to have its own setting
78
79 [dict]
80   dichotomie in search
81   speed up the cursors, for example using the contexts when available
82   fix multi levels dicts
83
84 [datadesc]
85   Error handling in cbps
86   Regression tests of cbps
87
88 *********
89 * GRAS1 * Integrer grassouillet a gras; multiplexage XML; module de comm
90 *********
91
92 [simuler le select sur les sockets avec des threads]
93   Le plan, c'est qu'a l'ouverture d'une socket server, on cree un thread
94     charge de faire du pool blocant dessus, et des que ce thread se debloque
95     car il commence a lire qqch, il passe la main a un thread de
96     communication charge de faire la lecture. 
97   Quand la lecture est finie, le thread de comm passe la main aux threads
98     d'execution (un par couleur).
99     
100   Voici comment faire le coeur du truc [dixit Olivier]:
101     Une liste est utilisee pour stocker ce que le thread de comm a le droit
102       de lire. Elle est protegee par mutex pour eviter les acces concurents.
103       c'est la "liste de lecture"
104     Une semaphore "de lecture" est utilisee pour permettre aux threads
105       servants des sockets de prevenir le thread de comm qu'ils ont qqch
106       pour lui
107     Dans la liste de lecture, on place les messages en cours de creation, et
108       un ptit mutex pour que le thread de comm dise aux threads servants de
109       retourner ecouter la socket car il a fini
110     Chaque couleur a sa file de callback a appeller, proteger par semaphore
111       et un mutex comme pour la file de lecture
112     
113     Init:
114      initialisation de toutes les semaphore a 0
115      comm: sem_P(semaphore lecture)
116      couleur: sem_P(semaphore de la couleur correspondante)
117      servant: read (1) sur la socket
118      
119     Arrive d'un message
120      servant:
121      1) le read debloque (c'est la version de gras, utilisee pour multiplexe
122         sur le XML, ou sur les differentes versions de gras/de pilote reseau)
123      2) Allocation du message vide pour contenir ce qui s'annonce
124      3) initialisation du mutex du message_instance a 0 (verrouille)
125      4) placement du message instance dans la file (prise de mutex,
126         placement, lachage de mutex)
127      5) sem_V(sempahore)
128      6) mutex_lock sur le mutex_verrouille
129      sleep
130      7) quand on revient, on rebloque un read(1), et on recommence
131      
132      comm:
133      1) on se reveille quand la semaphore se libere (etape 6 des servants)
134      2) prise d'une tache dans la file (protegee par semaphore)
135      3) lecture de l'instance de message
136      4) lache le mutex dans l'instance pour liberer le servant
137      5) pose le message pret dans la file de la couleur correpondant au
138         premier callback de la pile pour ces {messageID x version} et
139         augmente le semaphore correspondant.
140      6) se rebloque sur le semaphore de lecture et recommence
141      
142      couleur:
143      1) on se reveille quand quelqu'un a pose qqch dans sa file des messages
144         prets
145      2) on le retire de la file
146      3) on acquiere le mutex d'execution de sa couleur (pour les callbacks
147         cameleon)
148      4) on execute le callback qu'il faut
149      5) on lache le mutex de sa couleur
150      Si le callback annonce avoir mange le message
151        a) on libere le message (le payload doit avoir ete libere par 
152           l'utilisateur)
153        b) on decremente le TTL du callback, et on le vire si c'etait pas un
154           callback infini et qu'il arrive en fin de vie
155      Sinon
156        a) on place le message dans la liste des messages de la couleur du
157           suivant dans la pile des callback
158      6) On se rendort sur le semaphore de sa couleur et recommence
159      
160     Emission d'un message:
161      A faire. Le thread de comm peut faire ceci, ou on peut faire un nouveau
162       thread de comm pour cela.
163      
164     Fermeture d'une socket client:
165      Probleme: faut tuer le thread servant.
166      Solution pour l'instant: fermer la socket depuis ailleurs.
167      Solution si ca marche pas (ou pas partout): Les servants font des
168       selects sur un pool {leur socket x un pipe fait pour}
169       Quand qqch arrive sur le pipe, c'est le signal du suicide.
170       
171 [Conversions inter-architectures]
172  Convert in the same buffer when size increase
173  Exchange structures in one shoot.
174  Port to really exotic platforms (Cray is not IEEE ;)
175  Generate the convertion functions in assembly, since we have a plenty of
176    time to waste.
177
178 [XML]
179  Do what is written in the paper
180
181 [Macro parseuse]
182  Gerer les typedefs (necessite de l'aide de grassouillet)
183  Gerer les unions => specifier des annotations, mais j'y crois pas
184  Gerer les enum
185  Gerer les long long
186  Gerer les types struct, union et enum anonymes au milieu d'un autre bloc de
187   donnees.
188  Verifier que "char"="signed char" sur toutes les archis
189  
190  Renomer gs_parse_tok_num en gs_parse_token
191  Check short a, b;
192  Check short ***
193  Check struct { struct { int a } b; }
194  
195 [Grassouillet]
196  Gerer les typedefs pour aliaser un type sur un autre
197  Merger gs_type_union_append_field et gs_type_struc_append_field si possible.
198  
199 [Autres]
200  Faire toutes les modifs aux Utils listees plus haut
201  Simplifier l'envoi de dynar et dico
202  Mettre les mutex et semaphores dans les dynar directement
203  Tenter (politiquement) le passage a GPL, pour voler du code.
204  
205
206 ************
207 * La suite *
208 ************
209 GRAS double (ou encore "GRAS too" ou "too GRAS"):
210  - Priorite des messages
211  - Outils de visu pour ce qui se passe dans le simulo
212  - Outils de visu/deployement/management pour RL
213    
214 GRAS (très):
215  - outils mathematiques pour dire des choses sur la validite du protocole
216