Skip to content

Bump the build benchmark's moq pin past poll-first - #646

Draft
kixelated wants to merge 4 commits into
mainfrom
quest/m4/bench-moq-pin
Draft

kixelated wants to merge 4 commits into
mainfrom
quest/m4/bench-moq-pin

Conversation

@kixelated

@kixelated kixelated commented Nov 7, 2026 •

Copy link
Copy Markdown
Collaborator

Finishes quest/m4/bench-moq-pin.md, planned in moq-dev/rust2#631 from moq-dev/rust2#615's report.

Problem

The moq corpus pinned f36c848, from before poll-first (moq-dev/moq#7607). The benchmark was measuring a moq its developers no longer edit: the hub edit rebuilt 8 crates instead of main's 10, and the async body edit hit a pre-poll-first async fn.

Approach

  • Pin moq-dev/moq@142b03b, moq main on 2026-11-07. The leaf, hub, sync, and async targets still match verbatim. Session::closed is now kio::wait(|waiter| self.poll_closed(waiter)).await, and the comment says so.
  • Drop moq-pure-crypto and mark moq as no-c. Since the pin, moq main has moved moq-relay's crypto onto rind, its own pure-Rust fork of graviola, through rind-rustls, rind-rcgen, and rind-jsonwebtoken. At 142b03b, moq-relay's build graph has no aws-lc-sys, ring, cc, cmake, or links key. So moq itself is now the pure-crypto build, and the comparison the spike corpus existed for (aws-lc-rs against pure Rust) no longer has two sides at main. The no-c guard moves to moq, and the workflow's moq pure-crypto job goes with the corpus.
  • Rebuild the test list from the workspace crates moq-relay builds at the pin. moq-clock and moq-flate are gone. kio-macros, moq-congestion, and moq-crypto are new. kio no longer needs its version. moq-pattern joins moq-auth as unnameable: moq-auth's dev-dependency on its published self brings a published moq-pattern at the same version, so cargo pkgid -p moq-pattern@0.1.2 is ambiguous. All 12 remaining specs resolve to workspace crates (cargo tree -p ... at the pin).
  • Keep the cranelift variant building moq. rind's naked_asm! takes sym operands, which cg_clif cannot compile yet (rust-lang/rustc_codegen_cranelift#1620, open). The first bench run at the new pin failed there. A variant gains a config key of cargo --config values, and cranelift picks its backend by profile, with LLVM for rind alone. A RUSTFLAGS backend can't do this: cargo passes RUSTFLAGS after the profile's per-package flag, so it would win. Each cargo command takes the values last: cargo drops a --config given before an external subcommand, so a leading one would have left nextest building with LLVM. The Cranelift retrial quest reads these moq rows, so dropping moq from the variant would have lost its signal.
  • README: the corpus notes, the edit-async note, the Cranelift note, and the ra-jit notes, taken from the run at the new pin. ra-jit serves every edit-leaf, edit-hub, and edit-sync run. It hands every edit-async run to cargo on usage-argv's parsed_values_given, at 50.6 s and 196 CPU-s against cargo's 10.5 s and 14.5 CPU-s. The aws-lc-sys fallback note goes with aws-lc. The cargo ra-jit check note is dated to f36c848, since nothing reruns it.

Impact

  • No public API. just bench --corpus moq-pure-crypto is now an unknown corpus.
  • Bench numbers on either side of this PR do not compare, as corpus.toml asks. The bump lands on its own.

Alternatives

  • The quest's recommendation: merge moq main into a new spike/pure-crypto branch in moq-dev/moq and pin that. I tried it. Merging main into the spike conflicts in 60 files across 1478 commits, because main replaced the same crypto code the spike patched (graviola became rind, built-in ACME was removed in moq-dev/moq#7803). Even resolved, it would reproduce what main already ships. I pushed nothing to moq-dev/moq.
  • Keep an aws-lc-rs variant of moq at main for a C-vs-Rust comparison. That would mean a new spike reverting moq's rind move. moq has already made that call, so the comparison has no decision left to inform.

Choices made without asking

  • Took the alternative above over the quest's recommended spike branch. The quest's premise, that the bump leaves moq-pure-crypto comparing a different tree, no longer holds, since moq is that tree.
  • Kept moq on the cranelift variant with rind on LLVM, rather than dropping moq from it until rust-lang/rustc_codegen_cranelift#1620 lands. The moq Cranelift numbers now include one crate built with LLVM, which is how a Cranelift user would build moq today.
  • Dropped moq-pattern's tests from test-* rather than naming it by a path+file:// spec, which would depend on the checkout path.

Validation

  • nix develop --command just check: passed.
  • nix develop --command just ci: only the two known path-dependent TypeId snapshots fail (lang/dyns ids.ts, lang/panics/hook lib.ts). They fail the same way on bare origin/main, and moq-dev/rust2#633 fixes them.
  • The bench at 010a935 (run): moq stable, moq ra-jit, and pure passed, so the no-c guard and the body edits hold at the new pin. moq nightly failed in the cranelift warm-up on rind, which led to the fix above.
  • Locally, the new config path on regex: just bench --corpus regex --variant nightly --variant cranelift --runs 1 passed, and cargo -v with the same values shows -Z codegen-backend=cranelift on every regex crate, with no warning for the unmatched rind. On moq's rind alone, rind gets llvm and its dependencies and build scripts get cranelift.
  • The bench at 5015a6e: PENDING

Follow-ups

None.

Models

Size: S
Implementer: Claude Code, claude-opus-5-5, high effort

(Written by Claude Opus 5.5 with high effort)

🤖 Generated with Claude Code

Review

Rewritten by quest review after each round.

  • Reviewer: Codex, gpt-6.1-sol, medium effort
  • Session: 01a1b524-ea63-75c2-8a20-9cad88c366a6, round 2
  • Head: 5015a6e
  • Base: origin/main at efa6300
  • Score: 10/10, The head fixes configuration forwarding in every affected command path, and the full branch diff reveals no remaining actionable defects.
  • Findings: none
  • The last round's findings, at 75e3896:
    • Fixed: high, bench/build/run.sh:247: [P1] Forward variant configuration to nextest itself; bench/build/run.sh:327, 416, and 464 now append variant configuration after the command, including nextest and test-edit preparation; the build-platforms reproduction confirms nextest receives configuration in this position.

Quest-Claim: 1b78c0bd989c3ff1
@pullfrog

pullfrog Bot commented Nov 7, 2026

Copy link
Copy Markdown

Pullfrog  | Review this ➔

kixelated and others added 3 commits November 6, 2026 23:31
…rypto

moq main moved moq-relay's crypto onto rind, so the moq corpus is now the
pure-crypto build: it takes moq-pure-crypto's no-c guard and that corpus goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rind's naked_asm! takes sym operands, which cg_clif cannot compile yet
(rust-lang/rustc_codegen_cranelift#1620). A variant's new `config` key passes
cargo --config values, so the cranelift variant picks its backend by profile
and overrides it for rind; RUSTFLAGS would come after any per-package flag.
The README's ra-jit notes now come from the run at the new pin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cargo drops a --config given before an external subcommand, so nextest built
the cranelift variant's tests with LLVM. Every cargo command now takes the
config last, and `sub` holds only the subcommand again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant