Repository navigation
Conversation
Quest-Claim: 1e2652c8d6738507
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
# Conflicts: # sh/gh/nightly.sh
A session's ingest now stops reading a group's stream once it is the stream's receive credit past the group's fastest reader, capped at the 16 MiB ahead half of the live tail, instead of always 16 MiB. Each stream takes the window from its session's receive windows when it is accepted or opened. Local writers keep the 16 MiB window. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rvey Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
Design change: per the maintainer's 2026-11-03 /quest-unblock decision, ingest now paces each group at its stream's receive credit, capped at 16 MiB, instead of the fixed With 1 MiB of stream credit per hop, the two-relay test's downstream cache drops from about 16.7 MB to about 0.99 MB. The upstream cache, including sent history, drops from about 33.5 MB to about 3.5 MB. The quiet-host benchmark comparison is still waiting on a free host, so this stays a draft. (Written by Claude Opus 5.5) |
This branch has not been deployed
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
The remaining fastest-reader work after moq-dev/moq#7388 and moq-dev/moq#7624:
model::pace::AHEAD = 16 MiB, even with 1 MiB of stream credit.Decisions
Decided 2026-11-03 (maintainer, /quest-unblock):
model::pace::AHEAD = 16 MiB. Reason: memory follows what the peer can actually take in flight.Approach
receive_window(model::pace::window,coding::Pause::window). The window is the stream credit, no more than the connection window, capped at the 16 MiB ahead half of the live tail (AHEAD).group::Producer::poll_paced,frame::Producer::poll_readyandrecv::Group::poll_admitnow take the window. Local writers (group::Producer::poll_ready/ready) keep 16 MiB, since they have no transport. A transport that reports no window never pauses, as before.Relayfrom operator configuration and inspect its WebSocket qmux transport parameters before admission. Pin connection, all stream receive windows, and stream counts across qmux-00/01/02.doc/concept/moq-lite.mddescribes the per-hop window as the stream receive window capped at 16 MB.Evidence
Two-relay cache charges while parked, with 4 MiB connection and 1 MiB stream credit per hop:
With the transport-sized window, the origin stopped after 327 of 1,024 frames. All 64 MiB arrived after reading resumed. Cache charges include frame slots and relay metadata. They exclude transport buffers and RSS.
The one-hop idle reader now holds three 1 MiB frames under 4 MiB of stream credit, and fifteen when the credit is past the 16 MiB cap.
All 36 qmux cases completed with exactly one heap report per case. With 64 sessions and eight streams per session, each receiver held 4,194,304 unread bytes:
How to read the qmux table:
Impact
[quic]windows) of a paced group past its fastest reader, instead of 16 MiB. A transport whose stream credit is 16 MiB or more paces at 16 MiB as before.Validation
just cion this host: all 11,526 Rust tests and every lane exceptcheck flakepassed.check flake: the Nixgithub-runnerimage build fails withunshare: write failed /proc/self/uid_map: Operation not permitted.just ci) and on main 90980d8 (CHECK_MODULES=flake just ci --all), on this host.cargo test --all-features -p moq-net -p moq-relay -p qmux@0.7.0 -p moq-tokiopassed, including the sixfastest_readerintegration tests and the newa_smaller_window_paces_sooner,the_window_is_the_stream_credit_capped, anda_stream_paces_at_its_creditunit tests.quest check --base origin/mainpassed.Follow-ups
{qmux}.{moq}pairs list only 00/01. Recommend a separate quest to decide whether to advertise versioned qmux-02 pairs; this attempt does not change negotiation.Waiting
group_read_frames,group_contended,group_relay_frames, andgroup_pacedcomparisons against pre-pacing base e7a5c10, then against this head, and records them. Keep this draft until the comparison is recorded.nixos2(12 cores): load 3.5-4.5, with arustcbuild and three Claude sessions.nixos(32 cores): load 20-28, with clippy and Nix builds.kixtop(10 cores): load 8-15.6.Review
Codex,
gpt-6.1-sol,mediumeffort, round 1 (new session after the design change), reviewed head cf4ae07e. No findings.🤖 Generated with Claude Code
(Written by Claude Opus 5.5)