[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 05/16] migration: do not flush_compressed_data at the
From: |
Dr. David Alan Gilbert (git) |
Subject: |
[Qemu-devel] [PULL 05/16] migration: do not flush_compressed_data at the end of iteration |
Date: |
Wed, 26 Sep 2018 18:12:25 +0100 |
From: Xiao Guangrong <address@hidden>
flush_compressed_data() needs to wait all compression threads to
finish their work, after that all threads are free until the
migration feeds new request to them, reducing its call can improve
the throughput and use CPU resource more effectively
We do not need to flush all threads at the end of iteration, the
data can be kept locally until the memory block is changed or
memory migration starts over in that case we will meet a dirtied
page which may still exists in compression threads's ring
Signed-off-by: Xiao Guangrong <address@hidden>
Reviewed-by: Juan Quintela <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>
Signed-off-by: Dr. David Alan Gilbert <address@hidden>
---
migration/ram.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/migration/ram.c b/migration/ram.c
index 43360f6483..2c039892d3 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1996,17 +1996,22 @@ static bool find_dirty_block(RAMState *rs,
PageSearchStatus *pss, bool *again)
pss->page = 0;
pss->block = QLIST_NEXT_RCU(pss->block, next);
if (!pss->block) {
+ /*
+ * If memory migration starts over, we will meet a dirtied page
+ * which may still exists in compression threads's ring, so we
+ * should flush the compressed data to make sure the new page
+ * is not overwritten by the old one in the destination.
+ *
+ * Also If xbzrle is on, stop using the data compression at this
+ * point. In theory, xbzrle can do better than compression.
+ */
+ flush_compressed_data(rs);
+
/* Hit the end of the list */
pss->block = QLIST_FIRST_RCU(&ram_list.blocks);
/* Flag that we've looped */
pss->complete_round = true;
rs->ram_bulk_stage = false;
- if (migrate_use_xbzrle()) {
- /* If xbzrle is on, stop using the data compression at this
- * point. In theory, xbzrle can do better than compression.
- */
- flush_compressed_data(rs);
- }
}
/* Didn't find anything this time, but try again on the new block */
*again = true;
@@ -3219,7 +3224,6 @@ static int ram_save_iterate(QEMUFile *f, void *opaque)
}
i++;
}
- flush_compressed_data(rs);
rcu_read_unlock();
/*
--
2.17.1
- [Qemu-devel] [PULL 00/16] migration queue, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 01/16] migration/rdma: Fix uninitialised rdma_return_path, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 02/16] migration: fix calculating xbzrle_counters.cache_miss_rate, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 04/16] Add a hint message to loadvm and exits on failure, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 03/16] migration: handle the error condition properly, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 05/16] migration: do not flush_compressed_data at the end of iteration,
Dr. David Alan Gilbert (git) <=
- [Qemu-devel] [PULL 07/16] migration: use save_page_use_compression in flush_compressed_data, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 06/16] migration: show the statistics of compression, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 08/16] tests/migration: Convert x86 boot block compilation script into Makefile, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 09/16] tests/migration: Support cross compilation in generating boot header file, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 10/16] tests/migration: Add migration-test header file, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 11/16] migration/postcopy: Clear have_listen_thread, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 13/16] tests/migration: Speed up the test on ppc64, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 14/16] migration: fix QEMUFile leak, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 15/16] migration: fix the compression code, Dr. David Alan Gilbert (git), 2018/09/26
- [Qemu-devel] [PULL 12/16] migration: cleanup in error paths in loadvm, Dr. David Alan Gilbert (git), 2018/09/26