<HTML>
<HEAD>
<TITLE>Point-to-point Communications recovery</TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>(I am changing title to help keep track of discussions)<BR>
<BR>
  We have not yet started a specific discussion on what to do with communications when a process fails, so now seems as good a time as ever.  We also need to discuss what happens when we restart a process (i.e. do we call MPI_Init()), but we should do this in a separate thread).<BR>
<BR>
Keeping the focus on a single process failure, where we have a source and destination (failed process), I see two cases:<BR>
<BR>
</SPAN></FONT><UL><LI><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>we do not restore the failed process
</SPAN></FONT><LI><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>we do restore the failed process<BR>
</SPAN></FONT></UL><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'><BR>
The first case seems to be trivial:<BR>
  The destination is gone, so nothing to do there.<BR>
  Source: “flush” all communications associated the process that has failed.<BR>
<BR>
The second case:<BR>
  The destination just re-initialized it’s communications<BR>
  Source: “flush” all outstanding traffic to the destination (part of the repair() call, so negotiation can happen with the destination), and reset the internal point-to-point sequence number so that new traffic can be matched at the destination.<BR>
<BR>
This implies that layered s/w (application or middleware) would be responsible for regenerating any lost traffic, if this is needed.  Perhaps if would make sense to provide the ability for upper layers to register a recovery function that could be called after repair() is done with restoring MPI internal state.<BR>
<BR>
Greg, is the piggy-back capability you are asking for intended to help getting the application level communications reset to the state just before failure, so that the application can continue ?<BR>
<BR>
Rich<BR>
<BR>
<BR>
On 10/23/08 11:49 AM, "Greg Bronevetsky" <<a href="bronevetsky1@llnl.gov">bronevetsky1@llnl.gov</a>> wrote:<BR>
<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>There is one caveat here that we should be aware of. There is not efficient way to implement this if we want the sender of a message to be informed that the receiver has been reset because then every send becomes a send-receive, which will significantly reduce performance. However, if we're willing to wait until the process receives data from the reset process either directly or via some dependence through other processes, then all this can be implemented efficiently. <BR>
<BR>
Also, we should keep in mind that for some protocols we need both piggybacking and non-blocking collectives. The latter is to avoid race conditions where a process has begun a blocking collective call but needs to be informed of something having to do with the communication.<BR>
<BR>
Greg Bronevetsky<BR>
Post-Doctoral Researcher<BR>
1028 Building 451<BR>
Lawrence Livermore National Lab<BR>
(925) 424-5756<BR>
<a href="bronevetsky1@llnl.gov">bronevetsky1@llnl.gov</a><BR>
<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>If, as part of ft mpi, some piggy-back support is provided to the application,<BR>
then i don't think this behavior would need to be implemented in the<BR>
mpi library.<BR>
<BR>
Howard<BR>
<BR>
Richard Graham wrote: <BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>Can someone think of a reason to have the library do this over the app ?  I can see that letting the library do this will avoid potential race conditions that could arise if we let the app do this - basically out of band with respect to the expected communications traffic.<BR>
<BR>
Rich<BR>
<BR>
<BR>
On 10/21/08 11:52 PM, "Thomas Herault" <<a href="herault.thomas@gmail.com">herault.thomas@gmail.com</a> <<a href="herault.thomas@gmail.htm">herault.thomas@gmail.htm</a>> > wrote:<BR>
<BR>
<BR>
<BR>
Le 21 oct. 08 à 22:06, Howard Pritchard a écrit :<BR>
<BR>
> Hello Rich,<BR>
><BR>
> I thought it was also agreed that if process A communicates with <BR>
> failed process B<BR>
> which had been restarted by another process C, and this was the <BR>
> first communication<BR>
> from A to B since the restart of B, A would receive the equivalent <BR>
> of a ECONNRESET error.<BR>
> This was in the context of a case where option 5 below is not being <BR>
> used by the app.<BR>
><BR>
> Howard<BR>
><BR>
<BR>
Hello Howard,<BR>
<BR>
there was still some discussions about this at the end of the session.<BR>
<BR>
The argument is that the application could do as well as the library <BR>
to enforce this detection if this is needed: when a process is <BR>
launched to replace another one, it could define a new revision/epoch/<BR>
restart number and tag each communication with this number to <BR>
implement the check. If this can be done as efficiently by the <BR>
application as it would be done by the library, asking the application <BR>
to do it itself would help the library to avoid the additional cost <BR>
(i.e. piggybacking an integer to each message) when the application <BR>
does not need that functionality.<BR>
<BR>
It was suggested that the library could provide a generic mean to <BR>
piggyback this kind of information to each message, in a way similar <BR>
as what is discussed about piggyback/message logging-based fault <BR>
tolerance.<BR>
<BR>
Thomas<BR>
<BR>
> Richard Graham wrote:<BR>
>><BR>
>> Here is a summary of what I think that we agreed to today.  Please <BR>
>> correct any errors, and add what I am missing.<BR>
>><BR>
>>      • We need to be able to restore MPI_COMM_WORLD (and it’s <BR>
>> derivatives) to a usable state when a process fails.<BR>
>>      • Restoration may involve having MPI_PROC_NULL replace the lost <BR>
>> process, or may replaced the lost processes with a new process <BR>
>> (have not specified how this would happen)<BR>
>>      • Processes communicating directly with the failed processes will <BR>
>> be notified via a returned error code about the failure.<BR>
>>      • When a process is notified of the failure, comm_repair() must be <BR>
>> called.  Comm_repair() is not a collective call, and is what will <BR>
>> initiate the communicator repair associated with the failed process.<BR>
>>      • If a process wants to be notified of process failure even if it <BR>
>> is not communicating directly with this process, it must register <BR>
>> for this notification.<BR>
>>      • We don’t have enough information to know how to continue with <BR>
>> support for checkpoint/restart.<BR>
>>      • We need to discuss what needs to do with respect to failure of <BR>
>> collective communications.<BR>
>><BR>
>> There are several issues that came up with respect to these, which <BR>
>> will be detailed later on.<BR>
>><BR>
>> Rich<BR>
>><BR>
>> _______________________________________________<BR>
>> mpi3-ft mailing list<BR>
>> <a href="mpi3-ft@lists.mpi-forum.org">mpi3-ft@lists.mpi-forum.org</a> <<a href="mpi3-ft@lists.mpi-forum.htm">mpi3-ft@lists.mpi-forum.htm</a>> <BR>
>> <a href="http://">http://</a> <<a href="http:///">http:///</a>> lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft <<a href="http:///">http:///</a>> <BR>
>><BR>
><BR>
><BR>
> --<BR>
><BR>
> Howard Pritchard<BR>
> Cray Inc.<BR>
><BR>
> _______________________________________________<BR>
> mpi3-ft mailing list<BR>
> <a href="mpi3-ft@lists.mpi-forum.org">mpi3-ft@lists.mpi-forum.org</a> <<a href="mpi3-ft@lists.mpi-forum.htm">mpi3-ft@lists.mpi-forum.htm</a>> <BR>
> <a href="http://">http://</a> <<a href="http:///">http:///</a>> lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft <<a href="http:///">http:///</a>> <BR>
<BR>
<BR>
_______________________________________________<BR>
mpi3-ft mailing list<BR>
<a href="mpi3-ft@lists.mpi-forum.org">mpi3-ft@lists.mpi-forum.org</a> <<a href="mpi3-ft@lists.mpi-forum.htm">mpi3-ft@lists.mpi-forum.htm</a>> <BR>
<a href="http://">http://</a> <<a href="http:///">http:///</a>> lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft <<a href="http:///">http:///</a>> <BR>
<BR>
<BR>
<BR>
<BR>
<BR>
_______________________________________________<BR>
mpi3-ft mailing list<BR>
<BR>
<a href="mpi3-ft@lists.mpi-forum.org">mpi3-ft@lists.mpi-forum.org</a> <<a href="mailto:mpi3-ft@lists.mpi-forum.org">mailto:mpi3-ft@lists.mpi-forum.org</a>> <BR>
<a href="http://">http://</a> <<a href="http:///">http:///</a>> <BR>
<BR>
lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft <<a href="http:///">http:///</a>> <BR>
 <BR>
</SPAN></FONT></BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'><BR>
<BR>
</SPAN></FONT></BLOCKQUOTE></BLOCKQUOTE>
</BODY>
</HTML>