Skip to content

vms-fb8: CI tier-split + KVM accel — per-PR loop off the 46m e2e wall - #669

Merged
baron-3dl merged 3 commits into
mainfrom
work/vms-fb8-ci-latency
Aug 20, 2026
Merged

baron-3dl merged 3 commits into
mainfrom
work/vms-fb8-ci-latency

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

What

Takes the per-PR iteration loop off the 46-minute e2e wall for the 5-wide peer swarm.

Measured (run 32317162722, 46.0m core PR): the wall is one job; the critical path is ~11 heavy QEMU release/install/upgrade/boot-scenario e2e gates (14–46m each), each = cut-release ~19m + image build + boot/verify ~25m under TCG software emulation. 79 of 90 jobs already finish under 10m.

Changes

  • C — Tier-split. The 12 heavy e2e gates now run on non-pull_request events only (push, merge_group, workflow_dispatch, schedule). A PR runs the fast tier (build+test, link/activate, kernel-executive shards, static analysis, conformance, cross-compiles). No coverage deleted — the heavy tier moves off the per-PR critical path. This PR's own run is a live demo: the heavy jobs should show skipped.
  • A — KVM. run-qemu.sh / run_tests.sh / release_install_inner.sh select -accel kvm -cpu host when /dev/kvm is writable, else -accel tcg (identical behavior, no regression without KVM). Accelerates the kernel-executive shards on the PR path + every e2e job on the merge/dispatch path (~10×, per run_tests.sh's own TCG note).

Coverage-before-merge (important)

main has no merge queue today, so merge_group never fires. Until a queue is enabled, the reap gate must fire a workflow_dispatch full run on the candidate branch and verify GREEN before squash-merge (KVM-accelerated, single-digit minutes). Documented in the ci.yml header. ⚠ Operator call: enabling a GitHub merge queue on main makes this mechanical.

Honest target

Per-PR: heavy e2e wall gone now (~2–4m ceiling: static-analysis + build-and-test); ~1–2m after the follow-ons. Full merge gate: ~4–6m. Literal <60s per-PR is bounded by ctest/clang-tidy — chased in follow-ons (D1 changed-file lint, D2 ccache, B build-once artifact), tracked under vms-fb8.

Rationale + full analysis: docs/design-ci-latency-40m-to-1m.md.

⚠ Coordinate before merge

Shared infra — re-triggers all four lanes. Notifying VAX / Alpha / GCC-oracle peers; the VAX co-release gate (cut-release-vax-gate) moves to the non-PR tier, so VAX build breakage is caught at the pre-merge full run rather than per-PR. Hold merge for peer ack.

🤖 Generated with Claude Code

baron-3dl and others added 2 commits August 20, 2026 17:44
… e2e wall

Measured (run 32317162722, 46.0m): the wall is one job; the critical path is
~11 heavy QEMU release/install/upgrade/boot-scenario e2e gates (14-46m each),
each = cut-release ~19m + image build + boot/verify ~25m under TCG software
emulation. 79 of 90 jobs already finish under 10m.

C (tier-split): the 12 heavy e2e gates now run on NON-pull_request events only
(push, merge_group, workflow_dispatch, schedule) via
`if: github.event_name != 'pull_request'`. A PR runs the fast tier
(build+test, link/activate, kernel-executive shards, static analysis,
conformance, cross-compiles). No coverage deleted — the heavy tier MOVES off
the per-PR critical path.

A (KVM): run-qemu.sh / run_tests.sh / release_install_inner.sh select
`-accel kvm -cpu host` when /dev/kvm is writable, else `-accel tcg` (identical
behavior, no regression without KVM). GitHub-hosted Linux runners expose
/dev/kvm; accelerates the kernel-executive shards on the PR path and every
e2e job on the merge/dispatch path (~10x, per run_tests.sh's own TCG note).

Coverage-before-merge preserved: main has no merge queue today, so the reap
gate MUST fire a `workflow_dispatch` full run on the candidate branch and
verify GREEN before squash-merge (KVM-accelerated ~single-digit minutes).
merge_group catches it automatically once a queue is enabled (operator call).
Rationale + honest target split + follow-ons (D1 changed-file lint, D2 ccache,
B build-once artifact, B' self-hosted KVM) in docs/design-ci-latency-40m-to-1m.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… review)

Per gcc-oracle-lane review of #669: the tier-split widens the set of gates
that run only on non-PR events (heavy e2e + the pre-existing facility_defects
negctl meta-checks), so a lane reaping on fast-tier-green alone gets bitten.
Name the pre-merge workflow_dispatch full run as the backstop in the header.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@baron-3dl

Copy link
Copy Markdown
Contributor Author

Reviewed by main/ACP conductor — sound, own CI green. Coverage mechanism holds: heavy jobs now run unconditionally on non-PR events (stronger than the old path-filter skip); workflow_dispatch fires all of them; coverage-before-merge = the reap gate's green-by-SHA gh workflow run ci.yml --ref full run, which is already conductor discipline. KVM guard x86_64-only + TCG fallback = behavior-identical, no correctness risk.

Ordering constraint: land AFTER the 0.5 atomic-flip (#655) reaps — the flip's final full-suite proof should run under the CI semantics it was verified against; don't swap per-PR event handling mid-reap. Sequence: reap flip → land #669 → all lanes adopt the pre-merge workflow_dispatch discipline. Ready to merge the instant the flip lands.

… builds

Measured on the PR run: the fast-tier wall is set by the single slowest job on
a fully-parallel pool (peak concurrency 58/61 -- no queueing). The slow jobs
are cold rebuilds of the same tree (DCL link+activate = 467s in one build step)
and static-analysis's whole-tree clang-tidy (10.3m, informational-only).

- ccache on build-and-test + static-analysis: keys on preprocessed content, so
  across runs unchanged TUs are served from cache and only changed files
  recompile. Populates this run, hits the next -- lowers the build floor
  (~7m cold -> ~2-3m warm), which is the wall on a parallel pool.
- static-analysis clang-tidy: on a PR, lint only files changed vs the base
  branch (whole-tree still on push/merge_group/schedule). The sweep re-flagged
  hundreds of untouched files every PR; it is informational-only so this
  narrows latency, not a gate.

Next structural lever (child vms-809, expanded): a single build-native artifact
that the ~30 link/activate/probe jobs consume instead of each cold-rebuilding
the toolchain -- plus finer path filters so a normal PR runs the jobs its
changed files affect, not all 61. Floor is one warm build of the tree.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@baron-3dl
baron-3dl merged commit edfd4b5 into main Aug 20, 2026
88 checks passed
baron-3dl added a commit that referenced this pull request Aug 20, 2026
…f the PR loop) (#674)

Investigation: netbsd-vax-simh is 312s of un-accelerable SIMH TCG boot (VAX has
no KVM) of STOCK NetBSD/vax -- the smoke never loads OVMX source, yet it gated
on the broad netbsd_vax filter (covers src/**), so any OVMX-source PR paid 312s
for a boot that proves nothing about that source. Move it to NON-pull_request
events (push/merge_group/schedule) -- same treatment as the heavy QEMU e2e in
#669. The ILP32 width proof stays per-PR via the elf32-vax cross-compile jobs
(netbsd-vax-vms/vmsfs/facility-tools-crosscompile, vmsfs-core-elf32-vax); the
boot still gates pre-merge + push + nightly. No coverage deleted.

Co-authored-by: Claude Opus 4.8 (1M context) <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