Subject: [quicwg/base-drafts] Reference RFC7661 for application limited (#2605)

From: ianswett <[email-masked]>
Date: Wed, 10 Apr 2019 13:14:39 -0700

Praveen, I think this is better, but tell me if you'd like to add/change something else?

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

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

-- Commit Summary --

  * Reference RFC7661 for application limited

-- File Changes --

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

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/2605.patch
https://github.com/quicwg/base-drafts/pull/2605.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/2605

---

From: ianswett <[email-masked]>
Date: Wed, 10 Apr 2019 19:16:38 -0700

@ianswett pushed 1 commit.

77de41bcbb27c183f926d906d6d899f016a3eecc  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/2605/files/c06161ff0db0dc6b080edfd3bf67bf24d23b34a2..77de41bcbb27c183f926d906d6d899f016a3eecc

---

From: Jana Iyengar <[email-masked]>
Date: Fri, 12 Apr 2019 18:28:41 -0700

janaiyengar commented on this pull request.

Thanks for this -- I think it's the right direction. Some comments to try and herd this text some more.

>  ## Application Limited Sending
 
-The congestion window should not be increased in slow start or congestion
-avoidance when it is not fully utilized.  The congestion window could be
-under-utilized due to insufficient application data or flow control credit.
+A sender's congestion window MUST NOT increase when no packets are newly
+acknowledged, such as when the connection is idle. The congestion window

This is a strange requirement, since the specified CC only increases on receiving ACKs. This was already written earlier in other words, and I realize now that it was a strange requirement then as well. I wonder if just removing this first sentence makes sense.

>  ## Application Limited Sending
 
-The congestion window should not be increased in slow start or congestion
-avoidance when it is not fully utilized.  The congestion window could be
-under-utilized due to insufficient application data or flow control credit.
+A sender's congestion window MUST NOT increase when no packets are newly
+acknowledged, such as when the connection is idle. The congestion window
+SHOULD NOT be increased in slow start or congestion avoidance when it is not
+sufficiently utilized.  The congestion window could be under-utilized due to
+insufficient application data or flow control credit.

Editorial suggestion, after removing the first sentence: "A congestion window that is under-utilized SHOULD NOT be increased in either slow start or congestion avoidance.  This can happen due to insufficient application data or flow control credit."

I don't think saying "idle" is necessary, this text captures it in "insufficient app data", IMO.

>  ## Application Limited Sending
 
-The congestion window should not be increased in slow start or congestion
-avoidance when it is not fully utilized.  The congestion window could be
-under-utilized due to insufficient application data or flow control credit.
+A sender's congestion window MUST NOT increase when no packets are newly
+acknowledged, such as when the connection is idle. The congestion window
+SHOULD NOT be increased in slow start or congestion avoidance when it is not
+sufficiently utilized.  The congestion window could be under-utilized due to
+insufficient application data or flow control credit.
+
+A sender MAY use the pipeACK method described in section 4.3 of {{?RFC7661}}
+to determine if the congestion window is sufficiently utilized.

I'm not sure how to read this. We are saying that the sender SHOULD NOT increase the cwnd if it's under-utilized, but we are not quite defining what under-utilized means and instead pointing to pipeACK for one way of defining it (for TCP). This doesn't seem great to me.

For the purpose of this PR, how about you leave it like this and open a new issue to summarize a definition of an under-utilized cwnd?

 A sender that paces packets (see {{pacing}}) might delay sending packets
 and not fully utilize the congestion window due to this delay. A sender
 should not consider itself application limited if it would have fully
 utilized the congestion window without pacing delay.
 
+Sending more than intial window into the network at once may cause losses.

```suggestion
Bursting more than an intial window's worth of data into the network might cause short-term congestion and losses.
```

 A sender that paces packets (see {{pacing}}) might delay sending packets
 and not fully utilize the congestion window due to this delay. A sender
 should not consider itself application limited if it would have fully
 utilized the congestion window without pacing delay.
 
+Sending more than intial window into the network at once may cause losses.
+Implemementations SHOULD use pacing, ACK-clocking, a reduction in CWND and/or

```suggestion
Implemementations SHOULD either use pacing or reduce their congestion window to limit such bursts.
```
Reducing the cwnd basically means using ack-clocking to increase the cwnd.

 A sender that paces packets (see {{pacing}}) might delay sending packets
 and not fully utilize the congestion window due to this delay. A sender
 should not consider itself application limited if it would have fully
 utilized the congestion window without pacing delay.
 
+Sending more than intial window into the network at once may cause losses.
+Implemementations SHOULD use pacing, ACK-clocking, a reduction in CWND and/or
+timers to minimize bursts.
+
+A sender MAY implement alternate mechanisms to update its congestion window
+after idle periods, such as those proposed for TCP in {{?RFC7661}}.

```suggestion
after periods of under-utilization, such as those proposed for TCP in {{?RFC7661}}.
```

> @@ -742,31 +742,28 @@ As an example of a well-known and publicly available implementation of a flow
 pacer, implementers are referred to the Fair Queue packet scheduler (fq qdisc)
 in Linux (3.11 onwards).
 
-
-## Sending data after an idle period
-
-A sender becomes idle if it ceases to send data and has no bytes in flight.  A
-sender's congestion window MUST NOT increase while it is idle.
-
-When sending data after becoming idle, a sender MUST reset its congestion window
-to the initial congestion window (see Section 4.1 of {{?RFC5681}}), unless it
-paces the sending of packets. A sender MAY retain its congestion window if it
-paces the sending of any packets in excess of the initial congestion window.
-
-A sender MAY implement alternate mechanisms to update its congestion window
-after idle periods, such as those proposed for TCP in {{?RFC7661}}.
-
 ## Application Limited Sending

How about "Under-utilizing the Congestion Window"?

-- 
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/2605#pullrequestreview-226331010

---

From: ianswett <[email-masked]>
Date: Mon, 15 Apr 2019 12:34:25 -0700

ianswett commented on this pull request.

-

Done

-- 
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/2605#discussion_r275512872

---

From: ianswett <[email-masked]>
Date: Mon, 15 Apr 2019 12:35:36 -0700

This was written to specifically forbid the cubic bug, but I realize it's not even tight enough to do that, so I'll remove it.

-- 
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/2605#discussion_r275513269

---

From: ianswett <[email-masked]>
Date: Mon, 15 Apr 2019 19:38:02 +0000 (UTC)

b3a0ba475b74b88a1beacfff1b9e1de65d14c6e0  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/2605/files/77de41bcbb27c183f926d906d6d899f016a3eecc..b3a0ba475b74b88a1beacfff1b9e1de65d14c6e0

---

From: ianswett <[email-masked]>
Date: Mon, 15 Apr 2019 19:38:52 +0000 (UTC)

a7f5cb5b9351a435340ac35d58122bb8690952e5  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/2605/files/b3a0ba475b74b88a1beacfff1b9e1de65d14c6e0..a7f5cb5b9351a435340ac35d58122bb8690952e5

---

From: ianswett <[email-masked]>
Date: Mon, 15 Apr 2019 12:38:58 -0700

6eb6813ce6eee9c28a0cb0c3e1e59f936e5e8296  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/2605/files/a7f5cb5b9351a435340ac35d58122bb8690952e5..6eb6813ce6eee9c28a0cb0c3e1e59f936e5e8296

---

From: ianswett <[email-masked]>
Date: Mon, 15 Apr 2019 12:40:58 -0700

17ca3a47a68b0c6d6e67055f631e1be6495cfb73  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/2605/files/6eb6813ce6eee9c28a0cb0c3e1e59f936e5e8296..17ca3a47a68b0c6d6e67055f631e1be6495cfb73

---

From: ianswett <[email-masked]>
Date: Mon, 15 Apr 2019 19:43:59 +0000 (UTC)

4b78a46e5dccfb1eb487402db8f6303f1ed4b6b4  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/2605/files/17ca3a47a68b0c6d6e67055f631e1be6495cfb73..4b78a46e5dccfb1eb487402db8f6303f1ed4b6b4

---

From: ianswett <[email-masked]>
Date: Mon, 15 Apr 2019 19:44:30 +0000 (UTC)

Thanks, updated

Done

-- 
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/2605#pullrequestreview-226840828

---

From: Jana Iyengar <[email-masked]>
Date: Wed, 17 Apr 2019 17:56:03 +0000 (UTC)

I'll take this in, and open an issue for defining "under-utilized 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/2605#issuecomment-484196423

---

From: Jana Iyengar <[email-masked]>
Date: Wed, 17 Apr 2019 10:56:15 -0700

Merged #2605 into master.

-- 
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/2605#event-2283532683