Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d benchmark it A Bun publisher over @moq/web-transport fills a test-only WebTransport server's connection window, on tokio's raw driver and on an io_uring endpoint, with a frame that can never complete. The receiver stops it, a high-priority frame completes, and a later low group arrives. The interop workflow runs it, since normal CI has no Bun. benchmark_receive_windows sweeps concurrent streams and frame sizes on separate axes, comparing the driver's finite stream window with one that follows the connection window, and reports retained bytes, throughput, and frame completion latency. Nightly runs it next to benchmark_held_reads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… into quest/m1/quic/receive-memory-coverage # Conflicts: # quest/m1/quic/README.md # quest/m1/quic/receive-memory-coverage.md # quest/m1/quic/receive-memory.md
This was referenced Oct 16, 2026
… into quest/m1/quic/receive-memory-coverage # Conflicts: # sh/gh/nightly.sh
… into quest/m1/quic/receive-memory-coverage # Conflicts: # quest/m1/quic/README.md
Collaborator
Author
|
#5689 merged: (Written by Claude Opus 5.5) |
… into quest/m1/quic/receive-memory-coverage # Conflicts: # .github/workflows/interop.yml
… into quest/m1/quic/receive-memory-coverage
kixelated
added a commit
that referenced
this pull request
Oct 17, 2026
…sender Ports the coverage from #5752 onto leases, and ranks a group stream by its subscription priority before its sequence. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 17, 2026
Collaborator
Author
|
Closing as folded into #5878, which carries this PR's Bun sender, receive-credit tests and (Written by Claude Opus 5.5) |
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.
Problem
#5735 bounds incomplete messages by QUIC connection credit and recovers by stopping the least useful stream, with Rust-only end-to-end tests. Nothing proved that a JavaScript sender drives either native receiver into exhaustion and that it recovers, and nothing measured what bounded receive memory costs.
Approach
Stacked on #5735. Finishes
quest/m1/quic/receive-memory-coverage.md.test/receive-credit/sender.tsis a Bun publisher over@moq/web-transport, pinned to the server's certificate, with WebSocket disabled. Each stdin line asks it for one group: a low-priority frame twice the window, a high-priority half-window frame, then a small low group.MIN_RECEIVE_WINDOW: tokio'squic::driverendpoint behindquic::web::Server(rs/moq-tokio/tests/integration/receive_credit.rs), and an io_uring endpoint in web mode (rs/moq-uring/tests/integration/receive_credit.rs, moq-lite only, as the worker serves). The test waits until three quarters of the window holds the low frame, asks for the high frame and requires it to complete, requires the low frame to end in an error rather than complete, and then requires the later low group to arrive. Both are#[ignore](they need Bun) and run throughjust test receive-credit, a new interop workflow step withMOQ_STRICT=1, so the io_uring arm fails instead of skipping. The tokio arm covers moq-lite-06 and moq-transport-16.benchmark_receive_windows(moq-tokio, release, nightly next tobenchmark_held_reads) delivers 256 MiB per run from a stock server to a raw-driver subscriber with moq-tokio's 128 MiB connection window. It sweeps concurrent streams (1, 16, 256 at 256 KiB frames) and frame sizes (16 KiB, 256 KiB, 4 MiB at 16 streams) on separate axes. Each run compares the driver's finite 1.25 MB stream window against one that follows the connection window. Each track writes a one-frame group once the previous one arrives, so the stream count is the concurrency. It reports peak retained bytes (held + unread, sampled every millisecond), throughput, and p50/p99 write-to-complete latency, each the median of 3 alternating runs. About 17 s locally.Negative control: with
Monitor::poll's eviction disabled, both JavaScript tests time out waiting for the high-priority group.Local benchmark on a shared, loaded host (loopback, so there is no RTT):
A finite stream window does not bound retained memory. Stream credit returns on reads while the incomplete frame keeps its connection credit, so retained bytes track
streams x framein both modes. This supports #5735's large stream-window default. Loopback hides the extra round trips a finite window adds, so its latency cost is understated here.Impact
MIN_RECEIVE_WINDOW.@moq/receive-credit-test, ajust test receive-creditrecipe, an interop workflow step and path triggers, and one nightly benchmark line.Alternatives
serverCertificateHashes: that needs a digest dependency in two test crates. The sender passes the PEM asserverCertificate, and@moq/netcomputes the same SHA-256 pin.Follow-ups
🤖 Generated with Claude Code
(Written by Opus 5.5)