From: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>
To: qemu-devel@nongnu.org
Cc: quintela@redhat.com, ashijeetacharya@gmail.com, amit@kernel.org,
pbutsykin@virtuozzo.com, zhang.zhanghailiang@huawei.com
Subject: [Qemu-devel] [PULL 05/14] migration: discard non-dirty ram pages after the start of postcopy
Date: Mon, 13 Feb 2017 17:50:24 +0000 [thread overview]
Message-ID: <20170213175033.7314-6-dgilbert@redhat.com> (raw)
In-Reply-To: <20170213175033.7314-1-dgilbert@redhat.com>
From: Pavel Butsykin <pbutsykin@virtuozzo.com>
After the start of postcopy migration there are some non-dirty pages which have
already been migrated. These pages are no longer needed on the source vm so that
we can free them and it doen't hurt to complete the migration.
Signed-off-by: Pavel Butsykin <pbutsykin@virtuozzo.com>
Message-Id: <20170203152321.19739-4-pbutsykin@virtuozzo.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
include/migration/migration.h | 1 +
migration/migration.c | 4 ++++
migration/ram.c | 19 +++++++++++++++++++
3 files changed, 24 insertions(+)
diff --git a/include/migration/migration.h b/include/migration/migration.h
index b9b706a..71ce190 100644
--- a/include/migration/migration.h
+++ b/include/migration/migration.h
@@ -285,6 +285,7 @@ int ram_postcopy_send_discard_bitmap(MigrationState *ms);
int ram_discard_range(MigrationIncomingState *mis, const char *block_name,
uint64_t start, size_t length);
int ram_postcopy_incoming_init(MigrationIncomingState *mis);
+void ram_postcopy_migrated_memory_release(MigrationState *ms);
/**
* @migrate_add_blocker - prevent migration from proceeding
diff --git a/migration/migration.c b/migration/migration.c
index 68afc07..2a26a20 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1722,6 +1722,10 @@ static int postcopy_start(MigrationState *ms, bool *old_vm_running)
*/
qemu_savevm_send_ping(ms->to_dst_file, 4);
+ if (migrate_release_ram()) {
+ ram_postcopy_migrated_memory_release(ms);
+ }
+
ret = qemu_file_get_error(ms->to_dst_file);
if (ret) {
error_report("postcopy_start: Migration stream errored");
diff --git a/migration/ram.c b/migration/ram.c
index c22209d..67f2efb 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1537,6 +1537,25 @@ void ram_debug_dump_bitmap(unsigned long *todump, bool expected)
/* **** functions for postcopy ***** */
+void ram_postcopy_migrated_memory_release(MigrationState *ms)
+{
+ struct RAMBlock *block;
+ unsigned long *bitmap = atomic_rcu_read(&migration_bitmap_rcu)->bmap;
+
+ QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
+ unsigned long first = block->offset >> TARGET_PAGE_BITS;
+ unsigned long range = first + (block->used_length >> TARGET_PAGE_BITS);
+ unsigned long run_start = find_next_zero_bit(bitmap, range, first);
+
+ while (run_start < range) {
+ unsigned long run_end = find_next_bit(bitmap, range, run_start + 1);
+ ram_discard_range(NULL, block->idstr, run_start << TARGET_PAGE_BITS,
+ (run_end - run_start) << TARGET_PAGE_BITS);
+ run_start = find_next_zero_bit(bitmap, range, run_end + 1);
+ }
+ }
+}
+
/*
* Callback from postcopy_each_ram_send_discard for each RAMBlock
* Note: At this point the 'unsentmap' is the processed bitmap combined
--
2.9.3
next prev parent reply other threads:[~2017-02-13 17:50 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-13 17:50 [Qemu-devel] [PULL 00/14] migration queue Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 01/14] migration: remove myself as maintainer Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 02/14] MAINTAINERS: update my email address Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 03/14] migration: add MigrationState arg for ram_save_/compressed_/page() Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 04/14] add 'release-ram' migrate capability Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` Dr. David Alan Gilbert (git) [this message]
2017-02-13 17:50 ` [Qemu-devel] [PULL 06/14] migrate: Introduce zero RAM checks to skip RAM migration Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 07/14] migration: consolidate VMStateField.start Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 08/14] COLO: fix setting checkpoint-delay not working properly Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 09/14] COLO: Shutdown related socket fd while do failover Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 10/14] COLO: Don't process failover request while loading VM's state Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 11/14] migration: Add VMSTATE_UNUSED_VARRAY_UINT32 Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 12/14] migration: Add VMSTATE_WITH_TMP Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 13/14] tests/migration: Add test for VMSTATE_WITH_TMP Dr. David Alan Gilbert (git)
2017-02-13 17:50 ` [Qemu-devel] [PULL 14/14] virtio/migration: Migrate virtio-net to VMState Dr. David Alan Gilbert (git)
2017-02-14 9:52 ` [Qemu-devel] [PULL 00/14] migration queue Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170213175033.7314-6-dgilbert@redhat.com \
--to=dgilbert@redhat.com \
--cc=amit@kernel.org \
--cc=ashijeetacharya@gmail.com \
--cc=pbutsykin@virtuozzo.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=zhang.zhanghailiang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).