Muhammad,
With regard to your question on migration you will likely have to
reload the BTL components when a migration occurs. Open MPI currently
assumes that once the set of BTLs are decided upon in a process they
are to be used until the application completes. There is some limited
support for failover in which if one BTL 'fails' then it is
disregarded and a previously defined alternative path is used. For
example if between two peers Open MPI has the choice of using tcp or
openib then it will use openib. If openib were to fail during the
running of the job then it may be possible for Open MPI to fail over
and use just tcp. I'm not sure how well tested this ability is, others
can comment if you are interested in this.
However failover is not really want you are looking for. What it seem
you are looking for is the ability to tell two processes that they
should no longer communicate over tcp, but continue communication over
xensockets or visa versa. One technique would be upon migration, if
unload the BTLs (component_close) then reopen (component_open) and
reselect (component_select) then reexchange the modex the processes
should settle into the new configuration. You will have to make sure
that any state Open MPI has cached such as network addresses and node
name data is refreshed upon restart. Take a look at the checkpoint/
restart logic for how I do this in the code base ([opal|orte|ompi]/
runtime/*_cr.c).
It is likely that there is another, more efficient method but I don't
have anything to point you to at the moment. One idea would be to add
a refresh function to the modex which would force the reexchange of a
single processes address set. There are a slew of problems with this
that you will have to overcome including race conditions, but I think
they can be surmounted.
I'd be interested in hearing your experiences implementing this in
Open MPI. Let me know if I can be of any more help.
Cheers,
Josh
On Mar 9, 2008, at 6:13 AM, Muhammad Atif wrote:
Okay guys.. with all your support and help in understanding ompi
architecture, I was able to get Xensocket to work. Only minor
changes to the xensocket kernel module made it compatible with
libevent. I am getting results which are bad but I am sure, I have
to cleanup the code. At least my results have improved over native
netfront-netback of xen for messages of size larger than 1 MB.
I started with making minor changes in the TCP btl, but it seems it
is not the best way, as changes are quite huge and it is better to
have separate dedicated btl for xensockets. As you guys might be
aware Xen supports live migration, now I have one stupid question.
My knowledge so far suggests that btl component is initialized only
once. The scerario here is if my guest os is migrated from one
physical node to another, and realizes that the communicating
processes are now on one physical host and they should abandon use
of TCP btl and make use of Xensocket btl. I am sure it would not
happen out of the box, but is it possible without making heavy
changes in the openmpi architecture?
With the current design, i am running a mix of tcp and xensocket
btls, and endpoints check periodically if they are on same physical
host or not. This has quite a big penalty in terms of time.
Another question is (good thing i am using email otherwise you guys
would beat the hell outta me, its such a basic question). I am not
able to track MPI_Recv(...) api call and its alike calls. Once in
the code of MPI_Recv(..) we give a call to rc =
MCA_PML_CALL(recv(buf, count ... ). This call goes to the macro, and
pml.recv(..) gets invoked (mca_pml_base_module_recv_fn_t
pml_recv;) . Where can I find the actual function? I get totally
lost when trying to pinpoint what exactly is happening. Basically, I
am looking for a place where tcp btl recv is getting called with all
the goodies and parameters which were passed by the MPI programmer.
I hope I have made my question understandable.
Best Regards,
Muhammad Atif
----- Original Message ----
From: Brian W. Barrett <brbar...@open-mpi.org>
To: Open MPI Developers <de...@open-mpi.org>
Sent: Wednesday, February 6, 2008 2:57:31 AM
Subject: Re: [OMPI devel] xensocket - callbacks through OPAL/libevent
On Mon, 4 Feb 2008, Muhammad Atif wrote:
> I am trying to port xensockets to openmpi. In principle, I have the
> framework and everything, but there seems to be a small issue, I
cannot
> get libevent (or OPAL) to give callbacks for receive (or send) for
> xensockets. I have tried to implement native code for xensockets
with
> libevent library, again the same issue. No call backs! . With
normal
> sockets, callbacks do come easily.
>
> So question is, do the socket/file descriptors have to have some
special
> mechanism attached to them to support callbacks for libevent/opal?
i.e
> some structure/magic?. i.e. maybe the developers of xensockets did
not
> add that callback/interrupt thing at the time of creation.
Xensockets is
> open source, but my knowledge about these issues is limited. So I
though
> some pointer in right direction might be useful.
Yes and no :). As you discovered, the OPAL interface just
repackages a
library called libevent to handle its socket multiplexing. Libevent
can
use a number of different mechanisms to look for activity on sockets,
including select() and poll() calls. On Linux, it will generally use
poll(). poll() requires some kernel support to do its thing, so if
Xensockets doesn't implement the right magic to trigger poll() events,
then libevent won't work for Xensockets. There's really nothing you
can
do from the Open MPI front to work around this issue -- it would
have to
be fixed as part of Xensockets.
> Second question is, what if we cannot have the callbacks. What is
the
> recommended way to implement the btl component for such a device?
Do we
> need to do this with event timers?
Have a look at any of the BTLs that isn't TCP -- none of them use
libevent
callbacks for progress. Instead, they provide a progress function
as part
of the BTL interface, which is called on a regular basis whenever
progress
needs to be made.
Brian
_______________________________________________
devel mailing list
de...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel
Be a better friend, newshound, and know-it-all with Yahoo! Mobile.
Try it now._______________________________________________
devel mailing list
de...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel