Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

From: Leslie Watter (watter_at_[hidden])
Date: 2006-01-05 11:13:27


Hi Jeff, Hi all,

The build system, at least, those things I've discovered, is very good,
isolating every part of the subsystems (BTL, OPAL, and so on)... Perhaps an
experience with autoconf and automake before this project make me fell
comfortable with it.

Some information that I'm looking for is about the BTL subsystem.
I'm trying to understand what's the path of the TCP BTL code and how to
replicate this path to the new implementation of LLC.

That's because these implementation of LLC acts like a stream socket, which TCP
is the better example I have ;-)

Let me explain what I'm looking for: In btl.h we have some comments about the
inicialization, selection and progress process envolving the entire BTL, but
I've not found what's the functionality needed to implement a minimal BTL
module. Understanding this I can understand the whole work done by BTL.

What I need? To know how and what functions is necessary to perform a minimalist
implementation of a new btl, registering it and make it usable.

As I've said in another email, I'm basing mine LLC BTL code on the TCP BTL code,
then the following examples/questions will came from the TCP code.

Trying to understand the whole sequence (initialization, selection, progress and
finalization) I've found the following sequence of functions (in TCP) that I've
separated in the above parts: (please, fell free to correct, I'm just pointing
what I've experienced):

1) Inicialization

component open
component init
component create instances
btl tcp create
component create_listen
btl tcp setsocket options
component exchange

btl tcp add procs
endpoint construct ( executed * number of endpoints )
btl tcp del procs
btl tcp register

1.2) component exchange ???

_____________server? side:
btl tcp alloc
btl tcp send
endpoint send
endpoint start connect
btl tcp setsock options
*_*
endpoint send handler
endpoint complete connect
endpoint send connect ack
endpoint send blocking
endpoint recv handler
endpoint recv connect ack
endpoint recv blocking
endpoint connected

_____________client? side:
component recv_handler
component accept
btl tcp setsock options
btl tcp recv handler
endpoint accept
endpoint close
endpoint send connect ack
endpoint send blocking
endpoint connected

1.3) ring stablished, component exchange

_____________server? side
_loop
endpoint send handler
btl tcp frag send
endpoint recv handler
btl tcp frag recv
_until process end, goto loop

_____________client? side:
_loop
endpoint recv handler
btl tcp frag receive
btl tcp alloc
btl tcp send
endpoint send
_until process end, goto loop

2. transfering data from one node to another

2.1 tcp packet?? send
_start
btl tcp prepare src
btl tcp send
endpoint send
btl tcp frag send
btl tcp free
_end

2.2 tcp packet?? receive
_start
endpoint recv handler
btl tcp frag receive
_end, looping until packet ends

3)ending connections

_____________ both sides
btl tcp finalize
_loop
endpoint close
endpoint destruct
_goto loop until there is no endpoint to close
component close

This is the sequence I have found executing the TCP BTL code. Please fell free
to correct the place of sections.

I'm experiencing some problems with LLC code that can be watched if I know in
which order the code of BTL TCP occurs.

Many Thanks, and sorry by the long mail,

Cheers,

LEslie

2006/1/3, Jeff Squyres <jsquyres_at_[hidden]>:
> In addition to what Brian said, do you have any specific questions
> about Open MPI's build system, the BTL, etc.?
>
> More specifically: feel free to ping us here about code-level kinds
> of questions.