Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
188 commits
Select commit Hold shift + click to select a range
9d2c04b
doc: specify NVX time ABI v1
ppenna Oct 1, 2026
88986ea
kernel: drop cpufreq and intel_pstate from the microVM config
ppenna Oct 1, 2026
b267c47
kernel: add a CI debug kernel variant with the watchdogs enabled
ppenna Oct 1, 2026
3aec306
doc: fix the time ABI RCU stall release
ppenna Oct 1, 2026
27c87f9
doc: align the time ABI skew metrics with the warp probe
ppenna Oct 1, 2026
71d3e06
doc: apply the time ABI orchestrator decisions
ppenna Oct 1, 2026
4fd8648
guest: add the nvx-time-probe guest time probe
ppenna Oct 1, 2026
751a03c
doc: finalize the time ABI backend obligations from the spikes
ppenna Oct 1, 2026
17ba6fb
kernel: keep the debug kernel's RCU stall timeout fixed
ppenna Oct 1, 2026
ead100c
guest: add the nvx-time guest time component
ppenna Oct 1, 2026
f7c1585
doc: settle the time ABI CPU profiles and answer guest questions
ppenna Oct 1, 2026
18e4d9a
doc: trim the time ABI boot check from the guest measurements
ppenna Oct 1, 2026
8480c3b
guest: link the time tools against musl
ppenna Oct 1, 2026
64dda40
guest: trim the nvx-time boot check to the revised spec
ppenna Oct 1, 2026
c301cbd
doc: settle the time ABI CPU profiles and WHP cells from the landed work
ppenna Oct 1, 2026
bb75e93
guest: fail the boot check on a writable and executable kernel mapping
ppenna Oct 1, 2026
81ab71b
kernel: keep runtime code read-only with STRICT_MODULE_RWX
ppenna Oct 1, 2026
0d25471
ci: classify time ABI guest failures in the microVM harness
ppenna Oct 1, 2026
8de77c6
scripts: add nvx.py doctor host qualification
ppenna Oct 1, 2026
8203988
ci: qualify runner host time with nvx.py doctor
ppenna Oct 1, 2026
c6c1967
doc: fold the perf baseline and restore attribution into the time ABI…
ppenna Oct 1, 2026
544f92e
guest: start nvx-time's daemon lines on a fresh console line
ppenna Oct 1, 2026
efe8ef4
doc: settle the time ABI anchors, K1, and the exhaustive check
ppenna Oct 1, 2026
47d1641
scripts: qualify hosts on measured time properties only
ppenna Oct 1, 2026
b60ba3b
doc: fold the KVM spike results into the time ABI spec
ppenna Oct 1, 2026
7085cdf
doc: record the measured time-sample epsilon on KVM and MSHV
ppenna Oct 1, 2026
a25dffa
guest: add nvx-time exhaustive, the CI-only exhaustive check
ppenna Oct 1, 2026
67ae4ab
doc: correct the KVM and MSHV epsilon ranges
ppenna Oct 1, 2026
2af3168
guest: give the Ubuntu guest enough memory to unpack its initramfs
ppenna Oct 1, 2026
e03be98
scripts: say what Azure WHP hosts lack in invariant TSC
ppenna Oct 1, 2026
c16627c
guest: turn off bracketed paste in the Ubuntu guest shell
ppenna Oct 1, 2026
a8bd215
doc: settle the last time ABI TBDs from the MSHV spike and the WHP ba…
ppenna Oct 1, 2026
26a7710
doc: decide the time ABI profile brand and microcode, and fold the pr…
ppenna Oct 1, 2026
8d92d2a
doc: fix the time ABI anchor sample count and the hidden-MSR behavior
ppenna Oct 1, 2026
5d8ee7c
guest: test the exhaustive check's report format
ppenna Oct 1, 2026
6d953b6
doc: time ABI ordering, effective CPUID set, and anchor bound rationale
ppenna Oct 1, 2026
dd637ee
doc: clarify the time ABI effective CPUID masks
ppenna Oct 1, 2026
4f8bc08
doc: finalize the time ABI host qualification from the WHP results
ppenna Oct 1, 2026
c4973ac
doc: state the time ABI legacy L2-cache MSR rule in the MSR section
ppenna Oct 1, 2026
d2cf575
scripts: name OpenVMM's fatal time ABI code in harness exit errors
ppenna Oct 1, 2026
bb5d2a4
scripts: check the CPU profile with OpenVMM's fingerprint tool in doc…
ppenna Oct 1, 2026
45de538
doc: cover management-endpoint microVMs and --restore-entropy in the …
ppenna Oct 1, 2026
a9d7c5c
doc: make the host clocksource evidence only in time ABI qualification
ppenna Oct 1, 2026
bc88956
doc: resume partition time at the read-back on every time ABI backend
ppenna Oct 1, 2026
7a01d7b
doc: scope time ABI lineages to one capture and its restores
ppenna Oct 1, 2026
91109d3
doc: say what Azure backends lack in invariant TSC
ppenna Oct 1, 2026
31b3371
doc: keep the time ABI quiet on the console in production
ppenna Oct 1, 2026
be570a3
doc: run the deferred time ABI work at SCHED_IDLE in one helper
ppenna Oct 1, 2026
73f0dc8
doc: check the restored timers where restore sets them
ppenna Oct 1, 2026
30f0d24
scripts: qualify H4 and H6 on the spec's rate and warp schedules
ppenna Oct 1, 2026
42b23d9
doc: bound the deferred time ABI work and keep the agent step numbers
ppenna Oct 1, 2026
e829d8c
doc: make the effective CPUID the single source of the guest's CPUID
ppenna Oct 1, 2026
3fa136f
doc: report a wrong per-VP APIC identity as a time ABI violation
ppenna Oct 1, 2026
77249d0
doc: report every recorded time ABI check from nvx-time status
ppenna Oct 2, 2026
a3e250c
doc: read the restore packet with inl and wait for boot checks at cap…
ppenna Oct 2, 2026
ccfb489
doc: judge H4 interval agreement against an undisciplined clock
ppenna Oct 2, 2026
8e714a8
doc: align H4's clock rules with the qualification code
ppenna Oct 2, 2026
84eeea4
doc: guarantee that CPUID entries outside the profile carry no host data
ppenna Oct 2, 2026
8eb36f6
doc: reserve unlisted CPUID entries and verify they hide host features
ppenna Oct 2, 2026
9c6f82c
doc: check unlisted CPUID entries on VP 0's view at every start
ppenna Oct 2, 2026
d8cbf76
doc: register MSHV's per-VP topology results at VP creation
ppenna Oct 2, 2026
f2d1aea
doc: list WHP's 0x8000001E exit where a profile lists it
ppenna Oct 2, 2026
34c2445
doc: cite only Intel PT's 0x14.1 as the root views' unlisted entry
ppenna Oct 2, 2026
720933d
doc: state the evidence for reserved CPUID entries precisely
ppenna Oct 2, 2026
2b6a7a3
doc: record the CPU profile by constants and compare it at restore
ppenna Oct 2, 2026
4c1c27a
doc: align H4's resolution, agreement, and detail with the probe
ppenna Oct 2, 2026
20f4998
doc: start the restore's step 13 100 ms after the acknowledgement
ppenna Oct 2, 2026
57a1ba7
doc: name the one unpinned ARCH_CAPABILITIES bit that differs by backend
ppenna Oct 2, 2026
d4dace6
doc: budget the checks' CPU time, and report their wall time unbudgeted
ppenna Oct 2, 2026
f5fe624
doc: keep the restore's delayed step 13 at SCHED_IDLE
ppenna Oct 2, 2026
2b03e69
doc: state Skylake-SP's MMIO Stale Data status under the shared profile
ppenna Oct 2, 2026
b8b5538
doc: give the unlisted-CPUID candidate counts per host class
ppenna Oct 2, 2026
d160d65
doc: rewrap verification step 6
ppenna Oct 2, 2026
084b028
doc: start the asynchronous boot checks 100 ms after shell-ready
ppenna Oct 2, 2026
febc584
doc: name why FB_CLEAR is clear on Skylake-SP
ppenna Oct 2, 2026
6cb9cbd
doc: keep MSHV's reserved-entry zeros and batch its CPUID read-back
ppenna Oct 2, 2026
c61b848
doc: drop the CPU profile functions that profiles removed
ppenna Oct 2, 2026
bb0470f
doc: give MSHV's current zero-result count and enumeration cost
ppenna Oct 2, 2026
a1bbd77
doc: pass reserved CPUID entries through on MSHV, as on WHP
ppenna Oct 2, 2026
ebf954b
doc: run restore steps 14 and 15 concurrently
ppenna Oct 2, 2026
11227f0
doc: give WHP's measured cost of reserved-entry zero results
ppenna Oct 2, 2026
dc44ef6
doc: require delivery of a pending LAPIC vector to a halted VP
ppenna Oct 2, 2026
63d0a81
doc: say that CI reports cpu_us against its budget without gating
ppenna Oct 2, 2026
ec6a839
doc: give MSHV's measured savings from pass-through and the range skip
ppenna Oct 2, 2026
3c6366d
doc: say that WHP presents PSCHANGE_MC_NO on Skylake-SP too
ppenna Oct 2, 2026
e7f1745
doc: name the matrix driver as the cpu_us budget's enforcer
ppenna Oct 2, 2026
55e28d8
doc: settle guest's Q23 to Q26 on the boot anchor and cpu_us
ppenna Oct 2, 2026
a79357d
doc: give WHP's measured CPUID read-back cost on every host
ppenna Oct 2, 2026
1a855ea
doc: start the deferred restore and boot checks 150 ms later
ppenna Oct 2, 2026
5b92a68
doc: describe the time ABI in the design docs and drop the Proposed m…
ppenna Oct 2, 2026
ef3c749
doc: list the ITS and multi-vCPU cold-boot costs of the v1 profiles
ppenna Oct 2, 2026
0a9652c
doc: give each backend a cpu_us budget per phase
ppenna Oct 2, 2026
b4a18ba
doc: record the post-resume timer catch-up of the restore
ppenna Oct 2, 2026
3f9cf18
doc: keep the boot step as the boot-check anchor (Q23)
ppenna Oct 2, 2026
bbc4040
kernel: drop the LAPIC frequency patch
ppenna Oct 1, 2026
a0a65df
kernel: drop the dormant KVM guest options
ppenna Oct 1, 2026
149dc68
guest: run the time ABI through nvx-time at boot and restore
ppenna Oct 1, 2026
87310ff
guest: keep plain restores off the console
ppenna Oct 1, 2026
0e03977
guest: keep the time ABI checks off the restore and boot paths
ppenna Oct 1, 2026
414371d
guest: keep the time ABI quiet on the console
ppenna Oct 1, 2026
69b9a06
guest: bound the deferred time ABI work and time the readiness path
ppenna Oct 2, 2026
d006a81
guest: report every recorded time ABI check from nvx-time status
ppenna Oct 2, 2026
8167dcb
guest: defer the time ABI checks by 100 ms and report their CPU time
ppenna Oct 2, 2026
10b331d
guest: start the deferred time ABI checks at 150 ms and count step 13…
ppenna Oct 2, 2026
96a0ed0
openvmm: pin the time ABI v1 integration head
ppenna Oct 2, 2026
a277f72
ci: drop clock tuning from the benchmark kernel command lines
ppenna Oct 1, 2026
ba7e9f3
ci: stop waiting for a stable clocksource before snapshot capture
ppenna Oct 1, 2026
263f9a4
ci: remove the smp-lapic scenario and its benchmark precheck
ppenna Oct 1, 2026
49e493c
ci: replace the restore TSC guards with the guest warp probe
ppenna Oct 1, 2026
7f9e79c
ci: require the time ABI boot marker on every cold boot
ppenna Oct 1, 2026
7c227fb
ci: add a long-downtime restore scenario
ppenna Oct 1, 2026
1fbc8c8
ci: add the exhaustive time ABI conformance scenario
ppenna Oct 1, 2026
e26fcec
ci: run the restore scenarios on the CI debug kernel
ppenna Oct 1, 2026
d3d7664
ci: read restore packet v4 entropy in the snapshot-core scenario
ppenna Oct 1, 2026
c50b087
ci: qualify VM runners with OpenVMM's profile check and preflight
ppenna Oct 1, 2026
4a1ad66
ci: print the time ABI evidence of every microVM test run
ppenna Oct 1, 2026
5a92c86
ci: stop passing --restore-entropy, which restore packet v4 replaces
ppenna Oct 1, 2026
3a4dd7e
ci: ask quiet time ABI guests for their status
ppenna Oct 1, 2026
e93fdc0
ci: drop the pre-flip --x-time-abi-v1 hints, which the flip removes
ppenna Oct 2, 2026
c6ce218
ci: report the time ABI checks' CPU time against the spec's budget
ppenna Oct 2, 2026
74786ba
doc: update the time ABI spec for the L3 fix, Q27, and MSHV's restore…
ppenna Oct 2, 2026
669859d
doc: mark the time ABI spec Proposed until validation passes
ppenna Oct 2, 2026
b39141a
doc: add the effective CPUID to the template compatibility class
ppenna Oct 2, 2026
ac3d810
doc: record the MSHV root-driver costs of a restore
ppenna Oct 2, 2026
dcab8cd
openvmm: bump the time ABI v1 integration head
ppenna Oct 2, 2026
8f062d8
doc: say how the snapshot agent detects a failed capture
ppenna Oct 2, 2026
feb5659
doc: make the failed-capture case fail after quiesce
ppenna Oct 2, 2026
f219cf4
doc: say what CI's snapshot-core asserts for the failed-capture case
ppenna Oct 2, 2026
b7a38eb
doc: correct the L3 fix's cold-boot effect on KVM
ppenna Oct 2, 2026
725985b
ci: check that a released snapshot request restores the guest's state
ppenna Oct 2, 2026
6bc6abc
doc: widen what CI's snapshot-core asserts for a released capture
ppenna Oct 2, 2026
91849f7
doc: publish the final cpu_us budgets
ppenna Oct 2, 2026
57128b3
ci: set the time ABI checks' CPU budgets to the spec's final values
ppenna Oct 2, 2026
92b48b5
doc: correct MSHV's registered CPUID count after the L3 fix
ppenna Oct 2, 2026
5d8281f
doc: correct the bare-metal MSHV CPU check time
ppenna Oct 2, 2026
fb93457
doc: record that the L3 fix ends the KVM multi-vCPU cold-boot regression
ppenna Oct 2, 2026
32849ac
doc: raise KVM's restore cpu_us budget to 6.5 + 1.5
ppenna Oct 2, 2026
c4f0499
ci: raise KVM's restore CPU budget to the spec's corrected 6.5 + 1.5 ms
ppenna Oct 2, 2026
9285f25
doc: say how the wall-clock discipline converges
ppenna Oct 2, 2026
21503ee
doc: say that MSHV's cpu_us budgets hold at 512 MiB too
ppenna Oct 2, 2026
3d6f17d
doc: quote the start-up budget at the integration head
ppenna Oct 2, 2026
22b838e
doc: say that fleet validation checks every recorded cpu_us sample
ppenna Oct 2, 2026
d365de0
doc: give MSHV's per-processor creation cost precisely
ppenna Oct 2, 2026
81d77f4
doc: record the guest's RTC write and correct the packet's exit count
ppenna Oct 2, 2026
b459e56
doc: say which failed captures carry a time ABI code
ppenna Oct 2, 2026
facd91e
guest: make nvx-exit a single static exec
ppenna Oct 3, 2026
088c4ca
doc: describe test hosts generically in the time ABI spec
ppenna Oct 2, 2026
e979ec9
doc: describe skipped polls in the wall-clock convergence
ppenna Oct 2, 2026
03102c0
doc: describe the post-resume work that runs after readiness
ppenna Oct 2, 2026
ac774f1
doc: correct the gate's metric count and the multi-vCPU cold-boot row
ppenna Oct 2, 2026
14bd770
doc: note the KVM paravirtual features the Hyper-V identity forgoes
ppenna Oct 2, 2026
fb35745
doc: record the bare-metal WHP convergence measurement
ppenna Oct 2, 2026
7b208db
doc: say a rolled-back capture leaves guest time running
ppenna Oct 2, 2026
f3f27b0
doc: add the existing-destination companion to the failed-capture row
ppenna Oct 2, 2026
6ddda5d
doc: add the MSHV hosts to the wall-clock convergence
ppenna Oct 2, 2026
79c09f2
doc: start the convergence checks at the first discipline poll
ppenna Oct 2, 2026
1869b4a
doc: take the convergence bound's rate over the 512 s before each poll
ppenna Oct 2, 2026
a162ceb
doc: add the scratch-device variant to the failed-capture row
ppenna Oct 2, 2026
86cf15b
doc: price WHP's first touch of restored memory
ppenna Oct 2, 2026
9300d7d
doc: add WHP's Azure page cost and end-to-end parity
ppenna Oct 3, 2026
ddbc8c4
doc: attribute the post-restore exit cost to cold process paths
ppenna Oct 3, 2026
97ce2b3
doc: disclose that the static nvx-exit offsets the first command's cost
ppenna Oct 3, 2026
719fe8c
doc: count the 34 one-vCPU benchmark metrics left after #116
ppenna Oct 2, 2026
32c8fff
doc: note CI's capture samples and the rollback exemption
ppenna Oct 2, 2026
70efa17
openvmm: bump to the time ABI v1 PR head
ppenna Oct 3, 2026
1bb1ac8
Install the time ABI tools in the Azure Linux image
ppenna Oct 3, 2026
ca1ccbf
doc: state how each restore path uses the restore entropy
ppenna Oct 3, 2026
f54279d
doc: make the cpu_us budget checks mechanical
ppenna Oct 2, 2026
77dc13f
time_abi: raise the KVM, MSHV and WHP cpu_us budgets
ppenna Oct 3, 2026
2bdeafc
doc: drop the Proposed marker from the time ABI spec
ppenna Oct 2, 2026
aa75ec5
openvmm: pin the time ABI v1 PR head rebased onto microvm/v2.1
ppenna Oct 3, 2026
dd0ce43
harness: monitor every TCP console to its end, and query its cold boots
ppenna Oct 3, 2026
9ed2352
ci: keep the nonstop_tsc runner gate in front of host qualification
ppenna Oct 3, 2026
ed83d4f
notices: nvx-exit links musl statically too
ppenna Oct 3, 2026
9b0f514
doc: describe nvx-port-io as it is now
ppenna Oct 3, 2026
59b7c44
test: pin nvx-exit codes that would wrap a 32-bit value
ppenna Oct 3, 2026
93a5b93
doc: keep the nonstop_tsc runner gate in the time ABI's host qualific…
ppenna Oct 3, 2026
40481a2
harness: snapshot-tiers' restored guests report their deferred restor…
ppenna Oct 3, 2026
655692a
doc: name snapshot-tiers among the restores that CI queries
ppenna Oct 3, 2026
c143b4b
doctor: fail H7 when w32tm names no time source
ppenna Oct 3, 2026
1941f63
doctor: fail closed on every host fact the gates can't read
ppenna Oct 3, 2026
8de6fd4
openvmm: pin the time ABI v1 PR head with explicit test comparisons
ppenna Oct 3, 2026
aa61f94
test-microvm: keep smp-lapic as an explicit scenario (#286)
ppenna Oct 3, 2026
8607101
ci: key both kernel caches on docker/Dockerfile
ppenna Oct 3, 2026
c2dbbb9
doc: document doctor and every CLI option in the usage reference
ppenna Oct 3, 2026
763abc1
run: state the guest memory defaults from the guest descriptors
ppenna Oct 3, 2026
b9f6e4b
doc: say what the time ABI removes from smp-lapic
ppenna Oct 3, 2026
a453866
openvmm: pin the time ABI v1 PR head with the KVM soundness fixes
ppenna Oct 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@ guest/* text eol=lf
guest/**/* text eol=lf
Dockerfile text eol=lf
kernel/config-microvm text eol=lf
kernel/config-microvm-debug text eol=lf

.github/workflows/*.lock.yml linguist-generated=true
119 changes: 106 additions & 13 deletions .github/actions/build-guest-artifacts/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,24 @@ inputs:
and cache saves for artifacts that miss the cache
required: false
default: "false"
debug-kernel:
description: Also cache or build the CI debug kernel (build/vmlinux-debug)
required: false
default: "false"
guest-images:
description: >-
Cache or build the kernel and guest images; "false" with debug-kernel
builds only the CI debug kernel, for a job that runs beside this one
required: false
default: "true"

outputs:
kernel-cache-key:
description: Exact cache key for the Linux kernel artifacts
value: ${{ steps.guest-cache-keys.outputs.kernel }}
debug-kernel-cache-key:
description: Exact cache key for the Linux debug kernel artifacts
value: ${{ steps.guest-cache-keys.outputs.kernel-debug }}
alpine-cache-key:
description: Exact cache key for the Alpine disk image artifacts
value: ${{ steps.guest-cache-keys.outputs.alpine }}
Expand Down Expand Up @@ -58,14 +71,16 @@ runs:
ALPINE_VERSION: ${{ steps.guest-versions.outputs.alpine-version }}
UBUNTU_VERSION: ${{ steps.guest-versions.outputs.ubuntu-version }}
AZURELINUX_VERSION: ${{ steps.guest-versions.outputs.azurelinux-version }}
KERNEL_INPUT_HASH: ${{ hashFiles('SOURCE-MANIFEST.json', 'kernel/config-microvm', 'kernel/patches/**', 'scripts/nvx_tools/build.py', 'scripts/nvx_tools/build_config.py', 'scripts/nvx_tools/build_constants.py') }}
KERNEL_INPUT_HASH: ${{ hashFiles('SOURCE-MANIFEST.json', 'kernel/config-microvm', 'kernel/patches/**', 'docker/Dockerfile', 'scripts/nvx_tools/build.py', 'scripts/nvx_tools/build_config.py', 'scripts/nvx_tools/build_constants.py') }}
DEBUG_KERNEL_INPUT_HASH: ${{ hashFiles('SOURCE-MANIFEST.json', 'kernel/config-microvm', 'kernel/config-microvm-debug', 'kernel/patches/**', 'docker/Dockerfile', 'scripts/nvx_tools/build.py', 'scripts/nvx_tools/build_config.py', 'scripts/nvx_tools/build_constants.py') }}
ALPINE_INPUT_HASH: ${{ hashFiles('SOURCE-MANIFEST.json', 'guest/common/**', 'guest/alpine/**', 'docker/Dockerfile', 'scripts/nvx_tools/build.py', 'scripts/nvx_tools/build_config.py', 'scripts/nvx_tools/build_constants.py', 'scripts/nvx_tools/common.py', 'scripts/nvx_tools/guests.py') }}
UBUNTU_INPUT_HASH: ${{ hashFiles('SOURCE-MANIFEST.json', 'guest/common/**', 'guest/ubuntu/**', 'ubuntu/**', 'docker/Dockerfile', 'scripts/nvx_tools/build.py', 'scripts/nvx_tools/build_config.py', 'scripts/nvx_tools/build_constants.py', 'scripts/nvx_tools/common.py', 'scripts/nvx_tools/guests.py', 'scripts/nvx_tools/ubuntu.py') }}
AZURELINUX_INPUT_HASH: ${{ hashFiles('SOURCE-MANIFEST.json', 'guest/common/**', 'azurelinux/**', 'docker/Dockerfile', 'scripts/nvx_tools/azurelinux.py', 'scripts/nvx_tools/build.py', 'scripts/nvx_tools/build_config.py', 'scripts/nvx_tools/build_constants.py', 'scripts/nvx_tools/common.py', 'scripts/nvx_tools/guests.py') }}
run: |
set -euo pipefail
{
echo "kernel=linux-kernel-v1-${KERNEL_VERSION}-${KERNEL_INPUT_HASH}"
echo "kernel-debug=linux-kernel-debug-v1-${KERNEL_VERSION}-${DEBUG_KERNEL_INPUT_HASH}"
echo "alpine=alpine-image-v1-${ALPINE_VERSION}-${ALPINE_INPUT_HASH}"
echo "ubuntu=ubuntu-initramfs-v1-${UBUNTU_VERSION}-${UBUNTU_INPUT_HASH}"
echo "ubuntu-distro=ubuntu-distro-v1-${UBUNTU_VERSION}-${UBUNTU_INPUT_HASH}"
Expand All @@ -74,6 +89,7 @@ runs:

- name: Restore Linux kernel (zstd)
id: cache-linux-kernel-zstd
if: inputs.guest-images == 'true'
uses: actions/cache/restore@v5
with:
path: |
Expand All @@ -85,6 +101,7 @@ runs:

- name: Restore Alpine disk image (zstd)
id: cache-alpine-image-zstd
if: inputs.guest-images == 'true'
uses: actions/cache/restore@v5
with:
path: |
Expand All @@ -96,6 +113,7 @@ runs:

- name: Restore Ubuntu initramfs (zstd)
id: cache-ubuntu-initramfs-zstd
if: inputs.guest-images == 'true'
uses: actions/cache/restore@v5
with:
path: |
Expand All @@ -106,6 +124,7 @@ runs:

- name: Restore Ubuntu distro layer (zstd)
id: cache-ubuntu-distro-zstd
if: inputs.guest-images == 'true'
uses: actions/cache/restore@v5
with:
path: |
Expand All @@ -116,6 +135,7 @@ runs:

- name: Restore Azure Linux initramfs (zstd)
id: cache-azurelinux-initramfs-zstd
if: inputs.guest-images == 'true'
uses: actions/cache/restore@v5
with:
path: |
Expand All @@ -125,7 +145,10 @@ runs:
enableCrossOsArchive: true

- name: Build Linux kernel (Docker)
if: inputs.restore-only != 'true' && steps.cache-linux-kernel-zstd.outputs.cache-hit != 'true'
if: >-
inputs.restore-only != 'true' &&
inputs.guest-images == 'true' &&
steps.cache-linux-kernel-zstd.outputs.cache-hit != 'true'
shell: bash
run: >-
docker build
Expand All @@ -135,7 +158,10 @@ runs:
.

- name: Save Linux kernel (zstd)
if: inputs.restore-only != 'true' && steps.cache-linux-kernel-zstd.outputs.cache-hit != 'true'
if: >-
inputs.restore-only != 'true' &&
inputs.guest-images == 'true' &&
steps.cache-linux-kernel-zstd.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: |
Expand All @@ -145,8 +171,50 @@ runs:
key: ${{ steps.guest-cache-keys.outputs.kernel }}
enableCrossOsArchive: true

- name: Restore Linux debug kernel (zstd)
id: cache-linux-debug-kernel-zstd
if: inputs.debug-kernel == 'true'
uses: actions/cache/restore@v5
with:
path: |
build/vmlinux-debug
build/vmlinux-debug.config
build/vmlinux-debug.provenance.json
key: ${{ steps.guest-cache-keys.outputs.kernel-debug }}
enableCrossOsArchive: true

- name: Build Linux debug kernel (Docker)
if: >-
inputs.restore-only != 'true' &&
inputs.debug-kernel == 'true' &&
steps.cache-linux-debug-kernel-zstd.outputs.cache-hit != 'true'
shell: bash
run: >-
docker build
--file docker/Dockerfile
--target kernel-debug-artifacts
--output type=local,dest=build
.

- name: Save Linux debug kernel (zstd)
if: >-
inputs.restore-only != 'true' &&
inputs.debug-kernel == 'true' &&
steps.cache-linux-debug-kernel-zstd.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: |
build/vmlinux-debug
build/vmlinux-debug.config
build/vmlinux-debug.provenance.json
key: ${{ steps.guest-cache-keys.outputs.kernel-debug }}
enableCrossOsArchive: true

- name: Build Alpine disk image (Docker)
if: inputs.restore-only != 'true' && steps.cache-alpine-image-zstd.outputs.cache-hit != 'true'
if: >-
inputs.restore-only != 'true' &&
inputs.guest-images == 'true' &&
steps.cache-alpine-image-zstd.outputs.cache-hit != 'true'
shell: bash
run: >-
docker build
Expand All @@ -156,7 +224,10 @@ runs:
.

- name: Save Alpine disk image (zstd)
if: inputs.restore-only != 'true' && steps.cache-alpine-image-zstd.outputs.cache-hit != 'true'
if: >-
inputs.restore-only != 'true' &&
inputs.guest-images == 'true' &&
steps.cache-alpine-image-zstd.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: |
Expand All @@ -167,7 +238,10 @@ runs:
enableCrossOsArchive: true

- name: Build Ubuntu initramfs (Docker)
if: inputs.restore-only != 'true' && steps.cache-ubuntu-initramfs-zstd.outputs.cache-hit != 'true'
if: >-
inputs.restore-only != 'true' &&
inputs.guest-images == 'true' &&
steps.cache-ubuntu-initramfs-zstd.outputs.cache-hit != 'true'
shell: bash
run: >-
docker build
Expand All @@ -180,8 +254,11 @@ runs:
if: >-
inputs.restore-only != 'true' &&
(
steps.cache-ubuntu-initramfs-zstd.outputs.cache-hit != 'true' ||
steps.cache-ubuntu-distro-zstd.outputs.cache-hit != 'true'
inputs.guest-images == 'true' &&
(
steps.cache-ubuntu-initramfs-zstd.outputs.cache-hit != 'true' ||
steps.cache-ubuntu-distro-zstd.outputs.cache-hit != 'true'
)
)
shell: bash
run: >-
Expand All @@ -191,7 +268,10 @@ runs:
.

- name: Save Ubuntu initramfs (zstd)
if: inputs.restore-only != 'true' && steps.cache-ubuntu-initramfs-zstd.outputs.cache-hit != 'true'
if: >-
inputs.restore-only != 'true' &&
inputs.guest-images == 'true' &&
steps.cache-ubuntu-initramfs-zstd.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: |
Expand All @@ -201,7 +281,10 @@ runs:
enableCrossOsArchive: true

- name: Build Azure Linux initramfs (Docker)
if: inputs.restore-only != 'true' && steps.cache-azurelinux-initramfs-zstd.outputs.cache-hit != 'true'
if: >-
inputs.restore-only != 'true' &&
inputs.guest-images == 'true' &&
steps.cache-azurelinux-initramfs-zstd.outputs.cache-hit != 'true'
shell: bash
env:
AZURELINUX_IMAGE: ${{ steps.guest-versions.outputs.azurelinux-image }}
Expand All @@ -216,7 +299,10 @@ runs:
.

- name: Save Azure Linux initramfs (zstd)
if: inputs.restore-only != 'true' && steps.cache-azurelinux-initramfs-zstd.outputs.cache-hit != 'true'
if: >-
inputs.restore-only != 'true' &&
inputs.guest-images == 'true' &&
steps.cache-azurelinux-initramfs-zstd.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: |
Expand All @@ -226,7 +312,10 @@ runs:
enableCrossOsArchive: true

- name: Build Ubuntu distro layer (Docker)
if: inputs.restore-only != 'true' && steps.cache-ubuntu-distro-zstd.outputs.cache-hit != 'true'
if: >-
inputs.restore-only != 'true' &&
inputs.guest-images == 'true' &&
steps.cache-ubuntu-distro-zstd.outputs.cache-hit != 'true'
shell: bash
run: >-
docker build
Expand All @@ -236,7 +325,10 @@ runs:
.

- name: Save Ubuntu distro layer (zstd)
if: inputs.restore-only != 'true' && steps.cache-ubuntu-distro-zstd.outputs.cache-hit != 'true'
if: >-
inputs.restore-only != 'true' &&
inputs.guest-images == 'true' &&
steps.cache-ubuntu-distro-zstd.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: |
Expand All @@ -246,6 +338,7 @@ runs:
enableCrossOsArchive: true

- name: Prepare Ubuntu sandbox scratch template
if: inputs.guest-images == 'true'
shell: bash
run: |
set -euo pipefail
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/check-quality/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ runs:
python -m compileall -q .github/specula
${SHELLCHECK} --shell=sh \
guest/common/init guest/alpine/nvx-container-enter \
guest/alpine/nvx-container-launch guest/common/nvx-exit \
guest/alpine/nvx-container-launch \
guest/common/nvx-hostmount guest/common/nvx-identity-probe \
guest/common/nvx-init-agent \
guest/common/nvx-container-enter-azurelinux \
Expand All @@ -49,7 +49,7 @@ runs:
python -m ruff format --check scripts .github/specula
${SHFMT} -d -ln posix -i 4 -ci \
guest/common/init guest/alpine/nvx-container-enter \
guest/alpine/nvx-container-launch guest/common/nvx-exit \
guest/alpine/nvx-container-launch \
guest/common/nvx-hostmount guest/common/nvx-identity-probe \
guest/common/nvx-init-agent \
guest/common/nvx-container-enter-azurelinux \
Expand Down
35 changes: 3 additions & 32 deletions .github/actions/run-benchmark/action.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
name: Run benchmark
description: Run and publish an OpenVMM performance series
description: >-
Run and publish an OpenVMM performance series; the caller downloads the
guest artifacts and OpenVMM into their build paths

inputs:
backend:
Expand Down Expand Up @@ -35,37 +37,6 @@ inputs:
runs:
using: composite
steps:
- name: Download guest artifacts
uses: actions/download-artifact@v8
with:
name: guest-artifacts
path: build

- name: Check Linux counting-LAPIC timers
if: runner.os != 'Windows'
shell: bash
run: |
set -euo pipefail
python3 scripts/nvx.py test-microvm \
--backend "${{ inputs.backend }}" \
--scenario smp-lapic \
--processors 1 2 4 8 \
--timeout "${{ inputs.marker-timeout }}" \
--output-dir "data/runs/${{ inputs.platform }}/lapic-correctness"

- name: Check Windows counting-LAPIC timers
if: runner.os == 'Windows'
shell: powershell
run: |
$ErrorActionPreference = "Stop"
python scripts\nvx.py test-microvm `
--backend "${{ inputs.backend }}" `
--scenario smp-lapic `
--processors 1 2 4 8 `
--timeout "${{ inputs.marker-timeout }}" `
--output-dir "data/runs/${{ inputs.platform }}/lapic-correctness"
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

- name: Run Linux acceptance test
if: runner.os != 'Windows'
shell: bash
Expand Down
7 changes: 5 additions & 2 deletions .github/actions/validate-nvx/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ runs:
run: |
set -euo pipefail
python3 -m compileall -q scripts
python3 -m unittest scripts/test_performance.py scripts/test_nvx_tools.py scripts/test_microvm_tests.py scripts/test_development_release.py scripts/test_egress_policy.py scripts/test_control_session.py scripts/test_managed_agent.py -v
python3 -m unittest scripts/test_performance.py scripts/test_nvx_tools.py scripts/test_microvm_tests.py scripts/test_development_release.py scripts/test_egress_policy.py scripts/test_control_session.py scripts/test_managed_agent.py scripts/test_guest_time.py scripts/test_time_abi.py -v
python3 scripts/test_adversarial.py -v
python3 .github/skills/nvx-host-connect/scripts/test_hosts.py -v
python3 scripts/nvx.py --help
Expand All @@ -20,6 +20,7 @@ runs:
python3 scripts/nvx.py test-aci-edge-sandboxes --help
python3 scripts/nvx.py test-adversarial --help
python3 scripts/nvx.py benchmark --help
python3 scripts/nvx.py doctor --help

- name: Validate NVX CLI on Windows
if: runner.os == 'Windows'
Expand All @@ -28,7 +29,7 @@ runs:
$ErrorActionPreference = "Stop"
python -m compileall -q scripts
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
python -m unittest scripts/test_performance.py scripts/test_nvx_tools.py scripts/test_microvm_tests.py scripts/test_development_release.py scripts/test_egress_policy.py scripts/test_control_session.py scripts/test_managed_agent.py -v
python -m unittest scripts/test_performance.py scripts/test_nvx_tools.py scripts/test_microvm_tests.py scripts/test_development_release.py scripts/test_egress_policy.py scripts/test_control_session.py scripts/test_managed_agent.py scripts/test_guest_time.py scripts/test_time_abi.py -v
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
python scripts\test_adversarial.py -v
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
Expand All @@ -48,3 +49,5 @@ runs:
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
python scripts\nvx.py benchmark --help
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
python scripts\nvx.py doctor --help
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
Loading
Loading