vms-fb8: CI tier-split + KVM accel — per-PR loop off the 46m e2e wall - #669
Conversation
… 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>
|
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 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>
…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>
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
pull_requestevents 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.run-qemu.sh/run_tests.sh/release_install_inner.shselect-accel kvm -cpu hostwhen/dev/kvmis 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×, perrun_tests.sh's own TCG note).Coverage-before-merge (important)
mainhas no merge queue today, somerge_groupnever fires. Until a queue is enabled, the reap gate must fire aworkflow_dispatchfull run on the candidate branch and verify GREEN before squash-merge (KVM-accelerated, single-digit minutes). Documented in theci.ymlheader. ⚠ Operator call: enabling a GitHub merge queue onmainmakes 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