[mpiwg-ft] MPI_Comm_revoke behavior
Wesley Bland
wbland at mcs.anl.gov
Sun Dec 8 19:31:14 CST 2013
Obviously there are various optimizations you can use if you know there will be more of fewer communicators, but in the general case, you need to include the incarnation number in the matching scheme and pick the maximum of the remaining processes. In reality, based on the way MPICH does it, if you free your communicator after you revoke it, this isn't really a problem unless you have lots and lots of transient failures.
There are other ways you can do it. You can check to see if the process that sent the message is actually in the communicator. You can just throw away the context id if you aren't going to have many. You can just keep iterating the incarnation number if you aren't going to try to handle so many failures that you overflow you data type.
Wesley
> On Dec 8, 2013, at 7:14 PM, Jim Dinan <james.dinan at gmail.com> wrote:
>
> Hi Guys,
>
> Thanks for the detailed responses (and sorry for going off-topic).
>
> Does the incarnation number have to be included in matching?
>
> I assume that we would need to track an incarnation number for each context ID. When creating a communicator, we can't guarantee that you'll get the same incarnation number everywhere for a given Context ID. Do you select the highest incarnation number from among the processes involved? I assume the incarnation counter is meant to be monotonic increasing -- what happens when it reaches its maximum value?
>
> ~Jim.
>
>
>> On Thu, Dec 5, 2013 at 1:55 PM, Wesley Bland <wbland at mcs.anl.gov> wrote:
>> Yes you can free the revoked communicator so you can also reuse the context id. There are a few ways you can handle this. One is to add an incarnation number to the communicator or process (which is the route chosen by the UTK ULFM implementation). Another is that once you know a process has failed, you ignore all future messages from that process (this causes issues if you want to deal with transient failures, but we’ve defined the scope of the work to exclude those). I’m sure there are more, possibly cleverer ways of solving this but those came to mind first.
>>
>> Wesley
>>
>>
>>> On Dec 5, 2013, at 12:39 PM, Jim Dinan <james.dinan at gmail.com> wrote:
>>>
>>> This is a little off-topic from the current discussion -- can revoking communicators could lead to leaking context IDs? After revoking a communicator, can you safely free it and then reuse the same context ID without concerns about erroneous messages arriving with that context ID? Or is that context ID dead for the remainder of the execution?
>>>
>>> ~Jim.
>>>
>>>
>>>> On Thu, Dec 5, 2013 at 10:49 AM, Wesley Bland <wbland at mcs.anl.gov> wrote:
>>>> I think there’s still confusion here between the current FT proposal and the roadmap for previous proposals. I think the previous proposal was designed to be a stopgap solution that would allow MPI to stabilize, but not necessarily fully recover without a lot of work. The current proposal provides all the tools necessary for both stabilization and recovery. Thus we haven’t been discussing the “next step”, because I think most of us see the next step not as a standardization effort for failure recovery, but something outside of the standard such as the libraries that will make FT easier to use.
>>>>
>>>> It’s true that MPI_COMM_REVOKE will make a current communicator unusable for further communication. Period. However, you can still query all of the local data about the communicator (rank, size, topology, info keys, etc.) to allow you to reconstruct a new communicator. That reconstruction is very much possible with the current proposal. It’s obviously not cheap, but I think we all know that FT recovery isn’t necessarily cheap. I think somewhere along the way we even had an example of how you could reconstruct a communicator with processes retaining their original ranks (though if you’re not going to replace the failed processes, I’m not sure what use it is to retain your rank since your algorithm will need to be able to handle such things anyway).
>>>>
>>>> MPI_COMM_REVOKE is the mechanism by which a process notifies other ranks of errors. No user-level protocol is necessary, though there are specific cases where a user-level solution might be a better solution depending on the communication patter. When you call MPI_COMM_REVOKE, you give up on any remaining (incoming) traffic that’s outstanding on the communicator. For remote processes, they too will not receive any messages after they return the error code MPI_COMM_REVOKED. This doesn’t preclude them from delaying reporting MPI_ERR_REVOKED while they flush any messages that have already been received, however, once the error code is returned, the communicator is dead. Users have to be able to reason about this and I don’t think it’s entirely unclear. Once revoke is called, that communicator is hosed. You can create a new communicator and use it to decide what’s necessary to recover your application (algorithm state, data repair, etc.). That’s the guarantee that users get: once the communicator is revoked, all messages/requests that have not been received are cancelled and will never be completed. Any other guarantee invites lots of trouble as you have to deal with race conditions involving who receives the revoke notification before any other messages and whether or not all of the links necessary to complete a message transfer are still available. The entire point of the REVOKE call is a last resort operation to prevent deadlock. It’s entirely possible that an application won’t need to use the revoke if there aren’t complex communication dependencies. It may be possible to take care of things at the user level in a way that’s cheaper than using REVOKE.
>>>>
>>>> The entire basis of this proposal is that we can’t provide a fault tolerance solution that will cheaply stabilize MPI, repair communicators, and notify all processes of failures. It’s possible to do all of these things in a way that’s not outrageously expensive, but they require cooperation from the application's perspective (or libraries that act on the application’s behalf). It’s possible to do many of those things, but they are so costly that they would never be approved. It’s much more effective to do them on top of MPI. We’re just providing the low level tools necessary to make it happen.
>>>>
>>>> Wesley
>>>>
>>>>> On Dec 5, 2013, at 8:14 AM, Richard Graham <richardg at mellanox.com> wrote:
>>>>>
>>>>>
>>>>>
>>>>> From: mpiwg-ft [mailto:mpiwg-ft-bounces at lists.mpi-forum.org] On Behalf Of George Bosilca
>>>>> Sent: Wednesday, November 27, 2013 3:35 PM
>>>>> To: MPI WG Fault Tolerance and Dynamic Process Control working Group
>>>>> Subject: Re: [mpiwg-ft] MPI_Comm_revoke behavior
>>>>>
>>>>>
>>>>> On Nov 27, 2013, at 20:54 , Richard Graham <richardg at mellanox.com> wrote:
>>>>>
>>>>>
>>>>> On Nov 27, 2013, at 20:33 , Richard Graham <richardg at mellanox.com> wrote:
>>>>>
>>>>>
>>>>>
>>>>> I am thinking about the next step, and have some questions on the semantics of MPI_Comm_revoke()
>>>>>
>>>>> What next step are you referring to?
>>>>> [rich] To the full recovery stage. Post what we are talking about now.
>>>>>
>>>>> Full recovery stage? Can you expose a little more details here please.
>>>>> [rich] the original intent was to allow for full restoration of communicators after failure, with minimal impact on those ranks that did not fail (don’t want to get into what that means now …). Those goals were reduced for pragmatic reasons. I want to make sure that when/if there is work continued in this direction, the current proposal does not preclude this. One of the issues raised to me recently is that after a revoke one will not be able to accomplish such a goal on the remaining ranks – e.g., ranks will be reassigned. I am following up very specifically on this question.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> - When the routine returns, can the communicator ever be used again ? If I remember correctly, the communicator is available for point-to-point traffic, but not collective traffic – is this correct ?
>>>>>
>>>>> A revoked communicator is unable to support any communication (point-to-point or collective) with the exception of agree and shrink. If this is not clear enough in the current version of the proposal we should definitively address it.
>>>>> [rich] does this mean all current state (aside from who is alive) associated with the communicator is gone ?
>>>>>
>>>>> Every deterministic information is still available (info and attributes). You can look for the group of processes associated with the communicator, as well as the group of failed. If what you are looking for is the possible unexpected messages, this is up to the implementation (see below).
>>>>> [rich] don’t understand
>>>>>
>>>>> Can’t rely on continuing sending pending messages ?
>>>>>
>>>>> Not on a revoked communicator. If continuing to exchange messages is a requirement, the communicator should not be revoked.
>>>>> [rich] How does one then notify other ranks of the errors – does this have to be a user-level protocol ?
>>>>>
>>>>>
>>>>> Looking forward, if one wants to restart the failed ranks (let’s assume we add support for this), what can be assume about the “repaired” communicator ? What can’t I assume about this communicator ?
>>>>>
>>>>> What you can assume depends on what is the meaning of “repaired”. Already today one can spawn new processes and reconstruct a communicator identical to the original communicator before any fault. This can be done using MPI dynamics together with the agreement available in the ULFM proposal.
>>>>> [rich] This implies that all outstanding traffic is flushed – is this correct ?
>>>>>
>>>>> This is up to the MPI implementation. This is specified on the first “Advice to implementors” on the second page.
>>>>> [rich] does not seem like a good idea – users should have guarantees on what they get if they use MPI.
>>>>>
>>>>> George.
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> mpiwg-ft mailing list
>>>>> mpiwg-ft at lists.mpi-forum.org
>>>>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-ft
>>>>
>>>>
>>>> _______________________________________________
>>>> mpiwg-ft mailing list
>>>> mpiwg-ft at lists.mpi-forum.org
>>>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-ft
>>>
>>> _______________________________________________
>>> mpiwg-ft mailing list
>>> mpiwg-ft at lists.mpi-forum.org
>>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-ft
>>
>>
>> _______________________________________________
>> mpiwg-ft mailing list
>> mpiwg-ft at lists.mpi-forum.org
>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-ft
>
> _______________________________________________
> mpiwg-ft mailing list
> mpiwg-ft at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-ft
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpi-forum.org/pipermail/mpiwg-ft/attachments/20131208/b856cd24/attachment-0001.html>
More information about the mpiwg-ft
mailing list