Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e380175 authored by Andreas Petlund's avatar Andreas Petlund Committed by David S. Miller
Browse files

net: TCP thin dupack



This patch enables fast retransmissions after one dupACK for
TCP if the stream is identified as thin. This will reduce
latencies for thin streams that are not able to trigger fast
retransmissions due to high packet interarrival time. This
mechanism is only active if enabled by iocontrol or syscontrol
and the stream is identified as thin.

Signed-off-by: default avatarAndreas Petlund <apetlund@simula.no>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 36e31b0a
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -499,6 +499,18 @@ tcp_thin_linear_timeouts - BOOLEAN
	Documentation/networking/tcp-thin.txt
	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

UDP variables:

udp_mem - vector of 3 INTEGERs: min, pressure, max
+3 −1
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ enum {
#define TCP_MD5SIG		14	/* TCP MD5 Signature (RFC2385) */
#define TCP_COOKIE_TRANSACTIONS	15	/* TCP Cookie Transactions */
#define TCP_THIN_LINEAR_TIMEOUTS 16      /* Use linear timeouts for thin streams*/
#define TCP_THIN_DUPACK         17      /* Fast retrans. after 1 dupack */

/* for TCP_INFO socket option */
#define TCPI_OPT_TIMESTAMPS	1
@@ -343,7 +344,8 @@ struct tcp_sock {
	u8	frto_counter;	/* Number of new acks after RTO */
	u8	nonagle     : 4,/* Disable Nagle algorithm?             */
		thin_lto    : 1,/* Use linear timeouts for thin streams */
		unused      : 3;
		thin_dupack : 1,/* Fast retransmit on first dupack      */
		unused      : 2;

/* RTT measurement */
	u32	srtt;		/* smoothed round trip time << 3	*/
+1 −0
Original line number Diff line number Diff line
@@ -245,6 +245,7 @@ extern int sysctl_tcp_slow_start_after_idle;
extern int sysctl_tcp_max_ssthresh;
extern int sysctl_tcp_cookie_size;
extern int sysctl_tcp_thin_linear_timeouts;
extern int sysctl_tcp_thin_dupack;

extern atomic_t tcp_memory_allocated;
extern struct percpu_counter tcp_sockets_allocated;
+7 −0
Original line number Diff line number Diff line
@@ -582,6 +582,13 @@ static struct ctl_table ipv4_table[] = {
		.mode           = 0644,
		.proc_handler   = proc_dointvec
	},
        {
		.procname       = "tcp_thin_dupack",
		.data           = &sysctl_tcp_thin_dupack,
		.maxlen         = sizeof(int),
		.mode           = 0644,
		.proc_handler   = proc_dointvec
	},
	{
		.procname	= "udp_mem",
		.data		= &sysctl_udp_mem,
+7 −0
Original line number Diff line number Diff line
@@ -2236,6 +2236,13 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
			tp->thin_lto = val;
		break;

	case TCP_THIN_DUPACK:
		if (val < 0 || val > 1)
			err = -EINVAL;
		else
			tp->thin_dupack = val;
		break;

	case TCP_CORK:
		/* When set indicates to always queue non-full frames.
		 * Later the user clears this option and we transmit
Loading