mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-01 06:42:31 +00:00
tcp: remove thin_dupack feature
Thin stream DUPACK is to start fast recovery on only one DUPACK provided the connection is a thin stream (i.e., low inflight). But this older feature is now subsumed with RACK. If a connection receives only a single DUPACK, RACK would arm a reordering timer and soon starts fast recovery instead of timeout if no further ACKs are received. The socket option (THIN_DUPACK) is kept as a nop for compatibility. Note that this patch does not change another thin-stream feature which enables linear RTO. Although it might be good to generalize that in the future (i.e., linear RTO for the first say 3 retries). Signed-off-by: Yuchung Cheng <ycheng@google.com> Signed-off-by: Neal Cardwell <ncardwell@google.com> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ac229dca7e
commit
4a7f600944
@ -703,18 +703,6 @@ tcp_thin_linear_timeouts - BOOLEAN
|
|||||||
Documentation/networking/tcp-thin.txt
|
Documentation/networking/tcp-thin.txt
|
||||||
Default: 0
|
Default: 0
|
||||||
|
|
||||||
tcp_thin_dupack - BOOLEAN
|
|
||||||
Enable dynamic triggering of retransmissions after one dupACK
|
|
||||||
for thin streams. If set, a check is performed upon reception
|
|
||||||
of a dupACK to determine if the stream is thin (less than 4
|
|
||||||
packets in flight). As long as the stream is found to be thin,
|
|
||||||
data is retransmitted on the first received dupACK. This
|
|
||||||
improves retransmission latency for non-aggressive thin
|
|
||||||
streams, often found to be time-dependent.
|
|
||||||
For more information on thin streams, see
|
|
||||||
Documentation/networking/tcp-thin.txt
|
|
||||||
Default: 0
|
|
||||||
|
|
||||||
tcp_limit_output_bytes - INTEGER
|
tcp_limit_output_bytes - INTEGER
|
||||||
Controls TCP Small Queue limit per tcp socket.
|
Controls TCP Small Queue limit per tcp socket.
|
||||||
TCP bulk sender tends to increase packets in flight until it
|
TCP bulk sender tends to increase packets in flight until it
|
||||||
|
@ -220,7 +220,7 @@ struct tcp_sock {
|
|||||||
unused:5;
|
unused:5;
|
||||||
u8 nonagle : 4,/* Disable Nagle algorithm? */
|
u8 nonagle : 4,/* Disable Nagle algorithm? */
|
||||||
thin_lto : 1,/* Use linear timeouts for thin streams */
|
thin_lto : 1,/* Use linear timeouts for thin streams */
|
||||||
thin_dupack : 1,/* Fast retransmit on first dupack */
|
unused1 : 1,
|
||||||
repair : 1,
|
repair : 1,
|
||||||
frto : 1;/* F-RTO (RFC5682) activated in CA_Loss */
|
frto : 1;/* F-RTO (RFC5682) activated in CA_Loss */
|
||||||
u8 repair_queue;
|
u8 repair_queue;
|
||||||
|
@ -536,13 +536,6 @@ static struct ctl_table ipv4_table[] = {
|
|||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.proc_handler = proc_dointvec
|
.proc_handler = proc_dointvec
|
||||||
},
|
},
|
||||||
{
|
|
||||||
.procname = "tcp_thin_dupack",
|
|
||||||
.data = &sysctl_tcp_thin_dupack,
|
|
||||||
.maxlen = sizeof(int),
|
|
||||||
.mode = 0644,
|
|
||||||
.proc_handler = proc_dointvec
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
.procname = "tcp_early_retrans",
|
.procname = "tcp_early_retrans",
|
||||||
.data = &sysctl_tcp_early_retrans,
|
.data = &sysctl_tcp_early_retrans,
|
||||||
|
@ -2474,9 +2474,6 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
|
|||||||
case TCP_THIN_DUPACK:
|
case TCP_THIN_DUPACK:
|
||||||
if (val < 0 || val > 1)
|
if (val < 0 || val > 1)
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
else {
|
|
||||||
tp->thin_dupack = val;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TCP_REPAIR:
|
case TCP_REPAIR:
|
||||||
@ -2966,8 +2963,9 @@ static int do_tcp_getsockopt(struct sock *sk, int level,
|
|||||||
case TCP_THIN_LINEAR_TIMEOUTS:
|
case TCP_THIN_LINEAR_TIMEOUTS:
|
||||||
val = tp->thin_lto;
|
val = tp->thin_lto;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TCP_THIN_DUPACK:
|
case TCP_THIN_DUPACK:
|
||||||
val = tp->thin_dupack;
|
val = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TCP_REPAIR:
|
case TCP_REPAIR:
|
||||||
|
@ -95,9 +95,6 @@ int sysctl_tcp_rfc1337 __read_mostly;
|
|||||||
int sysctl_tcp_max_orphans __read_mostly = NR_FILE;
|
int sysctl_tcp_max_orphans __read_mostly = NR_FILE;
|
||||||
int sysctl_tcp_frto __read_mostly = 2;
|
int sysctl_tcp_frto __read_mostly = 2;
|
||||||
int sysctl_tcp_min_rtt_wlen __read_mostly = 300;
|
int sysctl_tcp_min_rtt_wlen __read_mostly = 300;
|
||||||
|
|
||||||
int sysctl_tcp_thin_dupack __read_mostly;
|
|
||||||
|
|
||||||
int sysctl_tcp_moderate_rcvbuf __read_mostly = 1;
|
int sysctl_tcp_moderate_rcvbuf __read_mostly = 1;
|
||||||
int sysctl_tcp_early_retrans __read_mostly = 3;
|
int sysctl_tcp_early_retrans __read_mostly = 3;
|
||||||
int sysctl_tcp_invalid_ratelimit __read_mostly = HZ/2;
|
int sysctl_tcp_invalid_ratelimit __read_mostly = HZ/2;
|
||||||
@ -2170,16 +2167,6 @@ static bool tcp_time_to_recover(struct sock *sk, int flag)
|
|||||||
if (tcp_dupack_heuristics(tp) > tp->reordering)
|
if (tcp_dupack_heuristics(tp) > tp->reordering)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
/* If a thin stream is detected, retransmit after first
|
|
||||||
* received dupack. Employ only if SACK is supported in order
|
|
||||||
* to avoid possible corner-case series of spurious retransmissions
|
|
||||||
* Use only if there are no unsent data.
|
|
||||||
*/
|
|
||||||
if ((tp->thin_dupack || sysctl_tcp_thin_dupack) &&
|
|
||||||
tcp_stream_is_thin(tp) && tcp_dupack_heuristics(tp) > 1 &&
|
|
||||||
tcp_is_sack(tp) && !tcp_send_head(sk))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user