Skip to content

Commit

Permalink
Merge branch 'main-live-migration-pvm' into alex/s3-artifact-upload
Browse files Browse the repository at this point in the history
  • Loading branch information
pojntfx authored Feb 12, 2025
2 parents 2d4010a + 9b84c1d commit e76758b
Show file tree
Hide file tree
Showing 15 changed files with 122 additions and 144 deletions.
32 changes: 16 additions & 16 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 15 additions & 22 deletions docs/snapshotting/snapshot-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
- [Secure and insecure usage examples](#usage-examples)
- [Reusing snapshotted states securely](#reusing-snapshotted-states-securely)
- [Vsock device limitation](#vsock-device-limitation)
- [VMGenID device limitation](#vmgenid-device-limitation)
- [Where can I resume my snapshots?](#where-can-i-resume-my-snapshots)

## About microVM snapshotting

Expand Down Expand Up @@ -638,28 +640,19 @@ might not be able to handle the injected notification and crash. We suggest to
users that they take snapshots only after the guest kernel has completed
booting, to avoid this issue.

## Snapshot compatibility across kernel versions
## Where can I resume my snapshots?

We have a mechanism in place to experiment with snapshot compatibility across
supported host kernel versions by generating snapshot artifacts through
[this test](../../tests/integration_tests/functional/test_snapshot_phase1.py)
and checking devices' functionality using
[this test](../../tests/integration_tests/functional/test_snapshot_restore_cross_kernel.py).
The test restores the snapshot and ensures that all the devices set-up (network
devices, disk, vsock, balloon and MMDS) are operational post-load.
Snapshots must be resumed on an software and hardware configuration which is
identical to what they were generated on. However, in limited cases, snapshots
can be resumed on identical hardware instances where they were taken on, but
using newer host kernel versions. While we do not provide any guarantees on this
setup (and do not recommend doing this in production), we are currently aware of
the compatibility table reported below:

In those tests the instance is fixed, except some combinations where we also
test across the same CPU family (Intel x86, Gravitons). In general cross-CPU
snapshots [are not supported](./versioning.md#cpu-model)
| .metal instance type | taken on host kernel | restored on host kernel |
| -------------------- | -------------------- | ----------------------- |
| {c5n,m5n,m6i,m6a} | 5.10 | 6.1 |

The tables below reflect the snapshot compatibility observed on the AWS
instances we support.

**all** means all currently supported Intel/AMD/ARM metal instances (m6g, m7g,
m5n, c5n, m6i, m6a). It does not mean cross-instance, i.e. a snapshot taken on
m6i won't work on an m6g instance.

| *CPU family* | *taken on host kernel* | *restored on host kernel* | *working?* |
| ------------ | ---------------------- | ------------------------- | ---------- |
| **x86_64** | 5.10 | 6.1 | Y |
| **x86_64** | 6.1 | 5.10 | N |
For example, a snapshot taken on a m6i.metal host running a 5.10 host kernel can
be restored on a different m6i.metal host running a 6.1 host kernel (but not
vice versa), but could not be restored on a c5n.metal host.
2 changes: 1 addition & 1 deletion src/clippy-tracing/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ clap = { version = "4.5.27", features = ["derive"] }
itertools = "0.14.0"
proc-macro2 = { version = "1.0.93", features = ["span-locations"] }
quote = "1.0.38"
syn = { version = "2.0.96", features = ["full", "extra-traits", "visit", "visit-mut", "printing"] }
syn = { version = "2.0.98", features = ["full", "extra-traits", "visit", "visit-mut", "printing"] }
walkdir = "2.5.0"

[dev-dependencies]
Expand Down
2 changes: 1 addition & 1 deletion src/cpu-template-helper/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ displaydoc = "0.2.5"
libc = "0.2.169"
log-instrument = { path = "../log-instrument", optional = true }
serde = { version = "1.0.217", features = ["derive"] }
serde_json = "1.0.137"
serde_json = "1.0.138"
thiserror = "2.0.11"

vmm = { path = "../vmm" }
Expand Down
4 changes: 2 additions & 2 deletions src/firecracker/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ micro_http = { git = "https://github.com/firecracker-microvm/micro-http" }

serde = { version = "1.0.217", features = ["derive"] }
serde_derive = "1.0.136"
serde_json = "1.0.137"
serde_json = "1.0.138"
thiserror = "2.0.11"
timerfd = "1.6.0"
utils = { path = "../utils" }
Expand All @@ -43,7 +43,7 @@ userfaultfd = "0.8.1"
[build-dependencies]
seccompiler = { path = "../seccompiler" }
serde = { version = "1.0.217" }
serde_json = "1.0.137"
serde_json = "1.0.138"

[features]
tracing = ["log-instrument", "utils/tracing", "vmm/tracing"]
Expand Down
2 changes: 1 addition & 1 deletion src/log-instrument-macros/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ bench = false
[dependencies]
proc-macro2 = "1.0.93"
quote = "1.0.38"
syn = { version = "2.0.96", features = ["full", "extra-traits"] }
syn = { version = "2.0.98", features = ["full", "extra-traits"] }

[lints]
workspace = true
2 changes: 1 addition & 1 deletion src/seccompiler/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ clap = { version = "4.5.27", features = ["derive", "string"] }
displaydoc = "0.2.5"
libc = "0.2.169"
serde = { version = "1.0.217", features = ["derive"] }
serde_json = "1.0.137"
serde_json = "1.0.138"
thiserror = "2.0.11"
zerocopy = { version = "0.8.14" }

Expand Down
2 changes: 1 addition & 1 deletion src/vmm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ micro_http = { git = "https://github.com/firecracker-microvm/micro-http" }

semver = { version = "1.0.25", features = ["serde"] }
serde = { version = "1.0.217", features = ["derive", "rc"] }
serde_json = "1.0.137"
serde_json = "1.0.138"
slab = "0.4.7"
thiserror = "2.0.11"
timerfd = "1.5.0"
Expand Down
Loading

0 comments on commit e76758b

Please sign in to comment.