Repository navigation
test(mux): reduce fixture CPU and checkpoint frozen cohort - #6914
Conversation
Quest-Claim: 263d25ccaa7a1636
Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
Drop the jitter cache hypothesis after benchmark evaluation. Co-Authored-By: GPT-6 <noreply@openai.com>
Drive pure jitter state-machine fixtures with explicit deadlines. Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
Record the frozen cohort's measurement method, what this PR cut, what was tried and dropped, and the remaining cost by module. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 2 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit: c15e866
No actionable bugs found in the three-file change and relevant clock/export code.
Direction: the fixture-only scope is sensible. jitter.rs preserves arrival ordering and nondecreasing time while avoiding scheduler work; its entered clock does not cross a suspension point. The TS helper uses the existing queued-media deadlines instead of generating idle output, retains the complete reset span, keeps the signalled/unsignalled and shared-boundary assertions, and now fails on exporter errors. Keeping the async helper signatures avoids unrelated caller churn. No production/API/wire changes are needed for these savings.
The quest appropriately leaves the halving target open: the reported 137.83 → 116.83 CPU-seconds is a partial improvement, not completion, and unchanged-test noise should not be credited as an optimization.
Verification limits: static GitHub review only; I did not run tests or reproduce the CPU measurements. The reported test results and timings are author-provided, including measurements made before the main-branch merge.
|
Merge summary for head c15e866:
(Written by Claude Opus 5.5) |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Re-landing after the merge queue removed it (run https://github.com/moq-dev/moq/actions/runs/40580353542). The failure was (Written by Claude Opus 5.5) |
Problem
The slowest 1% of tests (
quest/m0/ci/slow-tests.md) should take under half their CPU. One full normal nextest run before any edit (10,275 passed, 104 skipped) froze the slowestceil(10,275 / 100) = 103IDs at 137.83 CPU-seconds, so the target is below 68.92 s.This PR lands the fixture-only cuts found so far (137.83 s to 116.83 s, 15.2%) and rewrites the quest to what remains, so the next session starts from these measurements instead of redoing them.
Changes
container::ts::import): drain queued media on the exporter's own deadlines and stop when idle, instead of polling through an hour of idle output. Retention is derived from the stimulus (the 30 s leap plus eight PES of two 72 ms frames), both phases must emit media, and exporter errors now fail the test. All discontinuity assertions are unchanged. 12.98 s to 0.18 s.driftandfeedhelpers (jitter::tests): advance an explicitmoq_clock::Deadlinesqueue instead of the tokio paused clock. Advancing tomax(arrived, now)keeps the old instants, so arrivals, frame counts, the full 24-hour durations, ordering, bounds and assertions are unchanged. 10.16 s to 6.80 s across the 8 frozen jitter tests.No case, duration, assertion or coverage was removed or moved to nightly.
Impact
Decisions
Settled by the maintainer on 2026-10-27:
Chosen while iterating (not reserved for the maintainer):
driftandfeedstayasync fnthough they no longer await. Droppingasyncwould touch every caller injitter.rs, which draft moq-dev/moq#6919 also extends with new callers.maininto the branch (no rebase) so local checks ran against current main. The recorded CPU numbers are from the measured source below, not the merge.Tried and dropped
Validation
main.produce::testsby up to 40%), so only the touched tests are credited.main,just checkpassed (4,109 tests, 60 skipped) andquest check --base origin/mainpassed.Follow-ups
The quest stays open for the remaining ~48 s. The largest remaining targets are moq-mux's
export_timing_test(22.2 s) andrecovery_test(11.6 s), and moq-net'smodel::track::testgap tests (17.3 s), which run through the same miss judging as incremental sparse misses.Measurement
Portable measurement command, wrapper and unchanged runner hashes
Run once before edits with
phase=baseline, then once for the final retained source withphase=after-final, each with an empty dedicated output directory.phasebelow selects only the record directory; the runner and suite are identical.Identical SHA-256 in both runs:
.tmp/cpu-wrapper.py:d16e86fb379a8d68b301f1471d5f135517faa5225f8fbaa1156f3e7405e5ef48.config/nextest.toml:e19961d71b30b0946259439331dc93cddec95052c43f6771156687de4a217be0sh/local.sh:86ee7f61a5f40e9ccce41ec012cc1dc3268c2f270fa2ab57a2eac4e3a8157cf2sh/rs/nextest.sh:eba5b17e18c59097dcbeb20a1f85615feec3eb69be584344414994f77631ab71Cargo.lock:4e54ae32843a5b2ea06e33f3b36a098ee45e7921e6b7928a25080d5fe6a89d30Frozen 103 IDs, same-run baseline and final per-test user/system CPU
moq-netmodel::track::test::an_endless_track_with_gaps_stays_boundedmoq-muxcontainer::ts::import::test::a_shared_forward_boundary_resets_once_per_renditionmoq-muxcontainer::ts::import::test::a_signalled_reset_reaches_the_exported_clockmoq-muxcontainer::ts::export_timing_test::two_legs_render_a_drifting_source_the_same_waymoq-muxjitter::tests::the_clock_follows_a_drifting_source_for_a_daymoq-net::integrationrouting_contracts::handoff::sweep_handoffmoq-netmodel::track::test::an_untimed_sparse_feed_keeps_its_gapsmoq-muxcontainer::ts::export_timing_test::a_fast_source_clock_keeps_the_delaymoq-muxcontainer::ts::export_timing_test::a_joiner_keeps_the_system_clock_in_tolerancemoq-net::integrationrouting_contracts::handoff::sweep_requests_reach_a_quiet_originmoq-net::integrationmesh_withdraw::capped_random_meshes_hunt_lessmoq-net::integrationmesh_withdraw::residual_random_meshesmoq-muxcontainer::ts::export_timing_test::a_source_past_the_limit_is_countedmoq-muxcontainer::ts::export_timing_test::a_slow_source_clock_keeps_the_delaymoq-netmodel::track::test::a_fill_refused_group_by_group_stays_linearmoq-statsproduce::tests::an_oversize_group_leaves_other_groups_readablemoq-netmodel::front::tests::bounded_sequences_hold_the_invariantsmoq-quictests::sim::random_workloadsmoq-statsproduce::tests::oversized_frame_ends_both_flavorsmoq-net::integrationrouting_contracts::sweep_forgetting_distancesmoq-quictests::sim::replays_from_seedmoq-netmodel::track::test::an_empty_successor_still_lets_the_gaps_gomoq-netmodel::track::test::an_endless_untimed_track_with_gaps_stays_boundedmoq-statsproduce::tests::reheld_wire_presence_refreshes_two_relay_cachesmoq-netmodel::resume::test::a_resumed_reader_forgets_gaps_past_its_budgetmoq-jsonwindow::encoder::test::a_header_larger_than_the_group_cache_is_rejectedqmuxsession::tests::websocket_keep_alive_runs_during_continuous_outputmoq-jsonwindow::encoder::test::an_op_that_would_evict_the_header_rolls_firstmoq-videoencode::encoder::tests::transcode_keeps_the_space_the_source_signalledmoq-muxrate::tests::model::invariants_hold_on_random_walksmoq-net::integrationcatalog_churn::catalog_churn_lite_07moq-muxjitter::tests::a_wandering_track_sent_latest_does_not_move_the_ratemoq-muxcontainer::ts::recovery_test::hevc_keeps_radl_after_a_holemoq-pattern::integrationpattern_exhaustive::intersect_matches_exactly_what_both_matchmoq-muxcontainer::ts::recovery_test::hevc_trims_only_orphaned_raslmoq-tokio::integrationbroadcast::broadcast_rejoin_replays_a_current_warm_cachemoq-quictests::probe::congestedmoq-net::integrationrouting_contracts::sweep_forwarding_progressmoq-muxjitter::tests::closing_a_late_start_is_not_charged_to_the_ratemoq-muxjitter::tests::a_late_start_within_the_drift_limit_never_failsmoq-muxcontainer::ts::export_timing_test::a_cut_judges_held_video_when_the_loss_is_observedmoq-jsonwindow::properties::window_codec_property_matches_every_readers_logical_windowmoq-audioresample::tests::duration_and_samples_are_invariant_across_partitions_and_epochsmoq-muxcontainer::ts::export_timing_test::a_skip_at_the_join_keeps_one_clockmoq-jsonsnapshot::encoder::test::snapshot_codec_property_reconstructs_each_json_valuemoq-muxcontainer::ts::recovery_test::a_skip_across_a_resolution_change_takes_the_new_parametersmoq-muxcontainer::ts::recovery_test::a_lost_discontinuity_marker_still_breaks_the_clockmoq-net::integrationmesh_withdraw::partial_mesh_withdraw_then_republishmoq-muxcontainer::ts::recovery_test::a_declared_discontinuity_survives_loss_either_sidemoq-net::integrationcatalog_churn::catalog_churn_lite_06moq-muxcontainer::ts::export_timing_test::frames_held_through_a_silence_drop_as_latemoq-muxjitter::tests::a_spell_on_the_steady_track_keeps_the_rate_on_itmoq-quictests::bbr_marking_versus_droppingmoq-netietf::publisher::group_priority_test::a_busy_track_yields_to_its_siblingsmoq-quictests::probe::borderline_skips_probe_rttmoq-hlsexport::tests::a_fresh_join_reads_a_bounded_number_of_recordsmoq-muxcontainer::ts::export_timing_test::a_skip_while_running_keeps_one_clockmoq-jsonstream::test::an_oversized_record_is_refused_and_the_log_continuesmoq-quictests::probe::rises_to_targetmoq-muxjitter::tests::start_up_latency_never_fails_a_full_multiplexmoq-audiodecode::consumer::tests::the_decode_path_conforms_to_the_corpusmoq-quictests::sim::priority_on_a_clean_pathmoq-net::integrationmesh_withdraw::full_mesh_withdraw_retracts_once_lite06moq-net::integrationmesh_withdraw::full_mesh_withdraw_retracts_once_lite04moq-muxcontainer::ts::recovery_test::a_cut_group_keeps_what_it_deliveredmoq-muxcontainer::ts::recovery_test::a_skipped_group_resumes_at_the_nextmoq-muxcontainer::ts::recovery_test::skewed_audio_survives_a_video_skipmoq-tokio::integrationreceive_credit::lite_frame_of_many_windows_completesmoq-tokio::integrationreceive_credit::bufferbloat_is_not_a_stuck_windowmoq-muxcontainer::ts::recovery_test::a_clean_path_loses_nothingmoq-muxcontainer::ts::recovery_test::a_skip_across_the_wrap_keeps_the_clockmoq-net::integrationmesh_withdraw::partial_mesh_withdraw_retracts_oncemoq-muxcontainer::ts::recovery_test::a_congested_path_sheds_what_it_made_latemoq-relay::integrationcluster_unknown::every_ingest_version_crosses_a_redundant_meshmoq-jsonstream::test::a_compressed_log_is_charged_its_inflated_sizemoq-muxcontainer::ts::recovery_test::a_stall_drops_what_it_made_latemoq-cli::bin/moqhls::test::an_ended_playlist_announces_its_catalogmoq-muxcontainer::ts::recovery_test::a_path_stall_drops_what_it_made_latemoq-muxcontainer::ts::recovery_test::a_stalled_track_leaves_the_others_runningmoq-muxcontainer::ts::recovery_test::open_gop_trims_only_the_orphansmoq-muxcontainer::ts::recovery_test::a_join_starts_on_a_whole_groupmoq-muxcontainer::ts::export_timing_test::a_track_sent_later_than_the_delay_loses_nothingmoq-muxcontainer::ts::recovery_test::a_late_catalog_starts_on_a_whole_groupmoq-cli::bin/moqpublish::tests::ts_passthrough_crosses_a_relay_through_a_flagged_jumpmoq-net::integrationfetch_fanout::sequential_viewers_share_the_relays_fetched_groupsmoq-tokio::integrationbroadcast::zero_initial_backoff_still_gives_up_on_a_flapping_peermoq-muxjitter::tests::a_step_in_queueing_does_not_move_the_estimatemoq-muxcontainer::ts::export_timing_test::the_video_held_at_the_end_goes_outmoq-netlite::publisher::tests::a_busy_subscription_yields_to_its_siblingsmoq-muxcontainer::ts::passthrough_test::a_long_gop_splits_at_the_byte_ceiling_between_objectsmoq-quictests::probe::overflow_keeps_probe_rttmoq-statsproduce::tests::steady_drain_collects_without_allocatingmoq-muxcontainer::ts::recovery_test::the_graders_fail_what_they_shouldmoq-muxcontainer::ts::export_timing_test::a_successor_settles_held_video_across_a_skip_or_restartmoq-quictests::bbr_burst_after_long_idle_keeps_learned_bandwidthmoq-muxcontainer::ts::export_timing_test::video_held_for_most_of_the_delay_drops_nothingmoq-muxjitter::tests::a_source_past_the_drift_limit_failsmoq-muxcontainer::ts::export_timing_test::live_audio_shares_its_pesmoq-muxcontainer::ts::export_test::scte35_fixtures_survive_roundtripmoq-jsonsnapshot::encoder::test::memo_matches_the_value_diffmoq-net::integrationrouting_contracts::handoff::sweep_scoped_handoffmoq-net::integrationcompress::a_start_group_arrives_wholemoq-jsonsnapshot::test::a_rejected_update_leaves_the_previous_value_readable🤖 Generated with Claude Code
(Written by Claude Opus 5.5)