Subject: Re: [iccrg] [tcpm] Cwnd growth after fast convergence in CUBIC

From: Vidhi Goel <[email-masked]>
Date: Fri, 06 Nov 2020 19:27:32 -0800

++

> Agreed, and this is basically what Vidhi has suggested as well. In my option it is slightly
> more clear to introduce cwnd into the calculation of K as Vidhi has done. I suppose it comes 
> down to where in a particular implementation one calculates K.
> 
> One note: If W_last_max were to be incorporated into K, the special case mentioned in section 
> 4.8 about exiting hybrid slow start would also need to be updated to mention setting 
> W_last_max = W_max = cwnd, as W_last_max  would not have been set in such a case. 

The way we have implemented Cubic, using W_last_max won’t work for us either. Previous suggestion of using `cwnd` works for us,
K = cbrt(W_max - cwnd / C)

> That said, the intent was to document what the Linux code was doing at the time. Is there a difference between the RFC and what Linux has been doing or is doing now? If yes, it might be time to revise the RFC.
> 
> (I think Martin Thomson also found some nits recently.)

Revising the RFC would be good. While we are on the topic, there is one more thing that could use a discussion.

Christoph (cc’ed) and I had discussed this earlier regarding alpha_aimd used for TCP friendly region. 

Currently, alpha_aimd = 3*(1-beta_cubic)/(1+beta_cubic) // for the entire TCP friendly region

But we think that once the cwnd in TF region reaches W_max, we should set the alpha_aimd to 1 to have similar behavior as standard TCP congestion algorithm (eg. NewReno)

if (W_est < W_max)
	alpha_aimd = 3*(1-beta_cubic)/(1+beta_cubic)
else
	alpha_aimd = 1

Let me know your thoughts on this. I'd be happy to work on this.

Thanks,
Vidhi

> On Nov 6, 2020, at 12:34 PM, Rosenblum, Wesley <[email-masked]> wrote:
> 
> Agreed, and this is basically what Vidhi has suggested as well. In my option it is slightly
> more clear to introduce cwnd into the calculation of K as Vidhi has done. I suppose it comes 
> down to where in a particular implementation one calculates K.
> 
> One note: If W_last_max were to be incorporated into K, the special case mentioned in section 
> 4.8 about exiting hybrid slow start would also need to be updated to mention setting 
> W_last_max = W_max = cwnd, as W_last_max  would not have been set in such a case. 
> 
> Thanks,
> Wesley
> 
> On 11/6/20, 6:10 AM, "Neal Cardwell" <ncardwell=[email-masked]> wrote:
>> AFAICT,  changing Eq 2 to the following might fix the RFC and make it
>> match the Linux TCP CUBIC behavior:
>> 
>>        K = cubic_root(W_max - W_last_max*beta_cubic)/C) (Eq. 2)
> 
>    best,
>    neal
>

---

From: Vidhi Goel <[email-masked]>
Date: Fri, 06 Nov 2020 20:08:49 -0800

+Christoph

> On Nov 6, 2020, at 7:27 PM, Vidhi Goel <vidhi_goel=[email-masked]> wrote:
> 
> ++
> 
>> On Nov 6, 2020, at 12:34 PM, Rosenblum, Wesley <[email-masked] <mailto:[email-masked]>> wrote:
>> 
>> On 11/6/20, 6:10 AM, "Neal Cardwell" <ncardwell=[email-masked] <mailto:ncardwell=[email-masked]>> wrote:
> _______________________________________________
> tcpm mailing list
> [email-masked]
> https://www.ietf.org/mailman/listinfo/tcpm