Skip to contentSkip to conversation

New: TPC window is to cautious on send

Bugme-new Andrew Morton 2 participants 2 messages Sep 17, 2007 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]/

#1 lore raw
Quoted 46 lines · On Sun, 16 Sep 2007 17:02:46 -0700 (PDT) [email protected] wrote:

http://bugzilla.kernel.org/show_bug.cgi?id=9031

Summary: TPC window is to cautious on send
Product: Networking
Version: 2.5
KernelVersion: Any
Platform: All
OS/Version: Linux
Tree: Mainline
Status: NEW
Severity: normal
Priority: P1
Component: IPV4
AssignedTo: [email protected]
ReportedBy: [email protected]

This has been a longstanding "bug" of sorts when talking to a system that has extremely small windows (under 1.5k).

The only way to give the stack on the other side a nudge is to ACK twice.

Here is a sample transcript, with a max window size of 1025 bytes.

18:25:43.968358 IP dr.ea.ms.http > 192.168.80.2.40246: . 37377:37633(256) ack 120 win 5840
18:25:43.992402 IP 192.168.80.2.40246 > dr.ea.ms.http: . ack 37121 win 769 <mss 256>
18:25:44.390305 IP 192.168.80.2.40246 > dr.ea.ms.http: . ack 37121 win 1025 <mss 256>
18:25:44.823084 IP dr.ea.ms.http > 192.168.80.2.40246: . 37633:37889(256) ack 120 win 5840

If I take the "nudge" code out of my IP stack, it sits for an aweful long time, waiting on the next packet, when there clearly is room for a few more.

Should I:
1: Have my IP stack lie about the window till it is important? 2: Something else?

I can't see any good reason for the large delay, since it is on a serial link, via SLIP.

I can point you to source code that will allow you to verify the problem for yourself, if you would like.

#2 lore raw
Quoted 42 lines · On Sun, 16 Sep 2007 23:43:40 -0700 Andrew Morton <[email protected]>…
Quoted 40 lines · On Sun, 16 Sep 2007 17:02:46 -0700 (PDT) [email protected] wrote:

http://bugzilla.kernel.org/show_bug.cgi?id=9031

Summary: TPC window is to cautious on send
Product: Networking
Version: 2.5
KernelVersion: Any
Platform: All
OS/Version: Linux
Tree: Mainline
Status: NEW
Severity: normal
Priority: P1
Component: IPV4
AssignedTo: [email protected]
ReportedBy: [email protected]

This has been a longstanding "bug" of sorts when talking to a system that has extremely small windows (under 1.5k).

The only way to give the stack on the other side a nudge is to ACK twice.

Here is a sample transcript, with a max window size of 1025 bytes.

18:25:43.968358 IP dr.ea.ms.http > 192.168.80.2.40246: . 37377:37633(256) ack 120 win 5840
18:25:43.992402 IP 192.168.80.2.40246 > dr.ea.ms.http: . ack 37121 win 769 <mss 256>
18:25:44.390305 IP 192.168.80.2.40246 > dr.ea.ms.http: . ack 37121 win 1025 <mss 256>
18:25:44.823084 IP dr.ea.ms.http > 192.168.80.2.40246: . 37633:37889(256) ack 120 win 5840

If I take the "nudge" code out of my IP stack, it sits for an aweful long time, waiting on the next packet, when there clearly is room for a few more.

Should I:
1: Have my IP stack lie about the window till it is important? 2: Something else?

Quoted 6 lines
Quoted 6 lines

I can't see any good reason for the large delay, since it is on a serial link, via SLIP.

I can point you to source code that will allow you to verify the problem for yourself, if you would like.

See my comment, on bug report, Linux is doing Silly Window Syndrome avoidance (RFC 813) as required in host requirements RFC1122

4.2.3.4 When to Send Data

A TCP MUST include a SWS avoidance algorithm in the sender.

A TCP SHOULD implement the Nagle Algorithm [TCP:9] to coalesce short segments. However, there MUST be a way for an application to disable the Nagle algorithm on an individual connection. In all cases, sending data is also subject to the limitation imposed by the Slow Start algorithm (Section 4.2.2.15).

The Linux mechanism to disable Nagle is setsockopt(TCP_NODELAY).

Signature · 1 line
Stephen Hemminger <[email protected]>