From: Mika Liljeberg <Mika.Liljeberg@welho.com>
To: Andi Kleen <ak@muc.de>
Cc: "David S. Miller" <davem@redhat.com>,
linux-kernel@vger.kernel.org, kuznet@ms2.inr.ac.ru
Subject: [PATCH] TCP acking too fast
Date: Sun, 14 Oct 2001 16:14:30 +0300 [thread overview]
Message-ID: <3BC98FB6.50CF8815@welho.com> (raw)
In-Reply-To: <3BC94F3A.7F842182@welho.com> <20011014.020326.18308527.davem@redhat.com> <k2zo6uiney.fsf@zero.aec.at> <20011014.023948.95894368.davem@redhat.com> <20011014133004.34133@colin.muc.de>
[-- Attachment #1: Type: text/plain, Size: 1281 bytes --]
Ok, here's the patch against 2.4.10-ac10. This seems to produce
acceptable behaviour in the cases I tested, at least. Someone with one
of those "ridiculously small MTU" links might give it a go to check that
the rcv_mss estimation still works as expected. It should, though, as I
didn't really make any changes to it.
Andi Kleen wrote:
> The only special case for PSH in RX left I can is in rcv_mss estimation,
> where is assumes that a packet with PSH set is not full sized. On further
> look the 2.4 tcp_measure_rcv_mss will never update rcv_mss for packets
> which do have PSH set and in this case cause random ack behaviour depending
> on the initial rcv_mss guess.
A too low rcv_mss estimate isn't a problem, as the estimate is
immediately increased when the first larger segment arrives. A too high
estimate can be difficult to adjust down, though, if the sender suddenly
starts sending smalls segments with PSH set.
> Not very nice; definitely violates the "be conservative what you accept"
> rule. I'm not sure how to fix it, adding a fallback to every-two-packet-add
> would pollute the fast path a bit.
Hopefully a bit more conservative now. I didn't implement the fall back
to ack-every-two-packets, though, as I had the exact opposite problem.
:)
Regards,
MikaL
[-- Attachment #2: over_ack.patch --]
[-- Type: text/plain, Size: 1826 bytes --]
--- tcp_input.c.org Sat Oct 13 23:24:38 2001
+++ tcp_input.c Sun Oct 14 15:47:10 2001
@@ -126,24 +126,25 @@
* sends good full-sized frames.
*/
len = skb->len;
+
if (len >= tp->ack.rcv_mss) {
tp->ack.rcv_mss = len;
- /* Dubious? Rather, it is final cut. 8) */
- if (tcp_flag_word(skb->h.th)&TCP_REMNANT)
- tp->ack.pending |= TCP_ACK_PUSHED;
} else {
- /* Otherwise, we make more careful check taking into account,
- * that SACKs block is variable.
+ /* If PSH is not set, packet should be full sized, assuming
+ * that the peer implements Nagle correctly.
+ * This observation (if it is correct 8)) allows
+ * to handle super-low mtu links fairly.
*
- * "len" is invariant segment length, including TCP header.
+ * However, If sender sets TCP_NODELAY, this could effectively
+ * turn receiver side SWS algorithms off. TCP_MIN_MSS guards
+ * against a ridiculously small rcv_mss estimate.
+ *
+ * We also have to be careful checking the header size, since
+ * the SACK option is variable length. "len" is the invariant
+ * segment length, including TCP header.
*/
len += skb->data - skb->h.raw;
if (len >= TCP_MIN_RCVMSS + sizeof(struct tcphdr) ||
- /* If PSH is not set, packet should be
- * full sized, provided peer TCP is not badly broken.
- * This observation (if it is correct 8)) allows
- * to handle super-low mtu links fairly.
- */
(len >= TCP_MIN_MSS + sizeof(struct tcphdr) &&
!(tcp_flag_word(skb->h.th)&TCP_REMNANT))) {
/* Subtract also invariant (if peer is RFC compliant),
@@ -152,12 +153,9 @@
*/
len -= tp->tcp_header_len;
tp->ack.last_seg_size = len;
- if (len == lss) {
+ if (len == lss)
tp->ack.rcv_mss = len;
- return;
- }
}
- tp->ack.pending |= TCP_ACK_PUSHED;
}
}
next prev parent reply other threads:[~2001-10-14 13:15 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-10-14 0:23 TCP acking too fast Mika Liljeberg
2001-10-14 6:40 ` David S. Miller
2001-10-14 7:05 ` Mika Liljeberg
2001-10-14 7:47 ` David S. Miller
2001-10-14 7:51 ` Mika Liljeberg
2001-10-14 8:12 ` David S. Miller
2001-10-14 8:39 ` Mika Liljeberg
2001-10-14 9:03 ` David S. Miller
2001-10-14 9:15 ` Mika Liljeberg
2001-10-14 9:16 ` David S. Miller
2001-10-14 9:25 ` Andi Kleen
2001-10-14 9:39 ` David S. Miller
2001-10-14 11:30 ` Andi Kleen
2001-10-14 11:49 ` Mika Liljeberg
2001-10-14 14:05 ` Andi Kleen
2001-10-14 14:26 ` Mika Liljeberg
2001-10-14 16:12 ` Andi Kleen
2001-10-14 16:55 ` Mika Liljeberg
2001-10-14 17:07 ` kuznet
2001-10-14 17:26 ` Mika Liljeberg
2001-10-14 17:35 ` kuznet
2001-10-14 17:56 ` Mika Liljeberg
2001-10-14 18:20 ` kuznet
2001-10-14 18:48 ` Mika Liljeberg
2001-10-14 19:12 ` kuznet
2001-10-14 19:32 ` Mika Liljeberg
2001-10-14 19:40 ` kuznet
2001-10-14 20:06 ` Mika Liljeberg
2001-10-15 18:40 ` kuznet
2001-10-15 19:15 ` Mika Liljeberg
2001-10-15 19:38 ` Mika Liljeberg
2001-10-14 13:14 ` Mika Liljeberg [this message]
2001-10-14 16:36 ` kuznet
2001-10-14 7:50 ` David S. Miller
2001-10-14 7:53 ` Mika Liljeberg
2001-10-15 20:59 ` Bill Davidsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3BC98FB6.50CF8815@welho.com \
--to=mika.liljeberg@welho.com \
--cc=ak@muc.de \
--cc=davem@redhat.com \
--cc=kuznet@ms2.inr.ac.ru \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.