Skip to content

Test MSHV 6.18 weekly and benchmark it daily - #1941

Open
ludfjig wants to merge 3 commits into
hyperlight-dev:mainfrom
ludfjig:weekly-mshv-6.18
Open

ludfjig wants to merge 3 commits into
hyperlight-dev:mainfrom
ludfjig:weekly-mshv-6.18

Conversation

@ludfjig

@ludfjig ludfjig commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Tests MSHV 6.18 weekly and benchmarks it daily on Azure Linux 3 with the released MSHV 6.18 kernel

  • Adds WeeklyMshv618.yml job to run tests and examples
  • Adds a benchmarks-mshv-6-18 job to DailyBenchmarks.yml
  • Adds an optional mshv_kernel input to dep_build_test.yml, dep_run_examples.yml, and dep_benchmarks.yml. When it is set, mshv3 jobs run on hld-azlinux3-mshv-<mshv_kernel>-<vendor>. Existing callers do not pass it and keep their pools.
  • When mshv_kernel is set, benchmark artifacts are named benchmarks_Linux_mshv3-<mshv_kernel>_<vendor>. This avoids a name collision with the 6.6 artifacts in the same daily run. bench-report reads the label as its own hypervisor, so 6.6 results never match a 6.18 baseline.

The new pools hld-azlinux3-mshv-6.18-amd and hld-azlinux3-mshv-6.18-intel hold up max 3 VMs each to save azure quota. This is suffient since we don't run per pr

passed runs: https://github.com/hyperlight-dev/hyperlight/actions/runs/38781317655?pr=1941

Add WeeklyMshv618.yml, which runs the mshv3 build-test, examples, and
benchmarks on the hld-azlinux3-mshv-6.18-{amd,intel} pools every Monday.
A failure opens or updates a release-blocking issue labeled
area/ci-periodics-mshv-6.18.

Add an optional mshv_kernel input to dep_build_test, dep_run_examples,
and dep_benchmarks. It selects the hld-azlinux3-mshv-<kernel>-<vendor>
pool. Callers that omit it keep the existing pools.

The run keeps hypervisor mshv3, so it uses the mshv3 feature, Justfile
recipes, and Rust cache keys. Both pools run Azure Linux 3.

Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com>
@ludfjig ludfjig added the kind/enhancement For PRs adding features, improving functionality, docs, tests, etc. label Oct 15, 2026
@hyperlight-gh-bot

Copy link
Copy Markdown

Benchmark Results

Measured commit: 83dfcf30e69c
Baseline commit: 83849abf1ab4

kvm / amd (Linux) (➖ stable)

No benchmark improved or regressed.

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 806.15 ns (➖ 1.03x slower)
vec_bytes 588.55 ns (➖ 1.01x faster)
373.55 µs (➖ 1.00x slower)

payload_allocation

slot_pool_segmented
262144 522.29 ns (➖ 1.01x faster)
65536 141.89 ns (➖ 1.03x faster)

sandboxes

create_initialized_and_drop
medium 80.60 ms (➖ 1.01x faster)

slot_pool

alloc_dealloc_1500 alloc_dealloc_4096 alloc_dealloc_128
7.89 ns (➖ 1.02x slower) 7.74 ns (➖ 1.00x slower) 7.73 ns (➖ 1.00x faster)

snapshot_files

load_snapshot_unverified
small 93.47 µs (➖ 1.00x faster)

virtq_readonly

slot_pool_segmented_fragmented slot_pool_segmented
262144 7.04 µs (➖ 1.01x faster) 7.05 µs (➖ 1.02x faster)
65536 2.07 µs (➖ 1.03x slower) 1.94 µs (➖ 1.08x faster)

virtq_readwrite

slot_pool_segmented_fragmented slot_pool_segmented
65536 6.35 µs (➖ 1.01x faster) 6.39 µs (➖ 1.06x faster)
8192 1.08 µs (➖ 1.05x faster) 1.08 µs (➖ 1.01x slower)
262144 27.15 µs (➖ 1.02x faster)
kvm / intel (Linux) (➖ stable)

No benchmark improved or regressed.

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 676.34 ns (➖ 1.00x faster)
vec_bytes 512.78 ns (➖ 1.00x slower)
665.58 µs (➖ 1.02x faster)

payload_allocation

slot_pool_segmented
262144 497.62 ns (➖ 1.00x slower)
65536 160.60 ns (➖ 1.20x slower)

sandboxes

create_initialized_and_drop
medium 72.77 ms (➖ 1.06x faster)

slot_pool

alloc_dealloc_1500 alloc_dealloc_4096 alloc_dealloc_128
6.86 ns (➖ 1.03x faster) 6.87 ns (➖ 1.01x faster) 6.87 ns (➖ 1.03x faster)

snapshot_files

load_snapshot_unverified
small 43.36 µs (➖ 1.04x faster)

virtq_readonly

slot_pool_segmented_fragmented slot_pool_segmented
262144 7.55 µs (➖ 1.00x slower) 7.58 µs (➖ 1.00x slower)
65536 2.14 µs (➖ 1.00x faster) 2.14 µs (➖ 1.02x slower)

virtq_readwrite

slot_pool_segmented_fragmented slot_pool_segmented
65536 7.08 µs (➖ 1.01x faster) 7.08 µs (➖ 1.01x faster)
8192 751.03 ns (➖ 1.04x faster) 736.41 ns (➖ 1.03x faster)
262144 29.43 µs (➖ 1.03x faster)
mshv3 / amd (Linux) (➖ stable)

No benchmark improved or regressed.

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 926.46 ns (➖ 1.00x slower)
vec_bytes 724.77 ns (➖ 1.03x slower)
317.84 µs (➖ 1.00x faster)

payload_allocation

slot_pool_segmented
262144 680.07 ns (➖ 1.01x slower)
65536 184.06 ns (➖ 1.06x faster)

sandboxes

create_initialized_and_drop
medium 56.88 ms (➖ 1.05x faster)

slot_pool

alloc_dealloc_1500 alloc_dealloc_4096 alloc_dealloc_128
9.98 ns (➖ 1.00x slower) 9.98 ns (➖ 1.01x slower) 9.92 ns (➖ 1.00x faster)

snapshot_files

load_snapshot_unverified
small 85.71 µs (➖ 1.00x faster)

virtq_readonly

slot_pool_segmented_fragmented slot_pool_segmented
262144 9.31 µs (➖ 1.02x slower) 9.75 µs (➖ 1.09x slower)
65536 2.66 µs (➖ 1.01x faster) 2.47 µs (➖ 1.01x faster)

virtq_readwrite

slot_pool_segmented_fragmented slot_pool_segmented
65536 8.11 µs (➖ 1.01x faster) 8.15 µs (➖ 1.02x faster)
8192 1.46 µs (➖ 1.10x slower) 1.34 µs (➖ 1.02x slower)
262144 35.24 µs (➖ 1.00x faster)
mshv3 / intel (Linux) (➖ stable)

No benchmark improved or regressed.

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 907.41 ns (➖ 1.05x faster)
vec_bytes 667.56 ns (➖ 1.01x faster)
832.86 µs (➖ 1.10x slower)

payload_allocation

slot_pool_segmented
262144 656.12 ns (➖ 1.07x faster)
65536 192.14 ns (➖ 1.11x slower)

sandboxes

create_initialized_and_drop
medium 77.68 ms (➖ 1.08x slower)

slot_pool

alloc_dealloc_1500 alloc_dealloc_4096 alloc_dealloc_128
9.49 ns (➖ 1.05x faster) 9.64 ns (➖ 1.01x slower) 9.33 ns (➖ 1.01x slower)

snapshot_files

load_snapshot_unverified
small 49.73 µs (➖ 1.01x faster)

virtq_readonly

slot_pool_segmented_fragmented slot_pool_segmented
262144 7.92 µs (➖ 1.00x faster) 7.97 µs (➖ 1.01x slower)
65536 2.26 µs (➖ 1.01x faster) 2.27 µs (➖ 1.01x slower)

virtq_readwrite

slot_pool_segmented_fragmented slot_pool_segmented
65536 7.70 µs (➖ 1.01x slower) 7.55 µs (➖ 1.02x faster)
8192 926.06 ns (➖ 1.02x faster) 929.98 ns (➖ 1.01x slower)
262144 41.63 µs (➖ 1.00x slower)
hyperv-ws2025 / amd (Windows) (➖ stable)

No benchmark improved or regressed.

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 1.13 µs (➖ 1.00x slower)
vec_bytes 806.61 ns (➖ 1.05x slower)
1.86 ms (➖ 1.15x faster)

payload_allocation

slot_pool_segmented
262144 793.83 ns (➖ 1.01x slower)
65536 230.71 ns (➖ 1.01x slower)

sandboxes

create_initialized_and_drop
medium 102.67 ms (➖ 1.28x slower)

slot_pool

alloc_dealloc_1500 alloc_dealloc_4096 alloc_dealloc_128
10.88 ns (➖ 1.00x slower) 10.91 ns (➖ 1.01x faster) 10.92 ns (➖ 1.01x slower)

snapshot_files

load_snapshot_unverified
small 599.41 µs (➖ 1.04x faster)

virtq_readonly

slot_pool_segmented_fragmented slot_pool_segmented
262144 8.75 µs (➖ 1.02x slower) 8.82 µs (➖ 1.02x slower)
65536 2.53 µs (➖ 1.00x faster) 2.55 µs (➖ 1.00x faster)

virtq_readwrite

slot_pool_segmented_fragmented slot_pool_segmented
65536 9.18 µs (➖ 1.03x slower) 8.77 µs (➖ 1.01x slower)
8192 1.40 µs (➖ 1.03x faster) 1.42 µs (➖ 1.01x slower)
262144 38.15 µs (➖ 1.01x faster)
hyperv-ws2025 / intel (Windows) (➖ stable)

No benchmark improved or regressed.

Benchmark Results

function_call_codec

encode_control decode_vec_bytes_copy
byte_chunks 1.26 µs (➖ 1.04x slower)
vec_bytes 781.78 ns (➖ 1.01x slower)
2.91 ms (➖ 1.01x slower)

payload_allocation

slot_pool_segmented
262144 796.08 ns (➖ 1.08x slower)
65536 208.78 ns (➖ 1.01x faster)

sandboxes

create_initialized_and_drop
medium 112.38 ms (➖ 1.10x faster)

slot_pool

alloc_dealloc_1500 alloc_dealloc_4096 alloc_dealloc_128
10.17 ns (➖ 1.03x slower) 9.93 ns (➖ 1.00x slower) 9.91 ns (➖ 1.13x faster)

snapshot_files

load_snapshot_unverified
small 556.53 µs (➖ 1.02x faster)

virtq_readonly

slot_pool_segmented_fragmented slot_pool_segmented
262144 7.76 µs (➖ 1.02x slower) 7.78 µs (➖ 1.00x slower)
65536 2.39 µs (➖ 1.04x slower) 2.34 µs (➖ 1.00x slower)

virtq_readwrite

slot_pool_segmented_fragmented slot_pool_segmented
65536 8.88 µs (➖ 1.01x slower) 8.68 µs (➖ 1.01x slower)
8192 1.14 µs (➖ 1.09x faster) 1.10 µs (➖ 1.00x slower)
262144 43.89 µs (➖ 1.02x slower)

Reported by cargo ci bench-report --candidate run:38781317541 --config-file bench_report.toml.

Move the MSHV 6.18 benchmarks from WeeklyMshv618.yml to a separate
DailyBenchmarks.yml job. Daily runs measure 6.6 and 6.18 on the same
commit, in the same mode, at about the same time. A separate job keeps a
6.18 failure from cancelling the existing fail-fast matrix.

Name benchmark artifacts benchmarks_<OS>_<hypervisor>-<kernel>_<vendor>
when mshv_kernel is set, so 6.18 results do not collide with the 6.6
artifacts in the same run. bench-report reads the new label as its own
hypervisor, so 6.6 results never match a 6.18 baseline.

Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com>
@ludfjig ludfjig changed the title Add weekly MSHV 6.18 test and benchmark workflow Test MSHV 6.18 weekly and benchmark it daily Oct 15, 2026
Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com>
@ludfjig
ludfjig marked this pull request as ready for review October 15, 2026 19:16
Copilot AI balanced review requested due to automatic review settings October 15, 2026 19:16

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The scoped workflow changes preserve default behavior, isolate benchmark artifacts, and have no identified blocking issues.

0 open findings

What changed in this PR

Adds scheduled MSHV 6.18 coverage on Azure Linux 3 while preserving existing runner pools for other callers.

Changes:

  • Runs tests and examples weekly on AMD and Intel pools.
  • Runs daily benchmarks with kernel-specific artifact names.
  • Documents benchmark coverage and the dedicated weekly failure label.
File Description
docs/​github-labels.md Documents the weekly failure label.
docs/​benchmarking-hyperlight.md Documents daily MSHV 6.18 benchmarks.
.github/​workflows/​WeeklyMshv618.yml Schedules tests, examples, and failure reporting.
.github/​workflows/​dep_run_examples.yml Supports kernel-specific example runner pools.
.github/​workflows/​dep_build_test.yml Supports kernel-specific test runner pools.
.github/​workflows/​dep_benchmarks.yml Supports kernel-specific pools and artifact names.
.github/​workflows/​DailyBenchmarks.yml Adds MSHV 6.18 benchmarks and failure notification wiring.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

This branch has not been deployed

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

Labels

kind/enhancement For PRs adding features, improving functionality, docs, tests, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants