Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reset dirty log on full snapshot path #4385

Closed
wants to merge 2 commits into from

Conversation

Grandmother
Copy link
Contributor

@Grandmother Grandmother 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.

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 <[email protected]>
Co-authored-by: Muskaan Singla <[email protected]>
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 <[email protected]>
Co-authored-by: Pablo Barbáchano <[email protected]>
@@ -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