175 | | Dans un cluster Z, propriétaire d’un processus P, le noyau peut décider d’invalider une entrée d’une PT(P,Z). |
176 | | Cela peut se produire par exemple en cas de pénurie de mémoire dans le cluster Z, ou simplement en cas de munmap(). |
177 | | Sauf si le vseg concerné est de type STACK, l’entrée invalidée dans la PT(P,Z) doit aussi être invalidée |
178 | | dans les PT(P,K) des autre clusters. |
179 | | Pour ce faire, le noyau du cluster Z doit broadcaster une PT_INVAL_BCRPC vers tous les autres clusters actifs de P. |
| 175 | In a cluster Z, owner of process P, the kernel can invalidate an entry of PT(P,Z). |
| 176 | It can occur in case of a lack of memory in cluster Z for example, or more simply in case of a munmap(). |
| 177 | If the vseg concerned is a STACK vseg, the invalidated entry in PT(P,Z) must also be invalidated in the PT(P,K) of all other clusters. |
| 178 | To do so, the kernel of cluster Z has to broadcast a PT_INVAL_BCRPC to all other active clusters of P. |
183 | | Dans une RPC broadcast, tous les clusters destinataires doivent signaler la terminaison en incrémentant de façon atomique un compteur de réponses, qui est scruté par le cluster initiateur. |
| 182 | In a broadcast RPC, all recipient clusters have to signal the termination by atomically incrementing a response couner, which is polled by the initiator cluster. |
| 183 | To reduce the number of receivers, a process P descriptor of owner cluster Z can keep four variables XMIN, XMAX, YMIN, YMAX defining the minimal rectangle covering all active clusters of P at any time. |
| 184 | In this case, a broadcast RPC has to be sent only to (XMAX - XMIN + 1) * (YMAX - YMIN +1) recipients. |
| 185 | These variables are updated upon each thread creation. |
190 | | == __7 ) Optimisation du traitement des défauts de page__ == |
191 | | |
192 | | Pour 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 utiliser 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 initié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 remote_read(). Il garantit que le PT_INVAL_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_RPC. |
193 | | |
| 189 | To reduce the number of RPC triggered by page faults, the kernel of a cluster X detecting a page fault can use a remote_read() in the PT(P,Z) table of the reference cluster insteadof a PT_MISS_RPC. |
| 190 | In this case, however, a multi-reader lock must be used in order to avoid an inconsistent state in cas of a PT_INVAL_BC_RPC simultaneous transaction initiated by cluster Z. |
| 191 | This lock must be systematically taken by the owner cluster before a PT_INVAL_BC_RPC and by the other clusters before a remote_read(). |
| 192 | It ensures that a PT_INVAL_RPC should be launched only after the termination of all current remote_read(). |
| 193 | It guarantees that no new remote_read() will be accepted before the completion of the PT_INVAL_RPC. |