Subject: [tcpm] FW: New Version Notification for draft-balasubramanian-tcpm-hystartplusplus-00.txt

From: Praveen Balasubramanian <[email-masked]>
Date: Mon, 8 Jul 2019 23:07:53 +0000

We submitted a draft for modified slow start using HyStart and Limited Slow Start. Feedback is welcome.

Thanks

-----Original Message-----
From: [email-masked] <[email-masked]>
Sent: Monday, July 8, 2019 4:00 PM
To: Matt Olson <[email-masked]>; Yi Huang <[email-masked]>; Praveen Balasubramanian <[email-masked]>
Subject: New Version Notification for draft-balasubramanian-tcpm-hystartplusplus-00.txt

A new version of I-D, draft-balasubramanian-tcpm-hystartplusplus-00.txt

has been successfully submitted by Praveen Balasubramanian and posted to the IETF repository.

Name:                  draft-balasubramanian-tcpm-hystartplusplus

Revision:              00

Title:                      HyStart++: Modified Slow Start for TCP

Document date:               2019-07-08

Group:                  Individual Submission

Pages:                   6

URL:            https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ietf.org%2Finternet-drafts%2Fdraft-balasubramanian-tcpm-hystartplusplus-00.txt&amp;data=02%7C01%7Cpravb%40microsoft.com%7C4572866b96dc44c6772f08d703f7f8bd%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636982235874976240&amp;sdata=yrbX55sgb0D1ZwZPE9nSky%2FLwPUFGxRN7s99%2B%2FjIdc8%3D&amp;reserved=0

Status:         https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fdraft-balasubramanian-tcpm-hystartplusplus%2F&amp;data=02%7C01%7Cpravb%40microsoft.com%7C4572866b96dc44c6772f08d703f7f8bd%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636982235874976240&amp;sdata=zaKveFOsa5BVb6hRrtzYTfYQVNiZpG9WCIQB8B6ZAto%3D&amp;reserved=0

Htmlized:       https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Fdraft-balasubramanian-tcpm-hystartplusplus-00&amp;data=02%7C01%7Cpravb%40microsoft.com%7C4572866b96dc44c6772f08d703f7f8bd%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636982235874976240&amp;sdata=CARnufSBj811cAIEe%2BJjAwV4tV5nw%2F%2FD8120ZUGsGtQ%3D&amp;reserved=0

Htmlized:       https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Fdraft-balasubramanian-tcpm-hystartplusplus&amp;data=02%7C01%7Cpravb%40microsoft.com%7C4572866b96dc44c6772f08d703f7f8bd%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636982235874976240&amp;sdata=GZep6ov2SZeIxZ3Wqq3kKOHDnBok0W%2BRFuYw1iXATUM%3D&amp;reserved=0

Abstract:

   This experimental memo describes HyStart++, a simple modification to

   the slow start phase of TCP congestion control algorithms.  HyStart++

   combines the use of one variant of HyStart and Limited Slow Start

   (LSS) to prevent overshooting of the ideal sending rate value, while

   also mitigating poor performance which can result from false

   positives when HyStart is used alone.  This memo also describes the

   details of the current implementation in the Windows operating

   system.

Please note that it may take a couple of minutes from the time of submission until the htmlized version and diff are available at tools.ietf.org.

The IETF Secretariat

---

From: Neal Cardwell <[email-masked]>
Date: Tue, 9 Jul 2019 11:06:58 -0400

> We submitted a draft for modified slow start using HyStart and Limited Slow Start. Feedback is welcome.

Thanks for posting this draft! (
https://tools.ietf.org/html/draft-balasubramanian-tcpm-hystartplusplus-00
)

This is a very nice, clear document, IMHO.

I was curious about a couple of items:

(1) In the draft the condition for exiting slow start is:

            Eta = clamp(MIN_ETA, currentRoundMinRTT / 8, MAX_ETA)
            if (currentRoundMinRTT >= (lastRoundMinRTT + Eta))

The use of currentRoundMinRTT/8 to compute Eta is counterintuitive to
me, and is different from both the Hystart paper and the Linux CUBIC
Hystart implementation from the CUBIC authors.

The Hystart paper used (modified pseudocode):

  if (currentRoundMinRTT> lastRoundMinRTT + clamp(lastRoundMinRTT / 16))

The Linux implementation from the Hystart author Sangtae Ha in 2008
used the approach (pseudocode):

  if (currentRoundMinRTT> lifetimeMinRTT + clamp(lifetimeMinRTT / 16))

Eric Dumazet changed the Linux approach in 2014 to use a different
constant scaling factor (also pseudocode):

  if (currentRoundMinRTT> lifetimeMinRTT + clamp(lifetimeMinRTT / 8))

I am curious about the rationale for:

(a) Using an RTT threshold for exiting slow-start that is based on
currentRoundMinRTT/8, rather than being purely a function of the RTT
values from previous rounds (as in the Hystart paper) or the lifetime
of the connection (as in Linux)?

(b) Using a function of lastRoundMinRTT and currentRoundMinRTT for the
exit threshold, rather than a function of the min RTT over the
lifetime of the connection ("lifetimeMinRTT" in my pseudocode, above)?
Is the rationale here partly to deal with fluctuations in RTT due to
cellular/wifi/DOCSIS paths with noisy RTTs?

Any background on the motivation would be interesting to hear, or
perhaps to include in future drafts.

(2) The Limited Slow-Start approach described in the draft seems to
boil down to increasing cwnd by roughly ssthresh/4 each round trip.
It does seem like that would be considerably faster than Reno or CUBIC
would normally grow in congestion avoidance, for the first few seconds
after exiting slow start. But it does seem to be essentially just a
large additive increase. And so it would seem that if CUBIC were
instead in its native CUBIC congestion avoidance instead of limited
slow-start, then CUBIC would eventually (e.g. after a few seconds)
tend to reach the rapid-growth convex portion of the cubic curve, and
eventually grow much faster (eventually reaching exponential growth of
1.5x per round trip). I wonder if it would be advantageous for CUBIC
connections exiting HyStart++ to use a  strategy of growing the cwnd
using the maximum of the schedule calculated using limited slow-start
and the schedule calculated using the normal CUBIC congestion
avoidance logic. That seems like it might have the potential to
mitigate performance issues for CUBIC connections that spuriously exit
slow-start too soon?

best regards,
neal

---

From: Praveen Balasubramanian <[email-masked]>
Date: Tue, 9 Jul 2019 22:18:16 +0000

Re (1). Great catch Neal. That's a bug in the draft and not in our implementation. Eta is computed based on lastRoundMinRTT and not currentRoundMinRTT. We will fix this in next revision.

What was the reason for Linux to switch to lifetimeMinRTT? On Wifi links RTT does fluctuate a lot.

Re (2). I agree that the goal is to find a function that's faster than CA and slower than slow start. LSS works well in practice. For long lived flows on high BDP links incorporating the CUBIC CA early can help and that's a good idea. But given that this is an informational RFC describing the current implementation, we'd have to experiment and deploy any changes before updating the text. We will look into it.

-----Original Message-----
From: tcpm <[email-masked]> On Behalf Of Neal Cardwell
Sent: Tuesday, July 9, 2019 8:07 AM
To: Praveen Balasubramanian <pravb=[email-masked]>
Cc: [email-masked]; Matt Olson <[email-masked]>
Subject: Re: [tcpm] FW: New Version Notification for draft-balasubramanian-tcpm-hystartplusplus-00.txt

Thanks for posting this draft! (
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Fdraft-balasubramanian-tcpm-hystartplusplus-00&amp;data=02%7C01%7Cpravb%40microsoft.com%7Ccf008cd4a3ae41e87e7d08d7047f2c33%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636982816578522537&amp;sdata=GttDyDYhw3sG%2BxDGAFSefMYeRyNfjeUih6XVvbJa7MQ%3D&amp;reserved=0
)

The use of currentRoundMinRTT/8 to compute Eta is counterintuitive to me, and is different from both the Hystart paper and the Linux CUBIC Hystart implementation from the CUBIC authors.

The Linux implementation from the Hystart author Sangtae Ha in 2008 used the approach (pseudocode):

Eric Dumazet changed the Linux approach in 2014 to use a different constant scaling factor (also pseudocode):

(a) Using an RTT threshold for exiting slow-start that is based on currentRoundMinRTT/8, rather than being purely a function of the RTT values from previous rounds (as in the Hystart paper) or the lifetime of the connection (as in Linux)?

(b) Using a function of lastRoundMinRTT and currentRoundMinRTT for the exit threshold, rather than a function of the min RTT over the lifetime of the connection ("lifetimeMinRTT" in my pseudocode, above)?
Is the rationale here partly to deal with fluctuations in RTT due to cellular/wifi/DOCSIS paths with noisy RTTs?

Any background on the motivation would be interesting to hear, or perhaps to include in future drafts.

(2) The Limited Slow-Start approach described in the draft seems to boil down to increasing cwnd by roughly ssthresh/4 each round trip.
It does seem like that would be considerably faster than Reno or CUBIC would normally grow in congestion avoidance, for the first few seconds after exiting slow start. But it does seem to be essentially just a large additive increase. And so it would seem that if CUBIC were instead in its native CUBIC congestion avoidance instead of limited slow-start, then CUBIC would eventually (e.g. after a few seconds) tend to reach the rapid-growth convex portion of the cubic curve, and eventually grow much faster (eventually reaching exponential growth of 1.5x per round trip). I wonder if it would be advantageous for CUBIC connections exiting HyStart++ to use a  strategy of growing the cwnd using the maximum of the schedule calculated using limited slow-start and the schedule calculated using the normal CUBIC congestion avoidance logic. That seems like it might have the potential to mitigate performance issues for CUBIC connections that spuriously exit slow-start too soon?

best regards,
neal

_______________________________________________
tcpm mailing list
[email-masked]
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ietf.org%2Fmailman%2Flistinfo%2Ftcpm&amp;data=02%7C01%7Cpravb%40microsoft.com%7Ccf008cd4a3ae41e87e7d08d7047f2c33%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636982816578522537&amp;sdata=0Sjqt2FWz1rKTqply%2FMJIzGeleyolWWNObL58KdCxm4%3D&amp;reserved=0

---

From: Neal Cardwell <[email-masked]>
Date: Tue, 9 Jul 2019 18:54:07 -0400

On Tue, Jul 9, 2019 at 6:18 PM Praveen Balasubramanian <pravb=
[email-masked]> wrote:

> Re (1). Great catch Neal. That's a bug in the draft and not in our
> implementation. Eta is computed based on lastRoundMinRTT and not
> currentRoundMinRTT.. We will fix this in next revision.
>

Got it. Thanks!

> RTT does fluctuate a lot.

I'm not sure what the motivation was. The "Taming the Elephants" paper and
dissertation both use the lastRoundMinRTT, but the code that was submitted
to Linux (ae27e98a51526595837 on Oct 29 2008) uses the  lifetimeMinRTT,
without a comment about the rationale. I can imagine both approaches having
pros and cons.

> Re (2). I agree that the goal is to find a function that's faster than CA
> and slower than slow start. LSS works well in practice. For long lived
> flows on high BDP links incorporating the CUBIC CA early can help and
> that's a good idea. But given that this is an informational RFC describing
> the current implementation, we'd have to experiment and deploy any changes
> before updating the text. We will look into it.
>

Makes sense.

thanks,
neal

-----Original Message-----
> Subject: Re: [tcpm] FW: New Version Notification for
> draft-balasubramanian-tcpm-hystartplusplus-00.txt
>
> On Mon, Jul 8, 2019 at 7:11 PM Praveen Balasubramanian <pravb=
> [email-masked]> wrote:
> >
> The use of currentRoundMinRTT/8 to compute Eta is counterintuitive to me,
> and is different from both the Hystart paper and the Linux CUBIC Hystart
> implementation from the CUBIC authors.
>
> currentRoundMinRTT/8, rather than being purely a function of the RTT values
> from previous rounds (as in the Hystart paper) or the lifetime of the
> connection (as in Linux)?
>
> exit threshold, rather than a function of the min RTT over the lifetime of
> the connection ("lifetimeMinRTT" in my pseudocode, above)?
> (2) The Limited Slow-Start approach described in the draft seems to boil
> down to increasing cwnd by roughly ssthresh/4 each round trip.
> after exiting slow start. But it does seem to be essentially just a large
> additive increase. And so it would seem that if CUBIC were instead in its
> native CUBIC congestion avoidance instead of limited slow-start, then CUBIC
> would eventually (e.g. after a few seconds) tend to reach the rapid-growth
> convex portion of the cubic curve, and eventually grow much faster
> (eventually reaching exponential growth of 1.5x per round trip). I wonder
> if it would be advantageous for CUBIC connections exiting HyStart++ to use
> a  strategy of growing the cwnd using the maximum of the schedule
> calculated using limited slow-start and the schedule calculated using the
> normal CUBIC congestion avoidance logic. That seems like it might have the
> potential to mitigate performance issues for CUBIC connections that
> spuriously exit slow-start too soon?
>
> best regards,
> neal
>

---

From: Praveen Balasubramanian <[email-masked]>
Date: Mon, 22 Jul 2019 22:48:29 +0000

We published the next revision incorporating changes to the algorithm and some editorial fixes.

From: Neal Cardwell <[email-masked]>
Sent: Tuesday, July 9, 2019 3:54 PM
To: Praveen Balasubramanian <pravb=[email-masked]>
Cc: Praveen Balasubramanian <[email-masked]>; [email-masked]; Matt Olson <[email-masked]>; Yi Huang <[email-masked]>
Subject: Re: [tcpm] FW: New Version Notification for draft-balasubramanian-tcpm-hystartplusplus-00.txt

On Tue, Jul 9, 2019 at 6:18 PM Praveen Balasubramanian <pravb=[email-masked]<mailto:[email-masked]>> wrote:
Re (1). Great catch Neal. That's a bug in the draft and not in our implementation. Eta is computed based on lastRoundMinRTT and not currentRoundMinRTT.. We will fix this in next revision.

Got it. Thanks!

I'm not sure what the motivation was. The "Taming the Elephants" paper and dissertation both use the lastRoundMinRTT, but the code that was submitted to Linux (ae27e98a51526595837 on Oct 29 2008) uses the  lifetimeMinRTT, without a comment about the rationale. I can imagine both approaches having pros and cons.

Makes sense.

thanks,
neal

-----Original Message-----
From: tcpm <[email-masked]<mailto:[email-masked]>> On Behalf Of Neal Cardwell
Sent: Tuesday, July 9, 2019 8:07 AM
To: Praveen Balasubramanian <pravb=[email-masked]<mailto:[email-masked]>>
Cc: [email-masked]<mailto:[email-masked]>; Matt Olson <[email-masked]<mailto:[email-masked]>>
Subject: Re: [tcpm] FW: New Version Notification for draft-balasubramanian-tcpm-hystartplusplus-00.txt

Thanks for posting this draft! (
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Fdraft-balasubramanian-tcpm-hystartplusplus-00&amp;data=02%7C01%7Cpravb%40microsoft.com%7Ccf008cd4a3ae41e87e7d08d7047f2c33%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636982816578522537&amp;sdata=GttDyDYhw3sG%2BxDGAFSefMYeRyNfjeUih6XVvbJa7MQ%3D&amp;reserved=0<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Fdraft-balasubramanian-tcpm-hystartplusplus-00&data=02%7C01%7Cpravb%40microsoft.com%7Ca9fc7690aa17431e74e008d704c0649d%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636983096687312111&sdata=R2jKzyocU4bv2tHdS62k3yAB2d3UagtpKlfAc5gdHgc%3D&reserved=0>
)

best regards,
neal

_______________________________________________
tcpm mailing list
[email-masked]<mailto:[email-masked]>
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ietf.org%2Fmailman%2Flistinfo%2Ftcpm&amp;data=02%7C01%7Cpravb%40microsoft.com%7Ccf008cd4a3ae41e87e7d08d7047f2c33%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636982816578522537&amp;sdata=0Sjqt2FWz1rKTqply%2FMJIzGeleyolWWNObL58KdCxm4%3D&amp;reserved=0<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ietf.org%2Fmailman%2Flistinfo%2Ftcpm&data=02%7C01%7Cpravb%40microsoft.com%7Ca9fc7690aa17431e74e008d704c0649d%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636983096687312111&sdata=ToR6qaSuhKKBGhEHwfpwTfOovkKKTOCHRBo2t59V1K4%3D&reserved=0>