On Wednesday, July 31, 2013 at 11:50 AM, George Bosilca wrote:
On Tue, Jul 30, 2013 at 10:47 PM, Pavan Balaji <balaji@mcs.anl.gov> wrote:Hmm. Yes, you are right. Generating different per-process rkeys is anoption on IB. Though that's obviously less scalable than a single rkey andhurts performance too because a new rkey has to be generated for eachprocess. Even more of a reason for FT to have a requested/provided optionlike threads.I fail to understand the scenario allowing you to reach such aconclusion. You want to have an MPI_RECV with a buffer where multiplesenders can do RMA operations. The only way this can be done in thecontext of the MPI standard is if each of the receives on thisparticular buffer are using non-contiguous datatypes. Thus, unlikewhat you suggest in your answer above, this is not hurting performanceas you are already in a niche mode (I'm not even talking about thefact that usually non-contiguous datatypes conflicts with RMAoperations). Moreover, you suppose that the detection of a deadprocess and the re-posting of the receive buffer can happen fasterthan an RMA message cross the network. The only potential case wheresuch a scenario can happen is when multiple paths between the sourceand the destination exist, and the failure detection happen on onepath while the RMA message took another one. This is highly improbablein most cases.
There are too many ifs in this scenario to make it plausible. Even ifwe suppose that all those ifs will be true, as Rich said, this is anissue of [quality of] implementation not MPI standard. A high qualityMPI implementation will delay reporting the process failure error onthat particular MPI_RECV until all possible RMA from the dead processwere either discarded by the network, or written to the memory.However, please also think about this problem for other networks that mightnot have such hardware protection capabilities (K Computer comes to mind).K computer ? My understanding is that there are such capabilities inthe TOFU network. I might be wrong thou, in which case I woulddefinitively appreciate if you can you pinpoint me to alink/documentation that proves your point?Maybe they cannot provide MPI-specified FT, and that would be fine.Not really, FT can be supported without overhead for the normalexecution even for the types of netwrok you mention. The solution Ipresented above, uses the timeouts of the network layer to ensure nodelivery can occur after the error reporting, by delaying the errorreporting until all timeout occurred. Trivial to implement, andwithout impact on the normal execution path.Thanks,George.-- PavanOn 07/30/2013 02:59 PM, Sur, Sayantan wrote:Hi Wesley,Looks like your attachment didn’t make it through. Using IB, one cangenerate rkeys for each sender and just invalidate the key for theobserved failed process. HW can just drop the “slow” message when itarrives. I’m assuming that generating keys should be fast in the futuregiven that recently announced HW/firmware has support for on-demandregistration. In any case, it is not a restriction of IB per se.Thanks,Sayantan[mailto:mpi3-ft-bounces@lists.mpi-forum.org] *On Behalf Of *Wesley Bland*Sent:* Tuesday, July 30, 2013 11:04 AM*To:* MPI3-FT Working Group*Subject:* [Mpi3-ft] Problem with reusing rendezvous memory buffersPavan pointed out a problem to me yesterday related to memory buffersused with rendezvous protocols. If a process passes a piece of memory tothe library in an MPI_RECV and the library gives that memory to thehardware, where it is pinned, we can get into trouble if one of theprocesses that could write into that memory fails. The problem comesfrom a process sending a slow message and then dying. It is possiblethat the other processes could detect and handle the failure before theslow message arrives. Then when the message does arrive, it couldcorrupt the memory without the application having a way to handle this.My whiteboard example is attached as an image.We can't just unmap memory from the NIC when a failure occurs becausethat memory is still being used by another process's message. Somehardware supports unmapping memory for specific senders which wouldsolve this issue, but some don't, such as InfiniBand, where the memoryregion just has a key and unmapping it removes it for all senders.This problem doesn't have a good solution (that I've come up with), butI did come up with a solution. We would need to introduce another errorcode (something like MPI_ERR_BUFFER_UNUSABLE) that would be able to tellthe application that the buffer that the library was using is no longerusable because it might be corrupted. For some hardware, this wouldn'thave to be returned, but for hardware where this isn't possible, thelibrary could pass this error to the implementation to say that I need anew buffer in order to complete this operation. On the sender side, theoperation would probably complete successfully since to it, the memorywas still available. That means that there will be some rollbacknecessary, but that's up to the application to figure out.I know this is an expensive and painful solution, but this is all I'vecome up with so far. Thoughts from the group?Thanks,Wesley_______________________________________________mpi3-ft mailing list--Pavan Balaji_______________________________________________mpi3-ft mailing list_______________________________________________mpi3-ft mailing list