1
linux/net/ipv4
Eric Dumazet 30927520db tcp_cubic: better follow cubic curve after idle period
Jana Iyengar found an interesting issue on CUBIC :

The epoch is only updated/reset initially and when experiencing losses.
The delta "t" of now - epoch_start can be arbitrary large after app idle
as well as the bic_target. Consequentially the slope (inverse of
ca->cnt) would be really large, and eventually ca->cnt would be
lower-bounded in the end to 2 to have delayed-ACK slow-start behavior.

This particularly shows up when slow_start_after_idle is disabled
as a dangerous cwnd inflation (1.5 x RTT) after few seconds of idle
time.

Jana initial fix was to reset epoch_start if app limited,
but Neal pointed out it would ask the CUBIC algorithm to recalculate the
curve so that we again start growing steeply upward from where cwnd is
now (as CUBIC does just after a loss). Ideally we'd want the cwnd growth
curve to be the same shape, just shifted later in time by the amount of
the idle period.

Reported-by: Jana Iyengar <jri@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Cc: Sangtae Ha <sangtae.ha@gmail.com>
Cc: Lawrence Brakmo <lawrence@brakmo.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-09-10 10:58:33 -07:00
..
netfilter netfilter: nf_dup{4, 6}: fix build error when nf_conntrack disabled 2015-09-02 16:28:06 -07:00
af_inet.c net: Make table id type u32 2015-09-01 14:32:44 -07:00
ah4.c ah4: Fix error return in ah_input(). 2015-08-25 13:38:50 -07:00
arp.c net: Fix up inet_addr_type checks 2015-08-13 22:43:21 -07:00
cipso_ipv4.c
datagram.c net: Set sk_txhash from a random number 2015-07-29 22:44:04 -07:00
devinet.c net/ipv4: suppress NETDEV_UP notification on address lifetime update 2015-07-28 23:38:13 -07:00
esp4.c
fib_frontend.c net: Make table id type u32 2015-09-01 14:32:44 -07:00
fib_lookup.h ipv4: consider TOS in fib_select_default 2015-07-24 22:46:11 -07:00
fib_rules.c net: ipv6: use common fib_default_rule_pref 2015-09-09 14:19:50 -07:00
fib_semantics.c net: Make table id type u32 2015-09-01 14:32:44 -07:00
fib_trie.c net: FIB tracepoints 2015-08-29 13:05:16 -07:00
fou.c fou: reject IPv6 config 2015-08-29 13:07:54 -07:00
gre_demux.c gre: Remove support for sharing GRE protocol hook. 2015-08-10 14:03:54 -07:00
gre_offload.c
icmp.c net: Add support for VRFs to inetpeer cache 2015-08-28 13:32:36 -07:00
igmp.c IGMP: Inhibit reports for local multicast groups 2015-08-28 13:28:47 -07:00
inet_connection_sock.c inet: fix potential deadlock in reqsk_queue_unlink() 2015-08-13 22:46:22 -07:00
inet_diag.c
inet_fragment.c inet: frags: remove INET_FRAG_EVICTED and use list_evictor for the test 2015-07-26 21:00:15 -07:00
inet_hashtables.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-07-23 00:41:16 -07:00
inet_lro.c
inet_timewait_sock.c
inetpeer.c net: Add helper function to compare inetpeer addresses 2015-08-28 13:32:36 -07:00
ip_forward.c
ip_fragment.c net: Add support for VRFs to inetpeer cache 2015-08-28 13:32:36 -07:00
ip_gre.c ip_tunnels: record IP version in tunnel info 2015-08-29 13:07:54 -07:00
ip_input.c dst: Metadata destinations 2015-07-21 10:39:05 -07:00
ip_options.c
ip_output.c net: Use VRF index for oif in ip_send_unicast_reply 2015-08-13 22:43:21 -07:00
ip_sockglue.c
ip_tunnel_core.c ip-tunnel: Use API to access tunnel metadata options. 2015-08-31 12:28:56 -07:00
ip_tunnel.c ip_gre: Add support to collect tunnel metadata. 2015-08-10 14:03:54 -07:00
ip_vti.c
ipcomp.c
ipconfig.c net: ipv4: increase dhcp inter device timeout 2015-08-12 16:40:22 -07:00
ipip.c ip_gre: Add support to collect tunnel metadata. 2015-08-10 14:03:54 -07:00
ipmr.c net: ipv6: use common fib_default_rule_pref 2015-09-09 14:19:50 -07:00
Kconfig geneve: Consolidate Geneve functionality in single module. 2015-08-27 15:42:48 -07:00
Makefile geneve: Consolidate Geneve functionality in single module. 2015-08-27 15:42:48 -07:00
netfilter.c
ping.c
proc.c net: track success and failure of TCP PMTU probing 2015-07-21 22:36:33 -07:00
protocol.c
raw.c
route.c ip_tunnels: convert the mode field of ip_tunnel_info to flags 2015-08-29 13:07:54 -07:00
syncookies.c
sysctl_net_ipv4.c IGMP: Inhibit reports for local multicast groups 2015-08-28 13:28:47 -07:00
tcp_bic.c
tcp_cdg.c
tcp_cong.c tcp: use dctcp if enabled on the route to the initiator 2015-08-31 12:34:00 -07:00
tcp_cubic.c tcp_cubic: better follow cubic curve after idle period 2015-09-10 10:58:33 -07:00
tcp_dctcp.c
tcp_diag.c
tcp_fastopen.c
tcp_highspeed.c
tcp_htcp.c
tcp_hybla.c
tcp_illinois.c
tcp_input.c tcp: use dctcp if enabled on the route to the initiator 2015-08-31 12:34:00 -07:00
tcp_ipv4.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-08-13 16:23:11 -07:00
tcp_lp.c
tcp_memcontrol.c
tcp_metrics.c net: Add helper function to compare inetpeer addresses 2015-08-28 13:32:36 -07:00
tcp_minisocks.c
tcp_offload.c
tcp_output.c tcp: generate CA_EVENT_TX_START on data frames 2015-09-10 10:58:33 -07:00
tcp_probe.c
tcp_scalable.c
tcp_timer.c
tcp_vegas.c
tcp_vegas.h
tcp_veno.c
tcp_westwood.c
tcp_yeah.c
tcp.c tcp: fix slow start after idle vs TSO/GSO 2015-08-25 11:22:50 -07:00
tunnel4.c
udp_diag.c
udp_impl.h
udp_offload.c
udp_tunnel.c tunnel: introduce udp_tun_rx_dst() 2015-08-27 15:42:47 -07:00
udp.c udp: Handle VRF device in sendmsg 2015-08-13 22:43:20 -07:00
udplite.c
xfrm4_input.c
xfrm4_mode_beet.c
xfrm4_mode_transport.c
xfrm4_mode_tunnel.c
xfrm4_output.c
xfrm4_policy.c xfrm: Use VRF master index if output device is enslaved 2015-08-25 11:25:09 -07:00
xfrm4_protocol.c
xfrm4_state.c
xfrm4_tunnel.c