[openib-general] RFC on SDP checkin
Libor Michalek
libor at topspin.com
Thu Feb 10 19:09:04 PST 2005
On Fri, Feb 04, 2005 at 01:26:32PM -0800, Tom Duffy wrote:
> On Fri, 2005-02-04 at 11:42 -0800, Libor Michalek wrote:
> > You mean a quick description of the code, like the primary contents of
> > each file and how to get it to do something ?
>
> That would be great start.
OK, I've gone with option number 3. Here is a one or two line
description of each file, and a TODO list. Both are checked in
along with the code in the infiniband/ulp/sdp directory.
-Libor
FILES
-----
sdp_advt.[ch] - Data structure.
RDMA advertisments representing remote IOCBs. Used to
track RDMA read and write requests initiated in the data
path.
sdp_actv.c - Control path.
Active connection establishment interface to Connection
Manager.
sdp_buff.[ch] - Data structure.
Global pool of buffers used for data and control messages.
sdp_conn.[ch] - Data structure.
Connection data, including all state and information.
Global connection tables.
sdp_event.c - Control and Data path.
Event notification for Connection Manager state changes.
Completion Queue notification.
sdp_inet.c - Control path.
Interface to Linux AF_INET/SOCK_STREAM sockets.
sdp_iocb.[ch] - Data structure.
RDMA IO control structure representing local buffers which
can be used as RDMA targets by the remote connection peer
for RDMA read and write requests.
sdp_kvec.c - AIO IOCB cancellation code. (TODO)
sdp_link.c - Control path.
Active connection establishment interface to Address
Resolution and Path Record lookups.
sdp_pass.c - Control path.
Passive connection establishment interface to Connection
Manager.
sdp_post.c - Control path.
Requests made to Connection Manager common for active
and passive connections.
sdp_proc.[ch] - Misc.
Linux /proc filesystem interface for reporting internal
state to userspace.
sdp_queue.[ch] - Data structure.
Generic FIFO/LILO queue and element definition used for
BUFF, ADVT, and IOCB data structures.
sdp_rcvd.c - Data path.
Process receive CQ notifications. Member of the receive
half of the data path.
sdp_read.c - Data path.
Process send CQ RDMA Read notifications. Member of the
receive half of the data path.
sdp_recv.c - Data path.
Member of the receive half of the data path. Processes data
from upper OS interface to the posting of buffers to a QPs
receive or send WQ.
sdp_send.c - Data path.
Member of the send half of the data path. Processes data from
upper OS interface to the posting of buffers to a QPs send WQ.
sdp_sent.c - Data path.
Process send CQ notifications. Member of the send half of
the data path.
sdp_wall.c - Control path.
Transition between Operating specific state and protocol
control state. (TODO)
sdp_write.c - Data path.
Process send CQ RDMA Write notifications. Member of the
send half of the data path.
sdp_buff_p.h - Data structure.
Global pool of buffers.
sdp_dev.h - Misc.
Global definitions for limits and constants
sdp_main.h - Misc.
Top level SDP include.
sdp_msgs.h - Data structure.
IBTA specification SDP messages and headers.
sdp_proto.h - Misc.
Function prototype definitions.
TODO
----
SDP
- Cosmetic cleanup as needed.
- Reduce connection state machine complexity. Specifically there exists
redundant tracking of connection state which should be merged for
improved readability and maintainability.
- Add full connection cleanup once Connection Manager IDLE is in place.
- Reduce code bloat.
- Enable FMRs once mthca support is provided.
- Provide real support for SO_{RCV,SND}BUF
- internal posted buffers
- QP WQ size
- CQ size
- Create slow start algorithm for posted receive buffers to improve
memory consumption in large connection count applications, especially
for connections that are predominately sending data.
- sdp_link needs locking protection.
- sdp_link request cancellation support.
- SDP RDMA support for blocking socket operations.
- IPv6 addressing
- Alternate Path Migration (APM) support.
- Keepalive (zero byte RDMA write)
- Socket duplication (i.e. suspend)
Possible Issues
- SDP address resolution requires looking at the IPoIB device's private
data structure inorder to determine interface's SGID, Port, and PKey.
- Memory locking for AIO requires a call to do_mlock() which is not a
kernel exported function, the method for calling the function is not
standard.
Other
- Kernel level transparent socket switch for dynamic TCP/SDP selection.
(Possible SDP port mapper protocol from RDMAC)
- Extended Sockets API (ES-API). Initial Linux AIO based implemetation?
- New SOCK_DGRAM protocol?
- NFS over SDP.
- QP striping?
More information about the general
mailing list