diff -paur linux-3.5.7/include/linux/sysctl.h linux-3.5.7_sysctls/include/linux/sysctl.h --- linux-3.5.7/include/linux/sysctl.h 2012-10-12 22:48:25.000000000 +0200 +++ linux-3.5.7_sysctls/include/linux/sysctl.h 2014-10-21 15:14:06.675719641 +0200 @@ -425,6 +425,8 @@ enum NET_TCP_ALLOWED_CONG_CONTROL=123, NET_TCP_MAX_SSTHRESH=124, NET_TCP_FRTO_RESPONSE=125, + NET_TCP_DELAYED_ACKS=126, + NET_TCP_INITIAL_SSTHRESH=127, }; enum { diff -paur linux-3.5.7/include/net/tcp.h linux-3.5.7_sysctls/include/net/tcp.h --- linux-3.5.7/include/net/tcp.h 2012-10-12 22:48:25.000000000 +0200 +++ linux-3.5.7_sysctls/include/net/tcp.h 2014-10-21 15:14:42.758720498 +0200 @@ -253,6 +253,9 @@ extern int sysctl_tcp_cookie_size; extern int sysctl_tcp_thin_linear_timeouts; extern int sysctl_tcp_thin_dupack; extern int sysctl_tcp_early_retrans; +extern int sysctl_tcp_delayed_acks; +extern int sysctl_tcp_initial_ssthresh; + extern atomic_long_t tcp_memory_allocated; extern struct percpu_counter tcp_sockets_allocated; diff -paur linux-3.5.7/kernel/sysctl_binary.c linux-3.5.7_sysctls/kernel/sysctl_binary.c --- linux-3.5.7/kernel/sysctl_binary.c 2012-10-12 22:48:25.000000000 +0200 +++ linux-3.5.7_sysctls/kernel/sysctl_binary.c 2014-10-21 15:15:18.460721347 +0200 @@ -400,6 +400,8 @@ static const struct bin_table bin_net_ip /* NET_TCP_AVAIL_CONG_CONTROL "tcp_available_congestion_control" no longer used */ { CTL_STR, NET_TCP_ALLOWED_CONG_CONTROL, "tcp_allowed_congestion_control" }, { CTL_INT, NET_TCP_MAX_SSTHRESH, "tcp_max_ssthresh" }, + { CTL_INT, NET_TCP_DELAYED_ACKS, "tcp_delayed_acks" }, + { CTL_INT, NET_TCP_INITIAL_SSTHRESH, "tcp_initial_ssthresh" }, { CTL_INT, NET_IPV4_ICMP_ECHO_IGNORE_ALL, "icmp_echo_ignore_all" }, { CTL_INT, NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS, "icmp_echo_ignore_broadcasts" }, diff -paur linux-3.5.7/net/ipv4/sysctl_net_ipv4.c linux-3.5.7_sysctls/net/ipv4/sysctl_net_ipv4.c --- linux-3.5.7/net/ipv4/sysctl_net_ipv4.c 2012-10-12 22:48:25.000000000 +0200 +++ linux-3.5.7_sysctls/net/ipv4/sysctl_net_ipv4.c 2014-10-21 15:16:32.252723100 +0200 @@ -687,6 +687,20 @@ static struct ctl_table ipv4_table[] = { .extra2 = &two, }, { + .procname = "tcp_delayed_acks", + .data = &sysctl_tcp_delayed_acks, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, + { + .procname = "tcp_initial_ssthresh", + .data = &sysctl_tcp_initial_ssthresh, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, + { .procname = "udp_mem", .data = &sysctl_udp_mem, .maxlen = sizeof(sysctl_udp_mem), Only in linux-3.5.7_sysctls/net/ipv4: sysctl_net_ipv4.c~ diff -paur linux-3.5.7/net/ipv4/tcp_input.c linux-3.5.7_sysctls/net/ipv4/tcp_input.c --- linux-3.5.7/net/ipv4/tcp_input.c 2012-10-12 22:48:25.000000000 +0200 +++ linux-3.5.7_sysctls/net/ipv4/tcp_input.c 2014-10-21 15:18:11.793725466 +0200 @@ -101,6 +101,9 @@ int sysctl_tcp_moderate_rcvbuf __read_mo int sysctl_tcp_abc __read_mostly; int sysctl_tcp_early_retrans __read_mostly = 2; +int sysctl_tcp_delayed_acks __read_mostly = 1; +int sysctl_tcp_initial_ssthresh __read_mostly = 0; + #define FLAG_DATA 0x01 /* Incoming frame contained data. */ #define FLAG_WIN_UPDATE 0x02 /* Incoming ACK was a window update. */ #define FLAG_DATA_ACKED 0x04 /* This ACK acknowledged new data. */ @@ -903,7 +906,10 @@ static void tcp_init_metrics(struct sock /* ssthresh may have been reduced unnecessarily during. * 3WHS. Restore it back to its initial default. */ - tp->snd_ssthresh = TCP_INFINITE_SSTHRESH; + if (sysctl_tcp_initial_ssthresh > 0) + tp->snd_ssthresh = sysctl_tcp_initial_ssthresh; + else + tp->snd_ssthresh = TCP_INFINITE_SSTHRESH; } if (dst_metric(dst, RTAX_REORDERING) && tp->reordering != dst_metric(dst, RTAX_REORDERING)) { @@ -5219,7 +5225,10 @@ static void __tcp_ack_snd_check(struct s tcp_send_ack(sk); } else { /* Else, send delayed ack. */ - tcp_send_delayed_ack(sk); + if (sysctl_tcp_delayed_acks) + tcp_send_delayed_ack(sk); + else + tcp_send_ack(sk); } }