[saga-rg] Meeting Notes: Messaging API

Andre Merzky andre at merzky.net
Tue Nov 22 15:01:08 CST 2005


Hi, 

these are notes from the ad-hoc meeting at SC-05 about a
message oriented communication API.  The API might be
considered for inclusion at into the GGF SAGA API spec at
some point - for now it is only supposed provide coherent
discussion  and development in the interested groups.

As a reminder, material about saga can be found at:

  http://wiki.cct.lsu.edu/saga/


Meeting Participants:
---------------------

  - Jason Leigh (EVL)
  - Venkatram Vishwanath (EVL)
  - Andrei Hutany (LSU)
  - John Shalf (LBNL)
  - Andre Merzky (VU/LSU)

Definition:
-----------

  Message: chunk of data which is potentially larger than a
           network package.

Several independend sets for property flags have been
identified:

  Reliability Requirements:
  - - - - - - - - - - - - - 
  
    - Reliable     all messages are received exactly once. If 
                   received, messages are complete
    - Unreliable   messages are either received or not.  If
                   received, messages are complete
    - AtLeastOnce  optional, as for Reliable, but  messages 
                   can be received more than once
  
  Correctness Requirements:
  - - - - - - - - - - - - - 
    
    - ByteErrors   received messages MAY      contain byte errors
    - NoByteErrors received messages MUST NOT contain byte errors
  
  
  Ordering Requirement:
  - - - - - - - - - - - 
  
    - Ordered      messages MUST be received in order
    - NotOrdered   messages MAY be received out of order


API considerations:
-------------------

  - it was felt that a BSD like connection setup is most
    useful
  - asynchroneous recieving of complete messages is needed
    (viz use cases!)
  - striping/multicasting on application level is not
    considered for now (multiple senders/receivers)
    
  
API proposal:
-------------

  - establish connection:

    - bsd like: listen/accept/connect
    - port range should be specifiable
    - properties should be specified as flags (changable at
      runtime)
   
  - write:
    write (buffer, size, BLOCK | NO_BLOCK)
    message is written completely or not at all (if possible)
    
  - read: two step mechanism:
    (int   handle, int size) = query_size ();
    (char* buffer)           = read (handle, size);

    - handle can be zero, if size is known (one step read)
    - buffer needs to be allocated by application.  
    - if size is zero, the buffer is allocated by the
      implementation and returned to be freed by the
      application (one step read)
    - if size is smaller then the real message size, message
      gets truncated, remainder gets lost (read again not
      possible)
    - if size is larger, buffer gets patted by 0

  - asynchroneous method calls:

    - as in the SAGA task model, with callbacks

  - connection shutdown:

    - as in bsd (close ())



Please feel free to send corrections, comments etc.

Thanks, Andre.
    

-- 
+-----------------------------------------------------------------+
| Andre Merzky                      | phon: +31 - 20 - 598 - 7759 |
| Vrije Universiteit Amsterdam (VU) | fax : +31 - 20 - 598 - 7653 |
| Dept. of Computer Science         | mail: merzky at cs.vu.nl       |
| De Boelelaan 1083a                | www:  http://www.merzky.net |
| 1081 HV Amsterdam, Netherlands    |                             |
+-----------------------------------------------------------------+





More information about the saga-rg mailing list