linux/Documentation
Yuchung Cheng eed530b6c6 tcp: early retransmit
This patch implements RFC 5827 early retransmit (ER) for TCP.
It reduces DUPACK threshold (dupthresh) if outstanding packets are
less than 4 to recover losses by fast recovery instead of timeout.

While the algorithm is simple, small but frequent network reordering
makes this feature dangerous: the connection repeatedly enter
false recovery and degrade performance. Therefore we implement
a mitigation suggested in the appendix of the RFC that delays
entering fast recovery by a small interval, i.e., RTT/4. Currently
ER is conservative and is disabled for the rest of the connection
after the first reordering event. A large scale web server
experiment on the performance impact of ER is summarized in
section 6 of the paper "Proportional Rate Reduction for TCP”,
IMC 2011. http://conferences.sigcomm.org/imc/2011/docs/p155.pdf

Note that Linux has a similar feature called THIN_DUPACK. The
differences are THIN_DUPACK do not mitigate reorderings and is only
used after slow start. Currently ER is disabled if THIN_DUPACK is
enabled. I would be happy to merge THIN_DUPACK feature with ER if
people think it's a good idea.

ER is enabled by sysctl_tcp_early_retrans:
  0: Disables ER

  1: Reduce dupthresh to packets_out - 1 when outstanding packets < 4.

  2: (Default) reduce dupthresh like mode 1. In addition, delay
     entering fast recovery by RTT/4.

Note: mode 2 is implemented in the third part of this patch series.

Signed-off-by: Yuchung Cheng <ycheng@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-05-02 20:56:10 -04:00
..
2011-09-27 18:08:04 +02:00
2011-09-27 18:08:04 +02:00
2010-02-24 13:51:32 +01:00
2008-10-16 11:21:30 -07:00
2012-03-28 18:43:38 +01:00
2012-04-05 22:13:39 -07:00
2011-09-27 18:08:04 +02:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2012-05-02 20:56:10 -04:00
2012-04-12 15:10:36 -04:00
2011-09-27 18:08:04 +02:00
2011-11-02 16:07:02 -07:00
2012-01-27 13:28:53 +01:00
2012-03-31 13:31:23 -07:00
2011-03-31 11:26:23 -03:00
2011-09-27 18:08:04 +02:00
2011-03-31 11:26:23 -03:00
2010-04-08 11:34:34 +02:00
2008-12-03 16:09:53 -07:00
2008-07-25 10:53:30 -07:00
2012-03-16 20:35:01 +00:00
2011-03-31 11:26:23 -03:00
2012-01-13 10:12:23 -08:00
2012-03-19 12:03:58 +01:00
2011-03-31 11:26:23 -03:00
2011-12-12 14:14:31 -08:00
2011-03-31 11:26:23 -03:00
2011-09-27 18:08:04 +02:00
2009-07-01 22:36:22 +02:00
2011-03-07 13:20:05 -08:00
2009-04-27 12:00:27 -07:00
2009-04-27 12:00:27 -07:00
2011-06-13 13:43:05 +02:00
2011-09-27 18:08:04 +02:00
2011-09-27 18:08:04 +02:00
2012-02-28 16:05:06 +01:00
2011-09-27 18:08:04 +02:00
2011-03-31 11:26:23 -03:00
2010-07-19 10:56:54 +02:00
2010-03-16 11:47:56 +01:00
2012-01-02 13:04:55 +01:00