aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/fou.c
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2014-11-13 09:45:22 -0800
committerDavid S. Miller <davem@davemloft.net>2014-11-13 15:21:44 -0500
commitd649a7a81f3b5bacb1d60abd7529894d8234a666 (patch)
tree6df6122eab00941a543a7e38a3cc50b62a6f7600 /net/ipv4/fou.c
parentrhashtable: Drop gfp_flags arg in insert/remove functions (diff)
downloadlinux-dev-d649a7a81f3b5bacb1d60abd7529894d8234a666.tar.xz
linux-dev-d649a7a81f3b5bacb1d60abd7529894d8234a666.zip
tcp: limit GSO packets to half cwnd
In DC world, GSO packets initially cooked by tcp_sendmsg() are usually big, as sk_pacing_rate is high. When network is congested, cwnd can be smaller than the GSO packets found in socket write queue. tcp_write_xmit() splits GSO packets using the available cwnd, and we end up sending a single GSO packet, consuming all available cwnd. With GRO aggregation on the receiver, we might handle a single GRO packet, sending back a single ACK. 1) This single ACK might be lost TLP or RTO are forced to attempt a retransmit. 2) This ACK releases a full cwnd, sender sends another big GSO packet, in a ping pong mode. This behavior does not fill the pipes in the best way, because of scheduling artifacts. Make sure we always have at least two GSO packets in flight. This allows us to safely increase GRO efficiency without risking spurious retransmits. Signed-off-by: Eric Dumazet <edumazet@google.com> Acked-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/fou.c')
0 files changed, 0 insertions, 0 deletions