tcp: tcp_vegas cong avoid fix
authorDoug Leith <doug.leith@nuim.ie>
Tue, 9 Dec 2008 08:13:04 +0000 (00:13 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 9 Dec 2008 08:13:04 +0000 (00:13 -0800)
commit8d3a564da34e5844aca4f991b73f8ca512246b23
tree9cff1e4a8c5feb4c76a360e782c3598355d78492
parent8c83f80b2d335176f72d8729fe1dfe19c5812cb1
tcp: tcp_vegas cong avoid fix

This patch addresses a book-keeping issue in tcp_vegas.c.  At present
tcp_vegas does separate book-keeping of cwnd based on packet sequence
numbers.  A mismatch can develop between this book-keeping and
tp->snd_cwnd due, for example, to delayed acks acking multiple
packets.  When vegas transitions to reno operation (e.g. following
loss), then this mismatch leads to incorrect behaviour (akin to a cwnd
backoff).  This seems mostly to affect operation at low cwnds where
delayed acking can lead to a significant fraction of cwnd being
covered by a single ack, leading to the book-keeping mismatch.  This
patch modifies the congestion avoidance update to avoid the need for
separate book-keeping while leaving vegas congestion avoidance
functionally unchanged.  A secondary advantage of this modification is
that the use of fixed-point (via V_PARAM_SHIFT) and 64 bit arithmetic
is no longer necessary, simplifying the code.

Some example test measurements with the patched code (confirming no functional
change in the congestion avoidance algorithm) can be seen at:

http://www.hamilton.ie/doug/vegaspatch/

Signed-off-by: Doug Leith <doug.leith@nuim.ie>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_vegas.c