Subject: [quicwg/base-drafts] Recovery: Corner case for when persistent congestion does not go into slow start (#4826)

From: Martine Lenders <[email-masked]>
Date: Mon, 08 Feb 2021 10:39:18 -0800

When strictly following the pseudo-code in appendix B of `draft-ietf-quic-recovery`, one might encounter a corner case where persistent congestion is encountered, but slow start is not entered.

Say, `congestion_window` is already at `kMinimalWindow`. Then as per 

```
ssthresh = congestion_window * kLossReductionFactor
```

in B.6 `ssthresh` will become less than `kMinimalWindow` (when using the recommended value of 0.5 for `kLossReductionFactor`). The line directly below adjusts for the `congestion_window` not to drop under `kMinimalWindow`.

However, B.6's `OnCongestionEvent` is called in B.8's `OnPacketsLost` which sets `congestion_window` to `kMinimalWindow` when persistent congestion is established and would in most cases thus enter slow start, as described in section 7.3, but not in the case outlined above: `congestion_window == kMinimalWindow` would be greater than `ssthresh` and thus we would be in congestion avoidance as defined in section 7.3.3. Since I think many developers will orient themselves on this pseudo-code

```
       congestion_window = kMinimumWindow
       congestion_recovery_start_time = 0
```

should either outright just be replaced with `enterSlowStart()` or something similar. Alternatively it could also provide a sufficient setting for `ssthresh` (e.g. `infinite`?).

Sorry if this is not the right venue to post something like this or if the draft is already on its way to publication and thus not changeable in such a manner anymore. I usually don't comment on a draft that late into its development.

-- 
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/issues/4826

---

From: Jana Iyengar <[email-masked]>
Date: Tue, 09 Feb 2021 15:10:07 -0800

This is exactly as it's supposed to be. In the case you describe, your ssthresh is so low that it has to be adjusted up, to kMinimumWindow. In this case, it is exactly correct for the sender to enter congestion avoidance; slow start is meant for when the sender's cwnd increases exponentially to the known good ssthresh. Since cwnd here is the same as ssthresh, there's no reason to exponentially increase towards 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/issues/4826#issuecomment-776305871

---

From: ianswett <[email-masked]>
Date: Tue, 09 Feb 2021 15:22:24 -0800

I tend to agree with @janaiyengar that this is WAI

-- 
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/issues/4826#issuecomment-776311611

---

From: Martine Lenders <[email-masked]>
Date: Tue, 09 Feb 2021 15:33:45 -0800

> This is exactly as it's supposed to be. In the case you describe, your ssthresh is so low that it has to be adjusted up, to kMinimumWindow. In this case, it is exactly correct for the sender to ent…

But in that case it seems to be that the graph in section 7.3 is somewhat incomplete, where it states

```
                    New Path or      +------------+
               persistent congestion |   Slow     |
           (O)---------------------->|   Start    |
                                     +------------+
```

-- 
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/issues/4826#issuecomment-776316765

---

From: Lucas Pardue <[email-masked]>
Date: Sun, 21 Feb 2021 15:10:36 -0800

@ianswett @janaiyengar do you have a response?

-- 
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/issues/4826#issuecomment-782946081