[e2e] Unexpected small reduction in cwnd during iperf test

Xiaoliang (David) Wei weixl at caltech.edu
Tue Aug 8 12:58:51 PDT 2006

Hi Toby,

> Can anyone think in what circumstances a TCP instance might reduce cwnd
> by a small amount, without there being any change in ssthresh?  I
> detected this with a script that periodically (every 0.25 seconds)
> collects TCP stats.  The TCP transfer in question was an iperf test
> running between a measurement point in a New York PoP and
> another in Budapest.  netstat (run before and after the test) confirms
> that there was no packet loss, but there were two re-transmitted

I wonder how netstat could tell if there is packet loss? You mean "no packet 
loss at the local NIC?"

> Time (s)
> 15.50 cwnd:5931 ssthresh:4740
> 15.75 cwnd:5931 ssthresh:4740
> 16.00 cwnd:5931 ssthresh:4740
> ...
> 23.75 cwnd:5931 ssthresh:4740
> 24.00 cwnd:5926 ssthresh:4740 <==GLITCH?

as the cwnd before this glitch has been kept to 5931 unchanged for several 
RTTs (I assume the RTT in your case is in the order of 100ms across the 
Atlantic), I guess one possibility is that there is some ack packet 

In this case, Linux TCP enters Disorder state. Since ack is not in order and 
no SACK (since only ack is disordered), the sender cannot send any new 
packets and the actually number of packets in flight keep decreasing. When 
the inorder ack comes back finally, the number of packets in flight is 
several packets smaller than congestion window. Upon the arrival of this 
in-order ack comes, sender exists Disorder state and the tcp_moderate_cwnd 
is called, reducing the congestion window to be # of packets in flight plus 

just one explanation... not sure if it is of your case. More measurements on 
the TCP congestion avoidance state is helpful, I think. Or, if the 
experiment is repeatable and you could have the tcpdump trace during this 
events, it is also helpful.

> 24.25 cwnd:5927 ssthresh:4740
> 24.50 cwnd:5928 ssthresh:4740
> 24.75 cwnd:5929 ssthresh:4740
> 25.00 cwnd:5930 ssthresh:4740
> 25.25 cwnd:5931 ssthresh:4740
> 25.50 cwnd:5931 ssthresh:4740
> The hosts are both Linux kernel's 2.6.13, using BIC congestion control.

Xiaoliang (David) Wei
http://davidwei.org    Graduate Student, Netlab, Caltech

More information about the end2end-interest mailing list