SwiftQUIC: Reduce CPU overhead in getting inbound stream data delivered to the stream#53
Open
agnosticdev wants to merge 1 commit into
Open
SwiftQUIC: Reduce CPU overhead in getting inbound stream data delivered to the stream#53agnosticdev wants to merge 1 commit into
agnosticdev wants to merge 1 commit into
Conversation
agnosticdev
requested review from
ekinnear,
kkuk24,
rpaulo and
tfpauly
as code owners
July 15, 2026 18:26
tfpauly
reviewed
Jul 20, 2026
| @available(Network 0.1.0, *) | ||
| struct QUICStreamList: ~Copyable { | ||
| private var list: [MultiplexedFlowIdentifier] = [] | ||
| private var list: Deque<MultiplexedFlowIdentifier> = [] |
Collaborator
There was a problem hiding this comment.
Suggested change
| private var list: Deque<MultiplexedFlowIdentifier> = [] | |
| private var list = Deque<MultiplexedFlowIdentifier>() |
| flow.serviceUpperReceiveQueue() | ||
| } | ||
| // Enqueue and delivery the stream data all in one shot | ||
| public func deliverInboundStreamData( |
Collaborator
There was a problem hiding this comment.
We should add the same for enqueueInboundDatagrams/deliverEnqueuedInboundDatagrams to keep them parallel
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.
When looking at the CPU usage in
inboundStoppingfor server workloads we enqueue stream data and then calldeliverEnqueuedInboundStreamDatato send it.This incurs 2 dictionary lookups for the stream when we can condense it all into one with a new method called
deliverInboundStreamData.Next, in
inboundStoppingwe remove the first value from an array when delivering the stream data. This would be more efficient with a Deque.Top of tree CPU usage:
With this change:
Overall reduction of about 50 megacycles in aggregate.
Note that this change just adds a new function named
deliverInboundStreamDataand does not delete the previous methods forenqueueInboundStreamDataanddeliverEnqueuedInboundStreamDataas I can see the utility of them individually.