-
-
Notifications
You must be signed in to change notification settings - Fork 402
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
Implement acknowledgement frequency #1543
Conversation
8830d95
to
5a1e0c0
Compare
Not presently. We've generally relied on making assertions about resulting connection state. You could do that here by looking at the RTT estimate, but that is a bit indirect. I don't see anything fundamentally wrong with asserting about the transmitted plaintext (we do something morally similar in the version negotiation tests, after all), but it's not immediately obvious to me how it might be done gracefully. |
I just pushed a commit prototyping how this could work. It introduces a By the way, I have had no feedback on the implementer's Slack about detection of out-of-order packets in the ACK frequency draft, so my current plan is to go through the draft again next week and implement my own interpretation of it. I also plan to look around to see if there are open implementations of the current version of the draft that I can have a look. |
Seems reasonable in general (especially with
I saw; that was disappointing. Maybe open an issue (or PR with a correction) on https://github.com/quicwg/ack-frequency? The WG has been good about engaging on github historically. I definitely wouldn't be shocked by an error in an example. |
d011899
to
bbbd8b7
Compare
I just pushed a first non-draft version of this PR, and modified the PR's base to the Here is an overview of the feature:
I have a bunch of questions / comments:
Tomorrow I'll do some benchmarking to ensure everything works properly. |
And... here are the benchmarks! Practical detailsI'm running the server using For the scenarios with ACK frequency enabled I'm doing so through the following code: let mut ack_freq = AckFrequencyConfig::default();
ack_freq.ack_eliciting_threshold(10);
transport.ack_frequency_config(Some(ack_freq)); ConclusionThere seems to be no significant performance difference in the benchmarks, though we probably need a more statistically rigorous approach to benchmarking if we want to be sure. Baseline (before this PR)
ACK frequency disabled (threshold = 1)
ACK frequency enabled on the client (threshold = 10)
ACK frequency enabled on the server (threshold = 10)
|
Sponsored by Stormshield
Sponsored by Stormshield
@djc it looks like you closed this PR by accident |
For anywone following along, I just rewrote the above comment with the benchmark results, because it looks like my baseline was non-representative. |
Ahh, sorry -- I deleted the branch for #1552, which apparently makes it impossible to reopen this PR. Can you try repushing this branch so we can reopen it? We could open a new PR but would be better to keep this one going. |
Ah yes, because the PR was targetting that branch... I can no longer edit the target branch of the PR, even after force-pushing a rebased version, so it looks like I'll have to open a new one. |
And here is the new PR: #1553 |
Note: this PR is no longer a draft, but I've left the text below untouched so people can trace how the PR was developed. You will probably want to jump to this comment for an overview of what this PR actually achieves.
This is a draft PR for now, because it is missing the following stuff:
ACK_FREQUENCY
frames to actively control the ACK frequency of the peer (I'm waiting for Tie up PLPMTUD's loose ends #1529 to be merged to avoid conflicts around the congestion control code)As to the things that are properly implemented:
min_ack_delay
transport parameterACK_FREQUENCY
andIMMEDIATE_ACK
framesmax_ack_delay
, properly tweaked upon receiving anACK_FREQUENCY
frameIMMEDIATE_ACK
causes an ACK to be sent in the nextpoll_transmit
call, even if that results in an ACK-only packet.IMMEDIATE_ACK
in the following cases:That being said, here are a few questions:
quinn-proto/src/test/mod.rs
)? It would be useful to ensure the ACK delay value in ACK frames is being properly set. Unit tests don’t give the same degree of confidence and have a higher maintenance cost. If this doesn't exist yet, would you welcome a commit adding it?