SwiftQUIC: PERF: Move CongestionControl state to a common struct - #204
Open
agnosticdev wants to merge 1 commit into
Open
agnosticdev wants to merge 1 commit into
agnosticdev wants to merge 1 commit into
Conversation
Collaborator
Author
|
This change does not change any of the congestion control logic, it just moves the objects around. |
rpaulo
reviewed
Oct 3, 2026
| self.algorithm = algorithm | ||
| } | ||
|
|
||
| static func createCubic( |
Contributor
There was a problem hiding this comment.
I would prefer an init where we pass Algorithm and then we do a switch on it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In recent flame graphs for the server we have noticed that
findNewlyAckedPacketsis a common hotspot when receiving packets for two reasons:For number 1 the sent path can be determined by matching the path identifier on the
PacketContainerEntry.For number 2 we can actually avoid some of the exclusivity and the copying costs by moving the congestion control logic inside a non-copyable struct. Next we can move the common state for all algorithms into a
CongestionControlStatestruct and this is where the common state is now tracked and altered for all algorithms. This essentially shields any copies or writes from being done on QUICPath directly and allowspacketsAckedandpacketSentto make writes just on the state object and not onQUICPath. This prevents some exclusivity and copies on these two functions.Net savings of about 430 megacycles:
Top of tree:
With this change: