Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

From: Gleb Natapov (glebn_at_[hidden])
Date: 2007-05-18 04:51:07


On Thu, May 17, 2007 at 10:20:35AM -0600, Brian Barrett wrote:
> On the other hand, since the MPI standard explicitly says you're not
> allowed to call fork() or system() during the MPI application and
> sense the network should really cope with this in some way, if it
> further complicates the code *at all*, I'm strongly against it.
> Especially since it won't really solve the problem. For example,
> with one-sided, I'm not going to go out of my way to send the first
> and last bit of the buffer so the user can touch those pages while
> calling fork.
>
> Also, if I understand the leave_pinned protocol, this still won't
> really solve anything for the general case -- leave pinned won't send
> any data eagerly if the buffer is already pinned, so there are still
> going to be situations where the user can cause problems. Now we
> have a situation where sometimes it works and sometimes it doesn't
> and we pretend to support fork()/system() in certain cases. Seems
> like actually fixing the problem the "right way" would be the right
> path forward...

This will not solve all the problems, it just slightly decries a chance
of a program to get SIGSEGV. We will not going to pretend that we
support fork() or system(). Obviously this change will not help to one
sided, leave_pinned or leave_pinned_pipeline cases. About "complicating
the code" issue I am working on solving deadlock in pipeline protocol
and for this I need a capability to send any part of a message by copy
in/out. The change I propose will be trivial to do on top of this. The
code will be more complex because of deadlock issues and not because of
the change we discuss now :)

>
> Brian
>
> On May 17, 2007, at 10:10 AM, Jeff Squyres wrote:
>
> > Moving to devel; this question seems worthwhile to push out to the
> > general development community.
> >
> > I've been coming across an increasing number of customers and other
> > random OMPI users who use system(). So if there's zero impact on
> > performance and it doesn't make the code [more] incredibly horrible
> > [than it already is], I'm in favor of this change.
> >
> >
> >
> > On May 17, 2007, at 7:00 AM, Gleb Natapov wrote:
> >
> >> Hi,
> >>
> >> I thought about changing pipeline protocol to send data from the
> >> end of
> >> the message instead of the middle like it does now. The rationale
> >> behind
> >> this is better fork() support. When application forks, child doesn't
> >> inherit registered memory, so IB providers educate users to not touch
> >> buffers that were owned by the MPI before fork in a child process.
> >> The
> >> problem is that granularity of registration is HW page (4K), so last
> >> page of the buffer may contain also other application's data and user
> >> may be unaware of this and be very surprised by SIGSEGV. If pipeline
> >> protocol will send data from the end of a buffer then the last
> >> page of
> >> the buffer will not be registered (and first page is never registered
> >> because we send beginning of the buffer eagerly with rendezvous
> >> packet)
> >> so this situation will be avoided. It should have zero impact on
> >> performance. What do you think? How common for MPI applications to
> >> fork()?
> >>
> >> --
> >> Gleb.
> >> _______________________________________________
> >> devel-core mailing list
> >> devel-core_at_[hidden]
> >> http://www.open-mpi.org/mailman/listinfo.cgi/devel-core
> >
> >
> > --
> > Jeff Squyres
> > Cisco Systems
> >
> > _______________________________________________
> > devel mailing list
> > devel_at_[hidden]
> > http://www.open-mpi.org/mailman/listinfo.cgi/devel
>
> _______________________________________________
> devel mailing list
> devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/devel

--
			Gleb.