milos-linux/net
Eric Dumazet 50c8339e92 tcp: tso: restore IW10 after TSO autosizing
With sysctl_tcp_min_tso_segs being 4, it is very possible
that tcp_tso_should_defer() decides not sending last 2 MSS
of initial window of 10 packets. This also applies if
autosizing decides to send X MSS per GSO packet, and cwnd
is not a multiple of X.

This patch implements an heuristic based on age of first
skb in write queue : If it was sent very recently (less than half srtt),
we can predict that no ACK packet will come in less than half rtt,
so deferring might cause an under utilization of our window.

This is visible on initial send (IW10) on web servers,
but more generally on some RPC, as the last part of the message
might need an extra RTT to get delivered.

Tested:

Ran following packetdrill test
// A simple server-side test that sends exactly an initial window (IW10)
// worth of packets.

`sysctl -e -q net.ipv4.tcp_min_tso_segs=4`

0.000 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0    setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0    bind(3, ..., ...) = 0
+0    listen(3, 1) = 0

+.1   < S 0:0(0) win 32792 <mss 1460,sackOK,nop,nop,nop,wscale 7>
+0    > S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 6>
+.1   < . 1:1(0) ack 1 win 257
+0    accept(3, ..., ...) = 4

+0    write(4, ..., 14600) = 14600
+0    > . 1:5841(5840) ack 1 win 457
+0    > . 5841:11681(5840) ack 1 win 457
// Following packet should be sent right now.
+0    > P. 11681:14601(2920) ack 1 win 457

+.1   < . 1:1(0) ack 14601 win 257

+0    close(4) = 0
+0    > F. 14601:14601(0) ack 1
+.1   < F. 1:1(0) ack 14602 win 257
+0    > . 14602:14602(0) ack 2

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-02-28 15:10:39 -05:00
..
6lowpan
9p
802
8021q
appletalk
atm
ax25
batman-adv batman-adv: Fix use of seq_has_overflowed() 2015-02-22 17:00:08 -05:00
bluetooth
bridge bridge: fix link notification skb size calculation to include vlan ranges 2015-02-26 11:25:43 -05:00
caif
can
ceph mm: gup: use get_user_pages_unlocked 2015-02-11 17:06:05 -08:00
core net: Remove state argument from skb_find_text() 2015-02-22 15:59:54 -05:00
dcb
dccp
decnet
dns_resolver
dsa net: dsa: Introduce dsa_is_port_initialized 2015-02-25 17:57:48 -05:00
ethernet
hsr
ieee802154
ipv4 tcp: tso: restore IW10 after TSO autosizing 2015-02-28 15:10:39 -05:00
ipv6 multicast: Extend ip address command to enable multicast group join/leave on 2015-02-27 16:25:25 -05:00
ipx
irda
iucv
key
l2tp
lapb
llc
mac80211 Last round of updates for net-next: 2015-02-04 14:57:45 -08:00
mac802154
mpls
netfilter net: Remove state argument from skb_find_text() 2015-02-22 15:59:54 -05:00
netlabel Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security 2015-02-11 20:25:11 -08:00
netlink Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-02-05 14:33:28 -08:00
netrom
nfc NFC: nci: Move NFCEE discovery logic 2015-02-04 09:15:18 +01:00
openvswitch openvswitch: Fix key serialization. 2015-02-14 20:20:40 -08:00
packet
phonet
rds rds: rds_cong_queue_updates needs to defer the congestion update transmission 2015-02-11 14:35:44 -08:00
rfkill Last round of updates for net-next: 2015-02-04 14:57:45 -08:00
rose
rxrpc Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-02-04 20:46:55 -08:00
sched net: Remove state argument from skb_find_text() 2015-02-22 15:59:54 -05:00
sctp Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-02-05 14:33:28 -08:00
sunrpc Merge branch 'for-3.20' of git://linux-nfs.org/~bfields/linux 2015-02-12 10:39:41 -08:00
switchdev
tipc tipc: make media address offset a common define 2015-02-27 18:18:48 -05:00
unix
vmw_vsock
wimax
wireless Last round of updates for net-next: 2015-02-04 14:57:45 -08:00
x25
xfrm
compat.c net: __aligned(size) is preferred over __attribute__((aligned(size))) 2015-02-22 17:01:22 -05:00
Kconfig
Makefile
socket.c net: switch sockets to ->read_iter/->write_iter 2015-02-04 01:34:15 -05:00
sysctl_net.c