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

Neal Cardwell <> Tue, 09 July 2019 22:54 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id ECFA412009C for <>; Tue, 9 Jul 2019 15:54:29 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -16.104
X-Spam-Status: No, score=-16.104 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, HTML_MESSAGE=0.001, HTTPS_HTTP_MISMATCH=0.1, PDS_NO_HELO_DNS=1.295, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5] autolearn=no autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (2048-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id SdGQUiLHf8YX for <>; Tue, 9 Jul 2019 15:54:26 -0700 (PDT)
Received: from ( [IPv6:2607:f8b0:4864:20::334]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 9606012006D for <>; Tue, 9 Jul 2019 15:54:26 -0700 (PDT)
Received: by with SMTP id q10so167432otk.10 for <>; Tue, 09 Jul 2019 15:54:26 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=A604BZYGFMjZYZZvEOVDC6Wq7Q8OT7l92p67dURBx20=; b=BmnPbMtvYjvSQi9MI3kE3TqzCUu9bQd0zbHj7SgN/x84s1I+26Fqen35pC6+YVGcUg FIoydLgqnoxw/FhCFahE0uQeUX24R2Y6oAEfFLauezs27Gr/fLkCbreX5L6wZtzsaVgP rmlxxRgIgdIIjH1Wjt/e76wVyCsd9U1ZH5/weuvf4Wu88APw/AFOCxciuUFq/QjwPOCv F7z+Ib5IXBSgpaC9hjoL53vzEOI9Oaigadq/ZVSPzS8uobCW7m99Kwp2ReKVDgqcAMQO Wo5TaGREJBY7G4D8zhEuy1qjTpVXuK3EbrksKAKNQ+Sv2mT0df7mZsauiK0vPmjB4ewV o5Cw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=A604BZYGFMjZYZZvEOVDC6Wq7Q8OT7l92p67dURBx20=; b=qAEBcG5cCEESR0XHCHEoQ83OSwog+91Ez80WguHYR29bj0vsSrK+Kc4jBVprlzQov5 pHrEe1CgErWGKwocpgVD0TzJlKNF4zlhfYnV1irxgId7mbJKHKchvnQrZoLy87YCczm8 XhKug8lTWkx5VIOmoAMjkZHgp33LYbKVTpoSwHgCM417zBEL97mEIGcqMKVcsSab9Dr7 fo11z267Td16nVsJWhEvQHnMO9LAHfJKjZqqA3tie2AMCgw3KllO14943Ck8OrTtGX48 24/pcVM2+32Z5oAVcx52rkdsKurDNxmiuoUP/jAOOrB9Ic5lXQcIcLMHMsVfrpXe9UWh qrFA==
X-Gm-Message-State: APjAAAUmL6KB6QS+qd4hLz3u7b+CDqrCfaVez2cKyeJTHN84NmrNFAMd A4jHuqA+M3oa6RT5tghoy1UuG+hr3Y6+HCts9h/yOA==
X-Google-Smtp-Source: APXvYqzGZJeT5/4SRUdA8jjv1+r+YKpEYcjxZZsPXmSs0AvR1xu5f5/cnu09CQtSFYQb5uLYRlsTRS3sV3qfiqgLxEc=
X-Received: by 2002:a9d:6742:: with SMTP id w2mr21613123otm.371.1562712865403; Tue, 09 Jul 2019 15:54:25 -0700 (PDT)
MIME-Version: 1.0
References: <> <> <> <>
In-Reply-To: <>
From: Neal Cardwell <>
Date: Tue, 09 Jul 2019 18:54:07 -0400
Message-ID: <>
To: Praveen Balasubramanian <>
Cc: Praveen Balasubramanian <>, "" <>, Matt Olson <>, Yi Huang <>
Content-Type: multipart/alternative; boundary="0000000000003ae129058d477107"
Archived-At: <>
Subject: Re: [tcpm] FW: New Version Notification for draft-balasubramanian-tcpm-hystartplusplus-00.txt
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Tue, 09 Jul 2019 22:54:30 -0000

On Tue, Jul 9, 2019 at 6:18 PM Praveen Balasubramanian <pravb=> 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!

> What was the reason for Linux to switch to lifetimeMinRTT? On Wifi links
> 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.


-----Original Message-----
> From: tcpm <> On Behalf Of Neal Cardwell
> Sent: Tuesday, July 9, 2019 8:07 AM
> To: Praveen Balasubramanian <>
> Cc:; Matt Olson <>
> 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=
>> wrote:
> >
> > We submitted a draft for modified slow start using HyStart and Limited
> Slow Start. Feedback is welcome.
> Thanks for posting this draft! (
> )
> 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
> _______________________________________________
> tcpm mailing list