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 <jsquy...@open-mpi.org>:
> 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.

Reply via email to