Repository navigation
doc: sync cold boot with the second share and RAM overlay - #442
Merged
Pedro Henrique Penna (ppenna) merged 1 commit intoOct 9, 2026
Merged
Conversation
The cold-boot chapter predates two OpenVMM pins. The second microVM virtio-fs slot sits at 0xd0008000 on IRQ 13, so the nine reserved virtio-mmio slots now end at 0xd0008fff, the second slot's discovery token follows the control console's, and each attached share adds its own bootstrap tokens in slot order. The newest pin also lets a caller pass nvx_overlay_upper=ramfs exactly once to boot from a single read-only distro block without scratch, a layout that supports neither snapshot capture nor restore; OpenVMM rejects any other nvx_overlay_upper token. Correct the memory-layout diagram and the fresh-boot token order, and document the overlay token with the effective command line. The NVX init agent still keeps its overlay upper on scratch, so the chapter says so. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
The new scratchless layout contradicts the linked machine ABI documentation.
1 open finding
What changed in this PR
Updates cold-boot documentation to match the pinned OpenVMM contract.
Changes:
- Extends the reserved virtio-MMIO range for the second filesystem slot.
- Documents filesystem token ordering and RAM-backed overlays.
| File | Description |
|---|---|
doc/design/cold-boot.md |
Synchronizes memory layout and command-line contracts. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+125
to
+126
| its overlay upper in RAM. The microVM then requires exactly one read-only | ||
| `distro` [sandbox block](machine-and-device-abi.md#fixed-virtio-mmio-transport) |
Pedro Henrique Penna (ppenna)
deleted the
doc-sync/cold-boot-command-line
branch
October 9, 2026 03:27
This was referenced Oct 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
doc/design/cold-boot.mdpredates two OpenVMM pins, and its fresh-bootcontract no longer matches the submodule:
fs:microvm1, tagmicrovm1,0xd0008000, IRQ 13; pinned in b0ba778) extends the reservedvirtio-mmio window and the effective command line. The chapter still
showed eight slots and one filesystem.
token
nvx_overlay_upper=ramfs, which no NVX document covered.This PR corrects the memory-layout diagram and the fresh-boot token order,
and documents the overlay token alongside the other command-line rules. It
changes one file and touches nothing outside
doc/.Changes
All evidence paths are in the pinned submodule unless noted.
doc/design/cold-boot.md0xd0000000through0xd0007fff0xd0000000through0xd0008fffMICROVM_VIRTIO_MMIO_BASESlists nine 4-KiB slots, the last atMICROVM_VIRTIO_FS1_MMIO_BASE = 0xd000_8000;validate_microvm_virtio_reservationschecks them (openvmm/openvmm/openvmm_defs/src/microvm.rs). Matches "All nine fixed address slots" indoc/design/machine-and-device-abi.md.nvx_control_tty=hvc2nvx_control_tty=hvc2, only when a second HostFs export is attachedappend_microvm_virtio_discoverywrites the first slot after network, then the control console, then slotstake(filesystem_slots).skip(1);microvm_filesystem_slot_countreturnsattached.max(1). The worker checkvalidate_microvm_command_linerequires the same order (same file).machine-and-device-abi.md#filesystemfilesystemswithMICROVM_FILESYSTEM_SLOTS. Both launchers bootstrap every attached share on a fresh boot:openvmm/openvmm/openvmm_entry/src/microvm/config.rs(filesystem_bootstrap = !filesystems.is_empty()) andopenvmm/openvmm/openvmm_entry/src/ttrpc/microvm.rs(filesystem_bootstrap = truewhen a share is added).nvx_overlay_uppernvx_overlay_upper=ramfs, passed exactly once, requires exactly one read-onlydistroblock and no other block, and supports neither capture nor restore. Any othernvx_overlay_uppertoken, including a bare or repeated one, is rejected.ramfs_overlay_requestedandvalidate_microvm_sandbox_blocks(openvmm_defs/src/microvm.rs, applied both in discovery and in worker validation).validate_microvm_optionsrejects--snapshot-destinationand--restore-snapshotwith the token (openvmm_entry/src/cli_args/microvm.rs). Covered bytest_microvm_ramfs_overlay_requires_one_distro_and_no_snapshotandramfs_overlay_allows_only_a_read_only_distro_without_scratch. Introduced in f12dcf5e8.guest/common/nvx-init-agent(NVX tree) stops with "a scratch device is required"; no NVX guest, script, or crate passesnvx_overlay_upper(git grepreturns no matches).I left the rest of the chapter unchanged after re-checking it against the
pin, including the loader steps, the boot-reservation table (MP table
44 + 17×8 + 20×Nbytes, six page-table pages, command line at0x20000..0x2ffff), the base and caller-reserved tokens, the host-ownedtoken order (
build_effective_microvm_command_line, thenfinish), the64-KiB limit, and the SHA-256 recorded in the machine contract.
OpenVMM SHA:
f12dcf5e8f2ea60cc15899dd16852320530670bd, the gitlinkon
devat3ab4bac9d25dd40669b8b3f48956f998d5d5099d.Follow-ups
These are out of scope here or blocked by other branches:
doc/design/machine-and-device-abi.mdstill says "any nonemptytopology ends with scratch", and its role table calls scratch "Required
writable final role when blocks are present". Both should allow the
RAM-backed overlay layout. I didn't touch the file because open PRs Support filesystem-only streamed microVM snapshots #417,
Adopt bind-once microVM image slots #406, and test-microvm: pause and resume a microVM through OpenVMM state control #405 modify it. The snapshot chapters, also in open PRs, may want
to note that the layout cannot be captured.
PR Adopt bind-once microVM image slots #406 (ABI 3 image slots) changes the fixed MMIO inventory. When it
or any later pin lands, recheck this chapter's reserved-slot range and
discovery order.
doc/project-structure.mdhas drifted:microvm/mshv, but.gitmodulestracksmain.aci_edge_sandboxes/model/crate(
aci_edge_sandboxes_model) and thesrc/agent/backend.doc/tree omitsusage.md,contribute.md,guests/, andopenvmm-upstream-roadmap.md, and the workflow list is incomplete.I left it alone because the unopened branch
doc-sync/project-structurealready targets it.
doc/contribute.mdlacks the contribution workflow, branch, commit,and PR conventions, Draft vs Ready, quality gates, and pin promotion. The
unopened branches
doc-sync/contribute-standardsanddoc-sync/contributing-guidetarget it.scripts/setup/README.mdis documentation outsidedoc/. Moving itrequires editing links in
doc/ci.mdanddoc/setup.md, which open PRstest-microvm: pause and resume a microVM through OpenVMM state control #405 and Adopt bind-once microVM image slots #406 modify.
doc/openvmm-upstream-roadmap.mdhas no inbound links. It needs anindex entry, or removal if it is obsolete.
Suspected stray file, not documentation:
unittest_results.txt(50 KB of unittest output, tracked since the initial commit). Consider
removing it in a code PR.
Validation
python -m unittest scripts.test_nvx_tools.CliTests scripts.test_performance.PerformanceTests:Ran 110 tests,OK (skipped=1). The skipped test needs a Linuxpseudo-terminal, and this ran on Windows.
doc/design/cold-boot.mdand the files that link to it (doc/design.md,doc/design/configuration-boundary.md, anddoc/design/time-abi.md):every relative link and anchor resolves, the changed file has one H1 and
balanced code fences, and
doc/design.mdlinks every chapter indoc/design/. Result: 0 errors. I confirmed the checker reports plantedbroken links and anchors, a duplicate H1, an unclosed fence, and an
unindexed chapter.
git diff --check: clean.python scripts/nvx.py verify: passes.python scripts/nvx.py classify-ci-changes --event-name pull_requestonthis diff: "Only documentation files changed", and every suite is
false.doc/design/cold-boot.md, matches^(doc/|.*\.md$). Theopenvmmgitlink and the submodule contents areunchanged.