Skip to content

ci: shorten the runs that restore the VMM tests or skip both OpenVMM suites #982

Closed

Description

Follows: #430, which closed with these two targets unmet. Related: #649, #697, and #717.

Summary

#430 cut the median full-matrix run from 31.0 to 24.0 minutes, and to 19.3 without queueing, but missed two of its targets: runs that restore the OpenVMM VMM tests from the cache should take 12 to 15 minutes, and runs that skip both OpenVMM suites at most 15. The OpenVMM suites no longer bound either kind of run. The WHP platform job, the GitHub-hosted Linux OpenVMM unit tests, and the KVM general runners do.

Today

Successful first-attempt ci.yml runs from 2026-10-23 18:52 UTC, when #810 merged, to 2026-10-28 23:32 UTC, timed from the creation of each run's first job to the end of its last job. "Without queueing" means that no self-hosted job waited 2 minutes or more. See the results on #430 for the method and the full-matrix figures.

Runs Count Median Without queueing Target
VMM tests restored from the cache 89 18.8m 16.5m (18 runs) 12-15m
Both OpenVMM suites skipped, with benchmarks 68 17.7m 15.5m (30 runs) 15m
Both OpenVMM suites skipped, without benchmarks 18 12.9m 12.3m (8 runs) 15m
  • WHP platform path. Platform / Windows / WHP / Virtual machine waits for the whole NVX CLI / Windows job, a median 5.8 minutes, of which building nvx-rs takes 0.8 and validating the CLI 4.0. It then waits for WHP's only benchmark runner and measures for 8.9 minutes, so it ends about 15 minutes into a run before any queueing. It finished last in 67 of the 68 skip-both runs that ran the benchmarks and in 61 of the 89 cache-hit runs.
  • Hosted Linux unit tests. Since ci: run the OpenVMM unit tests off the hypervisor runners #697, OpenVMM unit tests / Linux runs on ubuntu-latest, where it takes a median 16.6 minutes. It finished last in 13 of the 26 cache-hit runs that ran the unit tests.
  • KVM general runners. Each run's longest wait for a KVM general runner rose from a median 0.1 and a p90 4.1 minutes, from October 10 to 21, to 3.3 and 11.1. With the VMM-test build and leg, two microVM shards, the guest and sandbox job, and the debug-kernel job, a run can need more than the pool's four general runners, as doc/ci.md notes.

Tasks

  • Evaluate starting each operating system's microVM and platform jobs once its CLI job has handed off nvx-rs, instead of after the whole CLI validation. They wait today so that a broken CLI does not hold hypervisor runners; measure the gain on WHP first.
  • Weigh the hosted Linux unit tests again against an MSHV runner, which ran them in 6.5 minutes with sccache (ci: run the OpenVMM unit tests off the hypervisor runners #697), now that they bound cache-hit runs.
  • Measure KVM general queueing by job, and either add a general runner or reduce the KVM jobs that a run needs at once.
  • Measure both targets again over at least five comparable runs each, with queue time.

Acceptance criteria

  • Runs that restore the VMM tests have a median of at most 15 minutes without queueing, or the remaining bound is documented.
  • Runs that skip both OpenVMM suites have a median of at most 15 minutes, with and without benchmarks, over at least five comparable runs each.
  • No required job, gate, or fail-closed behavior is lost, and each performance series is still measured on its one benchmark runner.
  • doc/ci.md describes any change to the job graph or the runner pools.

Activity

  1. 5 remaining items

  2. ppenna commented on Nov 6, 2026

    @ppenna
    ContributorAuthor

    Results after #1241

    #1028 did the first three tasks: no hypervisor job waits for the CLI tests any more, the releases are packaged beside the platform jobs, the pull requests' debug kernel runs on MSHV, and doc/ci.md records why the hosted Linux unit tests stayed hosted. #1074 then stopped CI running OpenVMM's tests, and #1241, which merged on 2026-11-03 at 20:03 UTC, runs WHP's runtime adapter scenarios in a job of their own. This is the fourth task, on the merged graph.

    Method. #430's, as in #1241: successful first-attempt ci.yml runs of pull requests, merge groups, and dev pushes created from 2026-11-03 20:03 UTC to 2026-11-06 00:18 UTC, timed from the creation of each run's first job to the end of its last job. "Without queueing" means that no self-hosted job waited 2 minutes or more. The 12 successful full runs are left out, as in #1241, and so are the 64 of the 157 such runs that ran only GitHub-hosted jobs. All 90 runs that ran the microVM tests ran NVX microVM tests / Windows / WHP / Runtime adapter. CI has run no OpenVMM suite since #1074, so, as in #1241, the runs that restore OpenVMM from its cache stand for those that skipped both suites. A run built OpenVMM when the Build OpenVMM step of one of its OpenVMM jobs took 2.3 to 4.1 minutes on Linux or 8.9 to 13.4 on Windows; on a cache hit, it took at most 1.1.

    Runs Before: Oct 23-28 After #1241: Nov 3-5 Target
    Both OpenVMM suites skipped (now OpenVMM restored), with benchmarks 17.7m (68); 15.5m without queueing (30) 14.9m (62); 11.5m without queueing (30) At most 15m: met
    Both OpenVMM suites skipped (now OpenVMM restored), without benchmarks 12.9m (18); 12.3m without queueing (8) 11.1m (2); 9.9m without queueing (1) At most 15m: met, on 2 runs and the estimate below
    VMM tests restored from the cache 18.8m (89); 16.5m without queueing (18) None since #1074 12-15m without queueing: moot
    OpenVMM built, for a pin change 30.1m (29); 19.9m without queueing (9) None
    • With benchmarks. Platform / Windows / WHP / Virtual machine, a median 7.8 minutes, ended last in 33 of the 62 runs. Without queueing, the GitHub-hosted nvx-rs / ubuntu-latest, a median 10.2 minutes, ended last in 13 of the 30, and the WHP runtime adapter and platform jobs in 6 each. The median was 12.4 minutes on November 3 and 11.9 on November 5, but 19.2 over the 38 runs of November 4, when 58 runs in all ran the benchmarks; 26 of those 38 queued, and the other 12 took 11.5.
    • Without benchmarks. A pull request or merge group skips the benchmarks only when it changes nothing but the inputs of the microVM tests, and only 2 runs did: merge group 42089584539 took 9.9 minutes, ending with the WHP runtime adapter job, and pull request 42079627771 took 12.3, after waiting 4.3 to 5.1 minutes for a general runner of each backend. Such a run runs the jobs of a run with benchmarks but the platform, package, and performance-gate jobs. In the 62 runs with benchmarks, those jobs ended a median 10.9 minutes into the run, or 10.7 in the 30 without queueing, of which 3 ended after 15 minutes; the required status check then takes about half a minute. That estimate stands in for the three runs short of the criterion's five.
    • Pin changes. The 29 runs that built OpenVMM waited for its Windows build. In 7 pull requests, which took 46 to 81 minutes, OpenVMM CI of the pinned revision ended last, since a pull request waits for OpenVMM's own CI of its pin (see OpenVMM CI). No target covers these runs.

    Queueing. Each run's longest wait for a general runner had a p90 of 8.0 minutes on KVM, 9.7 on MSHV, and 10.8 on WHP, and 32, 30, and 35 of the 93 runs waited 2 minutes or more, so KVM no longer queues the most, against 195 of 286 runs and a p90 of 11.1 in this issue's window. WHP's benchmark runner does: 44 of the 91 runs with benchmarks waited 2 minutes or more for it, at a p90 of 20.0 minutes, against 18 on KVM's and 17 on MSHV's.

    Other criteria.

    Both targets are met, the one without benchmarks on the estimate above. Closing as completed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions