tcp: pause Fast Open globally after third consecutive timeout
authorYuchung Cheng <ycheng@google.com>
Tue, 12 Dec 2017 21:10:40 +0000 (13:10 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 13 Dec 2017 20:51:12 +0000 (15:51 -0500)
commit7268586baa530312041e597b518b5c6a05110df1
tree09075b8fb35fcc5ad90f744345d1582fe7d62f4c
parent8a83c5d7969b8433584e3cf658a8d76c4dc37f4d
tcp: pause Fast Open globally after third consecutive timeout

Prior to this patch, active Fast Open is paused on a specific
destination IP address if the previous connections to the
IP address have experienced recurring timeouts . But recent
experiments by Microsoft (https://goo.gl/cykmn7) and Mozilla
browsers indicate the isssue is often caused by broken middle-boxes
sitting close to the client. Therefore it is much better user
experience if Fast Open is disabled out-right globally to avoid
experiencing further timeouts on connections toward other
destinations.

This patch changes the destination-IP disablement to global
disablement if a connection experiencing recurring timeouts
or aborts due to timeout.  Repeated incidents would still
exponentially increase the pause time, starting from an hour.
This is extremely conservative but an unfortunate compromise to
minimize bad experience due to broken middle-boxes.

Reported-by: Dragana Damjanovic <ddamjanovic@mozilla.com>
Reported-by: Patrick McManus <mcmanus@ducksong.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Reviewed-by: Wei Wang <weiwan@google.com>
Reviewed-by: Neal Cardwell <ncardwell@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/networking/ip-sysctl.txt
include/net/tcp.h
net/ipv4/tcp_fastopen.c
net/ipv4/tcp_metrics.c
net/ipv4/tcp_timer.c