[rds-devel] Re: RDS ACKs

Zach Brown zach.brown at oracle.com
Wed Oct 31 09:43:10 PDT 2007


> So RDS has ACKs, correct? are they in the level of the transport (IB,
> TCP) or at the RDS level?

Yes, they're at the level of the transport.  The TCP RDS transport
derives them from TCP ACKs, it doesn't have explicit messages.  The IB
transport has explicit messages to indicate to the sender when a given
message is stable in the receiver's memory.

> If its in the transport, then I wanted to
> check with you first that the ACKs used by the IB code are --not-- for
> the sole purpose of software flow control, correct?

Correct.

> As Roland and other
> have commented in the past, this problem is not unique to IB RC
> programming, for example TCP also sends the ACK before the app consumes
> the data from the socket

The kernel software TCP stack doesn't send the ack before the message is
available to the app in memory.  This is what RDS is relying on the
transport to perform, *not* to get it all the way to the application.

RDS socket reliability rules are not like TCP or UDP socket reliability
rules.

> Are ACKs sent before the app consumed the data from the socket or after it?

*RDS* will stop trying to retransmit to a remote node once it gets an
ack.  It is up to the sending application's protocol to deal with
retransmissions if the remote receiver is restarted or the remote node
reboots.

This design comes straight from the Oracle DB networking guys.  I'm not
the best person to defend the design, though I can certainly share my
understanding of it and how the RDS kernel code is built for it.

- z



More information about the rds-devel mailing list