[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 1/7] migration: disable auto-converge during bulk blo
From: |
Dr. David Alan Gilbert (git) |
Subject: |
[Qemu-devel] [PULL 1/7] migration: disable auto-converge during bulk block migration |
Date: |
Wed, 27 Sep 2017 14:57:36 +0100 |
From: Peter Lieven <address@hidden>
auto-converge and block migration currently do not play well together.
During block migration the auto-converge logic detects that ram
migration makes no progress and thus throttles down the vm until
it nearly stalls completely. Avoid this by disabling the throttling
logic during the bulk phase of the block migration.
Cc: address@hidden
Signed-off-by: Peter Lieven <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Dr. David Alan Gilbert <address@hidden>
Reviewed-by: Juan Quintela <address@hidden>
Signed-off-by: Dr. David Alan Gilbert <address@hidden>
---
migration/block.c | 5 +++++
migration/block.h | 7 +++++++
migration/ram.c | 6 +++++-
3 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/migration/block.c b/migration/block.c
index 9171f60028..606ad4db92 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -161,6 +161,11 @@ int blk_mig_active(void)
return !QSIMPLEQ_EMPTY(&block_mig_state.bmds_list);
}
+int blk_mig_bulk_active(void)
+{
+ return blk_mig_active() && !block_mig_state.bulk_completed;
+}
+
uint64_t blk_mig_bytes_transferred(void)
{
BlkMigDevState *bmds;
diff --git a/migration/block.h b/migration/block.h
index 22ebe94259..3178609dbd 100644
--- a/migration/block.h
+++ b/migration/block.h
@@ -16,6 +16,7 @@
#ifdef CONFIG_LIVE_BLOCK_MIGRATION
int blk_mig_active(void);
+int blk_mig_bulk_active(void);
uint64_t blk_mig_bytes_transferred(void);
uint64_t blk_mig_bytes_remaining(void);
uint64_t blk_mig_bytes_total(void);
@@ -25,6 +26,12 @@ static inline int blk_mig_active(void)
{
return false;
}
+
+static inline int blk_mig_bulk_active(void)
+{
+ return false;
+}
+
static inline uint64_t blk_mig_bytes_transferred(void)
{
return 0;
diff --git a/migration/ram.c b/migration/ram.c
index 88ca69e7b2..b83f8977c5 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -46,6 +46,7 @@
#include "exec/ram_addr.h"
#include "qemu/rcu_queue.h"
#include "migration/colo.h"
+#include "migration/block.h"
/***********************************************************/
/* ram save/restore */
@@ -825,7 +826,10 @@ static void migration_bitmap_sync(RAMState *rs)
/ (end_time - rs->time_last_bitmap_sync);
bytes_xfer_now = ram_counters.transferred;
- if (migrate_auto_converge()) {
+ /* During block migration the auto-converge logic incorrectly detects
+ * that ram migration makes no progress. Avoid this by disabling the
+ * throttling logic during the bulk phase of block migration. */
+ if (migrate_auto_converge() && !blk_mig_bulk_active()) {
/* The following detection logic can be refined later. For now:
Check to see if the dirtied bytes is 50% more than the approx.
amount of bytes that just got transferred since the last time we
--
2.13.5
- [Qemu-devel] [PULL 0/7] migration queue, Dr. David Alan Gilbert (git), 2017/09/27
- [Qemu-devel] [PULL 3/7] migration: check pre_save return in vmstate_save_state, Dr. David Alan Gilbert (git), 2017/09/27
- [Qemu-devel] [PULL 4/7] migration: Check field save returns, Dr. David Alan Gilbert (git), 2017/09/27
- [Qemu-devel] [PULL 1/7] migration: disable auto-converge during bulk block migration,
Dr. David Alan Gilbert (git) <=
- [Qemu-devel] [PULL 2/7] migration: pre_save return int, Dr. David Alan Gilbert (git), 2017/09/27
- [Qemu-devel] [PULL 6/7] migration: Route errors up through vmstate_save, Dr. David Alan Gilbert (git), 2017/09/27
- [Qemu-devel] [PULL 5/7] migration: wire vmstate_save_state errors up to vmstate_subsection_save, Dr. David Alan Gilbert (git), 2017/09/27
- [Qemu-devel] [PULL 7/7] migration: Route more error paths, Dr. David Alan Gilbert (git), 2017/09/27
- Re: [Qemu-devel] [PULL 0/7] migration queue, Peter Maydell, 2017/09/27