Subject: [quicwg/base-drafts] Why min CWND of 2 instead of 1 (#3586)

From: ianswett <[email-masked]>
Date: Sun, 19 Apr 2020 14:44:22 -0700

Feel free to suggest better text or other reasons, but this is what I came up with.

Fixes #3261
You can view, comment on, or merge this pull request online at:

  https://github.com/quicwg/base-drafts/pull/3586

-- Commit Summary --

  * Why min CWND of 2 instead of 1

-- File Changes --

    M draft-ietf-quic-recovery.md (7)

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/3586.patch
https://github.com/quicwg/base-drafts/pull/3586.diff

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586

---

From: Praveen Balasubramanian <[email-masked]>
Date: Sun, 19 Apr 2020 15:46:15 -0700

@pravb commented on this pull request.

> @@ -245,6 +245,13 @@ QUIC specifies a time-based definition to ensure one or more packets are sent
 prior to a dramatic decrease in congestion window; see
 {{persistent-congestion}}.
 
+### Increase the min congestion window to 2 packets

Use "minimum congestion window" to stay consistent with rest of the draft. FWIW RFC 5681 for TCP refers to this as loss window LW. Not sure if we want to use the same term in this draft.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586#pullrequestreview-396070865

---

From: Praveen Balasubramanian <[email-masked]>
Date: Sun, 19 Apr 2020 15:50:06 -0700

@pravb approved this pull request.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586#pullrequestreview-396071208

---

From: Marten Seemann <[email-masked]>
Date: Sun, 19 Apr 2020 19:40:08 -0700

@marten-seemann commented on this pull request.

+### Increase the min congestion window to 2 packets
+
+QUIC recommends a minimum congestion window of 2 packets instead of TCP's 1.
+2 packets avoid waiting for a delayed acknowledgement and allow the PTO to
+send 2 packets instead of 1, which can be particularly important during the

The PTO is not limited by the cwnd.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586#pullrequestreview-396106937

---

From: Martin Thomson <[email-masked]>
Date: Sun, 19 Apr 2020 19:49:59 -0700

@martinthomson requested changes on this pull request.

```suggestion
### The Minimum Congestion Window is 2 Packets
```

Title Case is Used in This Document

```suggestion
QUIC recommends that the minimum congestion window be 2 packets instead 
of the 1 packet minimum in TCP.
```

What Marten said.  This justification makes no sense.  Probing with two packets is different.  

As far as I can tell, this is an arbitrary choice, driven primarily by a desire to avoid the performance floor being too low.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586#pullrequestreview-396108610

---

From: ianswett <[email-masked]>
Date: Mon, 20 Apr 2020 14:42:34 -0700

@ianswett pushed 1 commit.

6d95aa65d4366e6474de8b61f964e99ffd9a996b  Update draft-ietf-quic-recovery.md

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586/files/66fb2929883fc076683392c81be00c2b6936ad82..6d95aa65d4366e6474de8b61f964e99ffd9a996b

---

From: ianswett <[email-masked]>
Date: Mon, 20 Apr 2020 14:43:50 -0700

@ianswett commented on this pull request.

Always hitting delayed acks can be a major problem as well, though QUIC allows explicitly communicating those, which avoids some problems.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586#discussion_r411712578

---

From: ianswett <[email-masked]>
Date: Mon, 20 Apr 2020 14:52:28 -0700

1225aad461e601e2cfec4e354a8b34704f633f81  Update draft-ietf-quic-recovery.md

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586/files/6d95aa65d4366e6474de8b61f964e99ffd9a996b..1225aad461e601e2cfec4e354a8b34704f633f81

---

From: ianswett <[email-masked]>
Date: Mon, 20 Apr 2020 14:55:10 -0700

d214bfdcdc246bc0955acf834fc64c3d463ab2d6  Update draft-ietf-quic-recovery.md

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586/files/1225aad461e601e2cfec4e354a8b34704f633f81..d214bfdcdc246bc0955acf834fc64c3d463ab2d6

---

From: ianswett <[email-masked]>
Date: Mon, 20 Apr 2020 14:56:35 -0700

ce6ab3402520ed0931bafed333a3ab3cddf73903  Update draft-ietf-quic-recovery.md

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586/files/d214bfdcdc246bc0955acf834fc64c3d463ab2d6..ce6ab3402520ed0931bafed333a3ab3cddf73903

---

From: ianswett <[email-masked]>
Date: Mon, 20 Apr 2020 15:00:06 -0700

5580b7a57d7fa5f1585f598751f9930b4480c01a  Update draft-ietf-quic-recovery.md

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586/files/ce6ab3402520ed0931bafed333a3ab3cddf73903..5580b7a57d7fa5f1585f598751f9930b4480c01a

---

From: Martin Thomson <[email-masked]>
Date: Mon, 20 Apr 2020 16:33:16 -0700

@martinthomson commented on this pull request.

> @@ -245,6 +245,15 @@ QUIC specifies a time-based definition to ensure one or more packets are sent
 
+### The Minimum Congestion Window is 2 Packets
+
+QUIC recommends that the minimum congestion window be 2 packets instead
+of the 1 packet minimum in TCP. A minimum of 2 packets avoids waiting for a
+delayed acknowledgement, which can substantially decrease throughput,
+particularly if the max_ack_delay is larger than the round trip time.
+A 2 packet minimum congestion window also avoids waiting for a probe
+timeout(see {{pto}}) every time a single packet is lost.

```suggestion
timeout (see {{pto}}) every time a single packet is lost.
```

> +A 2 packet minimum congestion window also avoids waiting for a probe
+timeout(see {{pto}}) every time a single packet is lost.

I don't think that this is saying exactly what you want to say.

The point here, if I understand it, is that when an endpoint detects persistent congestion and reduces the window to the minimum, having two packets means that there is a far lower chance of BOTH of those packets being lost.  That greatly improves the likelihood that an acknowledgment will be returned and the connection can start to claw itself out of the hole it found itself in.

The point about sending a probe on PTO is only a consequence of the above; I wouldn't bother mentioning PTO.

> +of the 1 packet minimum in TCP. A minimum of 2 packets avoids waiting for a
+delayed acknowledgement, which can substantially decrease throughput,
+particularly if the max_ack_delay is larger than the round trip time.

I'm not sure that this is true.  Hitting the minimum congestion window occurs after persistent congestion, at which point we might assume that any packet getting through will cause an immediate ACK (as there is likely a vast gap).  The only case where that doesn't happen is if only ACKs are being lost, where sending two packets don't help much as only the loss of the first will trigger an immediate ACK.

I think that the point below is stronger.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586#pullrequestreview-396884672

---

From: ianswett <[email-masked]>
Date: Tue, 21 Apr 2020 15:06:06 -0700

72c7eced88de7b859edf4d1f093277851433ab8a  Update draft-ietf-quic-recovery.md

-- 
You are receiving this because you are subscribed to this thread.
View it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586/files/5580b7a57d7fa5f1585f598751f9930b4480c01a..72c7eced88de7b859edf4d1f093277851433ab8a

---

From: Gorry Fairhurst <[email-masked]>
Date: Wed, 22 Apr 2020 02:19:39 -0700

@gorryfair commented on this pull request.

I see this as a more fundamental deviation to TCP than other changes, because although it will have some performance benefit in common cases, it also changes the flow aggressiveness in cases of extreme overload. As I udnerstand, the basis of TCP's back-off is that it scales back cwnd to 1 MSS, and then should scale back in the interval between sending 1 MSS (fractional MSS). If QUIC has a minimum of 2*MSS in QUIC, does it immediately change to 2*RTT interval, otherwise this appears to be significantly more aggressive flow under congestion collapse?

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586#discussion_r412816589

---

From: ianswett <[email-masked]>
Date: Thu, 23 Apr 2020 11:28:13 -0700

I'd expect congestion collapse to be dominated by the PTO response, not the CWND.

I'm not aware of efforts to do fractional MSS in common use.  Do you have a reference for that?

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586#discussion_r414026473

---

From: Gorry Fairhurst <[email-masked]>
Date: Fri, 24 Apr 2020 23:46:01 -0700

Do we agree on what is intended by congestion-collapse, i.e. persistent long-lasting high level of congestion, as oppose to just "congestion"? (e.g. when there is a very low probability of a successful ACK). ... In will find something on reducing the MSS below once/RTT.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3586#discussion_r414997689