Subject: [tcpm] Questions on HyStart++ draft 02

From: Junho Choi <[email-masked]>
Date: Wed, 1 Apr 2020 16:15:07 -0700

Hi,

I am working on QUIC implementation (https://github.com/cloudflare/quiche)
at Cloudflare. While I am researching on hystart, I came across
HyStart++ recently and I think this is a reasonable replacement of original
hystart, so I started the work based on the hystartplusplus draft 02.

This is about quic implementation but it's more general questions, so I am
posting here.

While I am implementing it, I have a few questions:

1. Section 4.2 -- each round is initialized as

   lastRoundMinRTT = currentRoundMinRTT
   currentRoundMinRTT = infinity
   rttSampleCount = 0

In the very beginning of the connection, what is "currentRoundMinRTT" when
there is no previous value?

I am using current rtt (or initial rtt value) and is it ok?

2. Section 4.2 -- When used with cubic, CA_cwnd() is based on cubic
algorithm I think.
 This means I need to do cubic variables calculation during slow start
 such as K and W_cubic. When is considered as a start of
 congestion avoidance and what W_max will be?

 Currently I use a start of limited slow start as a beginning of congestion
recovery
 and use cwnd at the time for W_max. Is my understanding correct?

Best,

-- 
Junho Choi <junho dot choi at gmail.com>

---

From: Yi Huang <[email-masked]>
Date: Thu, 2 Apr 2020 00:04:33 +0000

Hi Junho,

I have answered your questions inline. Thanks for considering Hystart++ in your QUIC implementation.

Thanks,

Yi

From: Junho Choi <[email-masked]>
Sent: Wednesday, April 1, 2020 4:15 PM
To: Praveen Balasubramanian <[email-masked]>; Yi Huang <[email-masked]>
Cc: [email-masked]
Subject: [EXTERNAL] Questions on HyStart++ draft 02

Hi,

I am working on QUIC implementation (https://github.com/cloudflare/quiche<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcloudflare%2Fquiche&data=02%7C01%7Chuanyi%40microsoft.com%7Cf8e9cd15f09a44b7b48408d7d6929ab2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637213797906475304&sdata=GWqLVWMGQjSDWIQ4SMRil6MPauBwSgSdXC15Zlwn%2F2s%3D&reserved=0>) at Cloudflare. While I am researching on hystart, I came across HyStart++ recently and I think this is a reasonable replacement of original hystart, so I started the work based on the hystartplusplus draft 02.

This is about quic implementation but it's more general questions, so I am posting here.

[Yi]: In our implementation, lastRoundMinRTT and currentRoundMinRTT are initialized to 0xffffffff as sentinel values. We only compare lastRoundMinRTT with currentRoundMinRTT when both of them are valid values. Using currRTT seems to essentially behave the same as assigning a sentinel value.

2. Section 4.2 -- When used with cubic, CA_cwnd() is based on cubic algorithm I think.
 This means I need to do cubic variables calculation during slow start
 such as K and W_cubic. When is considered as a start of
 congestion avoidance and what W_max will be?

 Currently I use a start of limited slow start as a beginning of congestion recovery
 and use cwnd at the time for W_max. Is my understanding correct?

[Yi]: Yes, that’s exactly what we do in Windows.

Best,

--
Junho Choi <junho dot choi at gmail.com<https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgmail.com%2F&data=02%7C01%7Chuanyi%40microsoft.com%7Cf8e9cd15f09a44b7b48408d7d6929ab2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637213797906485304&sdata=GqW%2ByDdGcke%2FkisS4va%2Fx%2F%2FT2b7HlXqrbHwUJymTs58%3D&reserved=0>>

---

From: Junho Choi <[email-masked]>
Date: Thu, 2 Apr 2020 00:55:08 -0700

Hi Yi,

Thanks. See inline for my following question.

On Wed, Apr 1, 2020 at 5:04 PM Yi Huang <[email-masked]> wrote:

> [Yi]: In our implementation, lastRoundMinRTT and currentRoundMinRTT are
> initialized to 0xffffffff as sentinel values. We only compare
> lastRoundMinRTT with currentRoundMinRTT when both of them are valid values.
> Using currRTT seems to essentially behave the same as assigning a sentinel
> value.
>

So in the beginning of the connection lastRoundMinRTT is <inf>. When ack is
received currentRoundMinRTT = min_rtt but
lastRoundMinRTT is still <inf>. When the 1st round ends, it looks always
doing nothing because the following if() is always false?

  if (currentRoundMinRTT >= (lastRoundMinRTT + RttThresh))

> [Yi]: Yes, that’s exactly what we do in Windows.

Sound great. Thanks.

Best,

---

From: Yi Huang <[email-masked]>
Date: Wed, 8 Apr 2020 00:24:36 +0000

Yeah, it does nothing for the first round.

From: Junho Choi <[email-masked]>
Sent: Thursday, April 2, 2020 12:55 AM
To: Yi Huang <[email-masked]>
Cc: Praveen Balasubramanian <[email-masked]>; [email-masked]
Subject: Re: [EXTERNAL] Questions on HyStart++ draft 02

Hi Yi,

On Wed, Apr 1, 2020 at 5:04 PM Yi Huang <[email-masked]<mailto:[email-masked]>> wrote:
1. Section 4.2 -- each round is initialized as

So in the beginning of the connection lastRoundMinRTT is <inf>. When ack is received currentRoundMinRTT = min_rtt but
lastRoundMinRTT is still <inf>. When the 1st round ends, it looks always doing nothing because the following if() is always false?

Sound great. Thanks.

Best,

--
Junho Choi <junho dot choi at gmail.com<https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgmail.com%2F&data=02%7C01%7Chuanyi%40microsoft.com%7C5ed42de0b38e497d502a08d7d6db4055%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637214109469856737&sdata=%2FA2fvoRO0452I5P2CnWRyoDOhO38wHDyOAF6n58UDLY%3D&reserved=0>>

---

From: Junho Choi <[email-masked]>
Date: Tue, 7 Apr 2020 17:32:19 -0700

Ok, thanks for clarifying!

On Tue, Apr 7, 2020 at 5:24 PM Yi Huang <[email-masked]> wrote:

> *From:* Junho Choi <[email-masked]>
> *Sent:* Thursday, April 2, 2020 12:55 AM
> *To:* Yi Huang <[email-masked]>
> *Cc:* Praveen Balasubramanian <[email-masked]>; [email-masked]
> *Subject:* Re: [EXTERNAL] Questions on HyStart++ draft 02
>
>
>
> Hi Yi,
>
>
>
> So in the beginning of the connection lastRoundMinRTT is <inf>. When ack
> is received currentRoundMinRTT = min_rtt but
>
> Junho Choi <junho dot choi at gmail.com
> <https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgmail.com%2F&data=02%7C01%7Chuanyi%40microsoft.com%7C5ed42de0b38e497d502a08d7d6db4055%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637214109469856737&sdata=%2FA2fvoRO0452I5P2CnWRyoDOhO38wHDyOAF6n58UDLY%3D&reserved=0>
> >
>

---

From: Junho Choi <[email-masked]>
Date: Mon, 27 Apr 2020 17:29:42 -0700

FYI, I made a PR https://github.com/cloudflare/quiche/pull/476 for
implementing HyStart++ in quiche, based on draft 02.
The algorithm is modified for QUIC a little (e.g. tcp sequence number vs
quic packet number) but in general it's same.

Best,

---

From: Yi Huang <[email-masked]>
Date: Tue, 28 Apr 2020 00:42:30 +0000

I am excited to see Hystart++ was adopted by your QUIC implementation. Thanks Junho!

Sent: Monday, April 27, 2020 5:30 PM

FYI, I made a PR https://github.com/cloudflare/quiche/pull/476<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcloudflare%2Fquiche%2Fpull%2F476&data=02%7C01%7Chuanyi%40microsoft.com%7Ce2d04fd13ac043cf8dac08d7eb0b54bd%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637236306220848757&sdata=wTup02uocSEYky5utB2eimcI8zYCmzmfv93SNyGYMX4%3D&reserved=0> for implementing HyStart++ in quiche, based on draft 02.
The algorithm is modified for QUIC a little (e.g. tcp sequence number vs quic packet number) but in general it's same.

Best,

On Tue, Apr 7, 2020 at 5:32 PM Junho Choi <[email-masked]<mailto:[email-masked]>> wrote:
Ok, thanks for clarifying!

On Tue, Apr 7, 2020 at 5:24 PM Yi Huang <[email-masked]<mailto:[email-masked]>> wrote:
Yeah, it does nothing for the first round.

From: Junho Choi <[email-masked]<mailto:[email-masked]>>
Sent: Thursday, April 2, 2020 12:55 AM
To: Yi Huang <[email-masked]<mailto:[email-masked]>>
Cc: Praveen Balasubramanian <[email-masked]<mailto:[email-masked]>>; [email-masked]<mailto:[email-masked]>
Subject: Re: [EXTERNAL] Questions on HyStart++ draft 02

Hi Yi,

Sound great. Thanks.

Best,

--
Junho Choi <junho dot choi at gmail.com<https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgmail.com%2F&data=02%7C01%7Chuanyi%40microsoft.com%7Ce2d04fd13ac043cf8dac08d7eb0b54bd%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637236306220858750&sdata=f8cekJiJx4S625oCkaUDVymXiVPknaarRR9IuLhytfs%3D&reserved=0>>

--
Junho Choi <junho dot choi at gmail.com<https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgmail.com%2F&data=02%7C01%7Chuanyi%40microsoft.com%7Ce2d04fd13ac043cf8dac08d7eb0b54bd%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637236306220868745&sdata=FHoov33SoCU1DWSZZ0n4DqCL0tQVjBrLc2mGBXNxI0Q%3D&reserved=0>>

--
Junho Choi <junho dot choi at gmail.com<https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgmail.com%2F&data=02%7C01%7Chuanyi%40microsoft.com%7Ce2d04fd13ac043cf8dac08d7eb0b54bd%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637236306220868745&sdata=FHoov33SoCU1DWSZZ0n4DqCL0tQVjBrLc2mGBXNxI0Q%3D&reserved=0>>