tcp: PRR uses CRB mode by default and SS mode conditionally
authorYuchung Cheng <ycheng@google.com>
Wed, 1 Jul 2015 21:11:15 +0000 (14:11 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 8 Jul 2015 20:29:46 +0000 (13:29 -0700)
commit3759824da87b30ce7a35b4873b62b0ba38905ef5
tree26542ae9bf43b3803e1f1bc6fc0eaff9067ba2e3
parent291a00d1a70f96b393da9ac90c58a82bc7949fc8
tcp: PRR uses CRB mode by default and SS mode conditionally

PRR slow start is often too aggressive especially when drops are
caused by traffic policers. The policers mainly use token bucket
to enforce the rate so sending (twice) faster than the delivery
rate causes excessive drops.

This patch changes PRR to the conservative reduction bound
(CRB) mode in RFC 6937 by default. CRB follows the packet
conservation rule to send at most the delivery rate by default.

But if many packets are lost and the pipe is empty, CRB may take N
round trips to repair N losses. We conditionally turn on slow start
mode if all these conditions are made to speed up the recovery:

  1) on the second round or later in recovery
  2) retransmission sent in the previous round is delivered on this ACK
  3) no retransmission is marked lost on this ACK

By using packet conservation by default, this change reduces the loss
retransmits signicantly on networks that deploy traffic policers,
up to 20% reduction of overall loss rate.

Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Nandita Dukkipati <nanditad@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_input.c