Skip to content
This repository has been archived by the owner on Aug 28, 2023. It is now read-only.

Question on AIMD-Friendly Region #47

Closed
junhochoi opened this issue Feb 25, 2021 · 7 comments · Fixed by #49
Closed

Question on AIMD-Friendly Region #47

junhochoi opened this issue Feb 25, 2021 · 7 comments · Fixed by #49
Assignees

Comments

@junhochoi
Copy link
Contributor

junhochoi commented Feb 25, 2021

Hi, while I am implementing this change in quiche, I want to make sure my understanding is correct on "AIMD-Friendly Region" section.

It says to use

W_{est} = W_{est} + α_{aimd} * \frac{segments\_acked}{cwnd}

To calculate W_est value and alpha_aimd initially is

α_{aimd} = 3 * \frac{1 - β_{cubic}}{1 + β_{cubic}}

Since β_{cubic is 0.7 (Section 4.6), it comes down to

α_{aimd} = 3 * (1-0.7)/(1+0.7) = 0.529

And α_{aimd} will become 1 when W_est >= W_max.

Which means in each ACK, W_est can be calculated as follows:

W_est = W_est + 0.529 * (segments_acked / cwnd)               (W_est < W_max)
W_est = W_est + 1 * (segments_acked / cwnd)                   (W_est >= W_max)

Is my understanding correct? My concern is when W_est < W_max, it's slower than Reno.

Also, I think the definition of segments_acked is missing in the draft.

@goelvidhi
Copy link
Contributor

It looks right. In CUBIC, we start with W_est = 0.7 * cwnd (which is higher than new Reno).

The idea of AIMD growth for W_est is to reach the W_max in the same amount of time as New Reno would and as we have a higher starting point for W_est, the growth function is slower than new Reno. And after W_est has reached W_max, we continue with Reno like growth.

Reg. definition of segments_acked, we could add it. Although it seemed obvious to me. :-)

@junhochoi
Copy link
Contributor Author

junhochoi commented Feb 26, 2021

Thanks for a kind explanation!

I have some more questionㄴ during my implementation:

  1. In the draft, W_est is
W_est = W_est + alpha_aimd * (segments_acked / cwnd)   (Fig. 4)

However, I think cwnd here is W_est, to match to Reno definition?

W_est = W_est + alpha_aimd * (segments_acked / W_est)

Otherwise I am confused what is cwnd here. In the beginning of CA cwnd is 7, but both using the same value or a current cwnd doesn't make sense to me.

Also in any case it's slower growth than Reno.

  1. assuming I use 2nd equation for W_est, I tried to plot each W_* values:
  • W_max = 10
  • When I run Reno separately, it starts from 5 (10 x 0.5). (Reno cwnd)
  • W_est starts from 7 (10 * 0.7). I expect it will meet at W_max, but in the sheet, both meet around after 8.8 (after 12 ACKs) in the draft, not 10.
  • W_cubic is only for reference. it doesn't need to match at 10
  • X = time Y = cwnd

Screen Shot 2021-02-25 at 11 48 10 PM

After 10, both never meet again because they use same slope.

I tried to play with a different alpha_aimd values and when alpha_aimd = 0.7 (beta_cubic) both meet at 10.

Screen Shot 2021-02-25 at 11 49 52 PM

Is my understanding correct?

Datasheet is here: https://docs.google.com/spreadsheets/d/1DvNb-hmPpJ31M7RWWqHNCIgBQwKLXWewvzDDWraG8ns/edit?usp=sharing

@junhochoi junhochoi reopened this Feb 26, 2021
@goelvidhi
Copy link
Contributor

However, I think cwnd here is W_est, to match to Reno definition?

W_est = W_est + alpha_aimd * (segments_acked / W_est)

Otherwise I am confused what is cwnd here. In the beginning of CA cwnd is 7, but both using the same value or a current cwnd doesn't make sense to me.

cwnd is current congestion window (cubic window or AIMD window, whichever is greater) because we want to increase by alpha_aimd on every RTT and only the current congestion window (not AIMD window) represents one RTT when the full window is ACKed.

@junhochoi
Copy link
Contributor Author

@goelvidhi Thanks. I tried cwnd (updated my sheet) as well but it doesn't completely solve my concern, this simulated AIMD started bigger than Reno (because beta_cubic(0.7) > 0.5 of Reno) but soon it's slower growth than Reno. If this is true, simply running Reno in parallel and taking max(reno, cubic) in AIMD region would help. However let it closed and I'll look into a little more.

@larseggert
Copy link
Contributor

(I don't think this should have been closed.)

@larseggert larseggert reopened this Mar 3, 2021
@lisongxu
Copy link
Contributor

lisongxu commented Mar 3, 2021

Hi Junho,

The AIMD (a, b) analysis considers the steady-state performance with a deterministic loss model

  • a deterministic loss model: a packet is lost every 1/p packet.
  • steady state: cwnd increases and reaches Wmax just before a packet is lost, and then it repeats the same pattern again and again.

There is a relation between a and b such that AIMD(a,b) achieves the same average cwnd for a given p.

The above analysis assumes that cwnd increases up to Wmax, and thus a is only the increase parameter up to W_max.

Thank you
Lisong

@junhochoi
Copy link
Contributor Author

@lisongxu Thanks for your kind explanation! Yes now I understand better. Closing this ticket.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants