Subject: [tcpm] Review: draft-balasubramanian-tcpm-hystartplusplus-01

From: Martin Duke <[email-masked]>
Date: Sat, 15 Feb 2020 18:20:24 -0800

Hi Praveen,

Thanks for writing this up. It's great to hear what's actually happening
out there with major implementations.

1. I think this draft has a somewhat uncomfortable relationship with ABC
(RFC 3465), which for some reason is still Experimental. In each
description of Slow Start (Sec 1 and 3.2) you say one MSS per ack, which is
the non-ABC Reno behavior. But then the actual LSS algorithm uses bytes
counted.

Note that for a non-ABC implementation that also uses HyStart++, this means
an LSS_DIVISOR as low as 0.5 can cause LSS to be *more* aggressive than
regular slow start if the receiver acks every other packet. In the non-RFC
but common case where ACKs are aggregated even more aggressively, LSS can
be more aggressive than slow start for arbitrarily low divisor values. I'm
not sure the design has to change, but there ought to be some discussion of
these considerations.

2. in section 3.2, you set the ssthresh to cwnd upon entering LSS. But then
later you say "HyStart++ ends when cwnd exceeds ssthresh..." which by
definition is immediately. I think you mean the normal Reno/Cubic ssthresh;
perhaps it would be better to invent a new name for the value that is used
in computing K.

Similarly, I don't believe MIN_SSTHRESH has any relationship to the
conventional ssthresh (i.e. it is not a minimum) and therefore should also
be renamed.

3. Section 3.3 could use some further considerations for setting these
parameters. In particular, values of LSS_DIVISOR > 1 will be more
aggressive than slow start, at least for low values of cwnd/ssthresh.
Depending on the result of #1 above, the warning may need to be for a lower
value.

4. Though not necessary to make this draft worthwhile, some data from
Microsoft's deployment showing the value of this would be helpful. If I
were to try to sell this feature to our customers, they would probably want
to see that it was providing benefits to large traffic generators rather
than backing off for the good of the internet. In particular, I wonder
whether Reno/Cubic is fair to Hystart++ as regular slow start would seem to
cause LSS to cut the throttle.

Nits:
- Please spell out SMSS before using it.
- Title of 3.3: s/Constant/Constants
- 3.3. You are little sloppy with units. MIN_SSTHRESH is clearly measured
in bytes in Sec 3.2 but is reported in segments in this section.