-
Notifications
You must be signed in to change notification settings - Fork 179
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cubic needs multiple stabilization steps after Hystart #1830
Comments
Tried implementing the divide by 2 simplification. Almost all tests pass, but the satellite cubic test completes in 8 seconds instead of 6.1 -- not quite an acceptable performance loss. |
The first attempt was too simple: we already had code managing the start of long delay connections, already lowering CWIN to a manageable value. We should not divide the window by 2 if that code is already applied. With that fix, all the tests pass. We do not observe performance regression. In fact, avoiding the "rebounds" also avoids packet losses, which improves performance overall. After the changes in PR #1831, we get the following: The PR makes two changes:
We can see on the traces that the "bounces" are gone, and the connection proceeds normally. |
Ok, just want to share my thoughts. In general congestion feedback usually arrives 1 RTT later. In the
In If we increase the buffer size of Otherwise, if we decrease the buffer size of However, in my opinion these steps depend on the buffer size of the path. If the buffer can absorb the overshoot or not.
Currently, picoquic reduces the CWND by When I compare the two versions of |
Cubic connections start with an initial 'slow start' phase running Hystart. In theory, Hystart stops after sensing delay increases, and then the connection should continue from a safe point. In practice, we see something else, as shown in this snapshot of the initial connection phase in the qlog traces of a cubic run:
We see three steps down, and we also see a series of packet losses continuing well after the first two steps. In this example, the Hystart process exits after the notification of delay increase, and immediately sets "ssthresh", "W_max" and "W_last_max" to that value. This proves over optimistic, and we see an immediate need to further reduce the transmission window.
The delay increase is not caused by the current value of the CWIN, but rather by the value of CWIN when the last acknowledged packet was sent. The CWIN will increase as acknowledgements are received after this point, but those increase are still "in the pipe line". We should set the safe value to one of:
Instead, the apply the coefficient "beta cubic", which may be adequate during congestion avoidance but is not enough to stabilize the connection. This is probably wrong.
There is of course a risk that this is "too drastic", which means we should consider allowing a correction with HyStart++, see issue #1694 and comments from @hfstco.
The text was updated successfully, but these errors were encountered: