Skip to content

Conversation

RomanKovtyukh
Copy link
Contributor

@RomanKovtyukh RomanKovtyukh commented Jan 19, 2024

Changes

  • Added the get_dirty_bitmap on the full snapshot path

Reason

  • The full snapshot path doesn’t call Vmm:get_dirty_bitmap thus doesn’t call
    KVM_GET_DIRTY_LOG which doesn’t reset dirty pages.

Closes #4543.

License Acceptance

By submitting this pull request, I confirm that my contribution is made under the terms of the
Apache 2.0 license. For more information on following Developer Certificate of Origin and signing
off your commits, please check
CONTRIBUTING.md.

PR Checklist

  • If a specific issue led to this PR, this PR closes the issue.

  • The description of changes is clear and encompassing.

  • Any required documentation changes (code and docs) are included in this PR.

  • API changes follow the Runbook for Firecracker API
    changes
    .

  • User-facing changes are mentioned in CHANGELOG.md.

  • All added/changed functionality is tested.

  • New TODOs link to an issue.

  • Commits meet contribution quality
    standards
    .

  • This functionality cannot be added in rust-vmm.

@RomanKovtyukh RomanKovtyukh force-pushed the hackathon branch 4 times, most recently from 8498cbc to f88092d Compare January 19, 2024 16:22
@RomanKovtyukh RomanKovtyukh force-pushed the hackathon branch 4 times, most recently from a70c889 to 4f8a7e9 Compare January 19, 2024 17:22
Muskaan Singla and others added 2 commits January 19, 2024 17:27
When a diff snapshot it taken, it always contains all pages that were
dirtied since either instance start, or since the last diff snapshot was
taken, whichever is more recent. This is not what we document it to do:

> the diff consists of the memory pages which have been dirtied since
> the last snapshot creation or since the creation of the microVM,
> whichever of these events was the most recent.

Here "last snapshot creation" includes full snapshots, not just diff
snapshots (and that makes sense, if I take a diff snapshot after a full
snapshot, I expect the diff snapshot to be a diff compared to the full
snapshot).

Signed-off-by: Roman Kovtyukh <HelloDearGrandma@gmail.com>
Co-authored-by: Muskaan Singla <msinglaa@amazon.com>
Test that taking full snapshot is as described in documentation:

> the diff consists of the memory pages which have been dirtied since
> the last snapshot creation or since the creation of the microVM,
> whichever of these events was the most recent.

Signed-off-by: Roman Kovtyukh <HelloDearGrandma@gmail.com>
Co-authored-by: Pablo Barbáchano <pablob@amazon.com>
@@ -249,7 +249,10 @@ fn snapshot_memory_to_file(
.dump_dirty(&mut file, &dirty_bitmap)
.map_err(Memory)
}
SnapshotType::Full => vmm.guest_memory().dump(&mut file).map_err(Memory),
SnapshotType::Full => {
let _ = vmm.get_dirty_bitmap().map_err(DirtyBitmap)?;
Copy link
Contributor

Choose a reason for hiding this comment

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

I think we should only get the bitmap if it exists (see CI errors). Probably by handling the error here.

@bchalios
Copy link
Contributor

Closing this, as the issue was addressed by #4563 (using as well commits from here)

@bchalios bchalios closed this Apr 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Diff Snapshotting feature does not take into account full snapshots
3 participants