-
-
Notifications
You must be signed in to change notification settings - Fork 479
Implement spurious loss recovery #2289
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
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, this is great work! It's much simpler than I feared, and the improved throughput is really compelling. I wonder if this will also account for our slightly lagging throughput numbers in the interop test...
I'd like to see test coverage for the new behavior.
ebee833
to
fbf7f41
Compare
fbf7f41
to
a567107
Compare
Note this is a breaking change due to the tweak to the congestion controller interface. We could adjust the design to be non-breaking, but I think it's fine; the current form is fairly natural and it's been a while. |
a567107
to
592929b
Compare
592929b
to
b116872
Compare
Should we get another release out with non-breaking improvements before we merge this? |
No objection from me. |
We are working on implementing RFC 9438 which will likely require more changes to the Can we wait a bit more before merging this breaking change? |
I think we should merge this as soon as we get a non-breaking release out the door, but we can hold the breaking release. |
b116872
to
988793d
Compare
988793d
to
7954a7d
Compare
7954a7d
to
ca9a79a
Compare
Benchmarks in the cloud between two Linux machines on a 10ms/1Gbps link revealed that
quinn
performs consistently worse thanmsquic
. Plotting the congestion window for both implementations shows thatmsquic
reaches higher congestion window sizes, in part because it implements spurious loss recovery (as described in rfc8312bis which is now rfc9438).This PR implements a similar spurious loss recovery mechanism (
quinn
implementsrfc8312
)Lost packets are stored in the
PacketSpace
and used on ACK reception to determine if all the packets we deemed lost were in fact acknowledged. This list is regularly purged from packets that were sent more than 2 PTO ago (this is the value used inmsquic
: https://github.com/microsoft/msquic/blob/2623c07df62b4bd171f469fb29c2714b6735b676/src/core/loss_detection.c#L925).Overall, this appears to effectively improve throughput on the benchmark I described above: we've seen up to a 30% increase in upload bandwidth.