]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Fix spurious retransmit recovery on low latency networks
authormmacy <mmacy@FreeBSD.org>
Tue, 8 May 2018 02:22:34 +0000 (02:22 +0000)
committermmacy <mmacy@FreeBSD.org>
Tue, 8 May 2018 02:22:34 +0000 (02:22 +0000)
commitfe8ba29698d90650956b7ee7484f9bc828d19d1f
tree42256eb470f04fd590230f2ef343c3a6d061f737
parent09b593c42b32758170688a7be2c21dea93b51a89
Fix spurious retransmit recovery on low latency networks

TCP's smoothed RTT (SRTT) can be much larger than an actual observed RTT. This can be either because of hz restricting the calculable RTT to 10ms in VMs or 1ms using the default 1000hz or simply because SRTT recently incorporated a larger value.

If an ACK arrives before the calculated badrxtwin (now + SRTT):
tp->t_badrxtwin = ticks + (tp->t_srtt >> (TCP_RTT_SHIFT + 1));

We'll erroneously reset snd_una to snd_max. If multiple segments were dropped and this happens repeatedly the transmit rate will be limited to 1MSS per RTO until we've retransmitted all drops.

Reported by: rstone
Reviewed by: hiren, transport
Approved by: sbruno
MFC after: 1 month
Differential Revision: https://reviews.freebsd.org/D8556
sys/netinet/tcp_input.c
sys/netinet/tcp_output.c
sys/netinet/tcp_timer.c