Kelly's scalable TCP AIMD mods

We have implemented Tom Kelly's scalable TCP algorithm in ns-2, our TCP-over-UDP (atou), and as a tunable option per flow in the net100 kernel. Scalable TCP changes the algorithm to update TCP's congestion window to the following:

cwnd := cwnd + 0.01 for each ack received while not in loss recovery cwnd := 0.875 * cwnd on each loss event The user can select the multiplier and the additive constant. In our Net100 kernel implementation, the parameters can be configured on a per-flow basis and set dynamically by the WAD. The Net100 implementation does not include the legacy window threshold, or any of the NIC driver enhancements that Kelly includes in his Linux implementation.

The following graphs plot the TCP congestion window over time. Here are results from ns-2, with max cwnd of 3.5 M packets, RTT 140 ms, delayed ACKs, and Kelly values of (.125,.02). For comparison we include Floyd HS TCP and standard TCP. There is one packet dropped for each test.

For the cwnd value in the experiment above, Floyd's HS TCP selects a MD of 0.26 and AI of 17. Standard TCP uses an MD of 0.5 and AI of 1. For this CWND, Kelly's 0.02 is equivalent to an AI of 70.

For atou, these are tests over the real Internet from ORNL to LBL using different AIMD algorithms with a single packet drop.

Using our Net100 linux kernel, this is an iperf test from ORNL to CERN (RTT 150 ms) with a UDP burst used to induce loss after the TCP session has started. The linear recovery phase is under 3 s as predicted. Kelly's scalable TCP linux kernel patch includes several other "fixes", our Net100 scalalble TCP includes only our implementation of Kelly's AIMD modifications.

The data above was collected by a tracer daemon and the net100 kernel. The instrumented iperf also reported the following TCP variables at the end of the transfer:

[ 3] 0.0-10.2 sec 135 MBytes 111 Mbits/sec CongestionOve 1441 CongestionSig 4 CurCwnd 4344 CurMSS 1448 CurRwinRcvd 4716032 CurSsthresh 4128248 DSACKDups 84 DupAcksIn 2967 LimCwnd 5999064 LimRwin 65536 MaxCwnd 4717584 MaxRTT 2250 MaxRwinRcvd 4716032 MaxRwinSent 5840 MaxSsthresh 4128248 MinRTT 150 OtherReductio 1446 PktsOut 98894 PktsRetrans 930 RetranThresh 20 SACKEnabled 3 SACKsRcvd 3137 SampleRTT 150 SendStall 0 SmoothedRTT 150 SndLimTimeRwi 3453489 SndLimTimeCwn 6393123 SndLimTimeSen 217251 Timeouts 1 WinScaleRcvd 7 WinScaleSent 7 WAD_Kaicnt 50 CongAvoid 27464

Here are three independent tests with standard TCP (blue), with HS TCP (red) and scalable TCP (green) between ORNL and CERN using the Net100 linux kernel. A UDP blast causes loss and timeout. Note the effects of the different AIMD algorithms.

return to ORNL's Net100 page