Skip to content

Commit

Permalink
[TCP]: Fix stretch ACK performance killer when doing ucopy.
Browse files Browse the repository at this point in the history
When we are doing ucopy, we try to defer the ACK generation to
cleanup_rbuf().  This works most of the time very well, but if the
ucopy prequeue is large, this ACKing behavior kills performance.

With TSO, it is possible to fill the prequeue so large that by the
time the ACK is sent and gets back to the sender, most of the window
has emptied of data and performance suffers significantly.

This behavior does help in some cases, so we should think about
re-enabling this trick in the future, using some kind of limit in
order to avoid the bug case.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed May 23, 2005
1 parent e16fa6b commit 3143241
Showing 1 changed file with 1 addition and 10 deletions.
11 changes: 1 addition & 10 deletions net/ipv4/tcp_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -4355,16 +4355,7 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb,
goto no_ack;
}

if (eaten) {
if (tcp_in_quickack_mode(tp)) {
tcp_send_ack(sk);
} else {
tcp_send_delayed_ack(sk);
}
} else {
__tcp_ack_snd_check(sk, 0);
}

__tcp_ack_snd_check(sk, 0);
no_ack:
if (eaten)
__kfree_skb(skb);
Expand Down

0 comments on commit 3143241

Please sign in to comment.