qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH V3] migration: disable auto-converge during bulk block migration
@ 2017-09-26 10:33 Peter Lieven
  2017-09-26 10:59 ` Dr. David Alan Gilbert
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Peter Lieven @ 2017-09-26 10:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: quintela, famz, stefanha, dgilbert, pbonzini, Peter Lieven,
	qemu-stable

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: qemu-stable@nongnu.org
Signed-off-by: Peter Lieven <pl@kamp.de>
---
V1->V2: add comment why we disable auto-converge during bulk block migration [Stefan]
V2->V3: add missing patch for migration/block.h

 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 9171f60..606ad4d 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 22ebe94..3178609 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 88ca69e..b83f897 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
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH V3] migration: disable auto-converge during bulk block migration
  2017-09-26 10:33 [Qemu-devel] [PATCH V3] migration: disable auto-converge during bulk block migration Peter Lieven
@ 2017-09-26 10:59 ` Dr. David Alan Gilbert
  2017-09-27  9:03 ` Juan Quintela
  2017-09-27 10:28 ` Dr. David Alan Gilbert
  2 siblings, 0 replies; 4+ messages in thread
From: Dr. David Alan Gilbert @ 2017-09-26 10:59 UTC (permalink / raw)
  To: Peter Lieven; +Cc: qemu-devel, quintela, famz, stefanha, pbonzini, qemu-stable

* Peter Lieven (pl@kamp.de) wrote:
> 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: qemu-stable@nongnu.org
> Signed-off-by: Peter Lieven <pl@kamp.de>

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
> V1->V2: add comment why we disable auto-converge during bulk block migration [Stefan]
> V2->V3: add missing patch for migration/block.h
> 
>  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 9171f60..606ad4d 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 22ebe94..3178609 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 88ca69e..b83f897 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
> -- 
> 1.9.1
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH V3] migration: disable auto-converge during bulk block migration
  2017-09-26 10:33 [Qemu-devel] [PATCH V3] migration: disable auto-converge during bulk block migration Peter Lieven
  2017-09-26 10:59 ` Dr. David Alan Gilbert
@ 2017-09-27  9:03 ` Juan Quintela
  2017-09-27 10:28 ` Dr. David Alan Gilbert
  2 siblings, 0 replies; 4+ messages in thread
From: Juan Quintela @ 2017-09-27  9:03 UTC (permalink / raw)
  To: Peter Lieven; +Cc: qemu-devel, famz, stefanha, dgilbert, pbonzini, qemu-stable

Peter Lieven <pl@kamp.de> wrote:
> 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: qemu-stable@nongnu.org
> Signed-off-by: Peter Lieven <pl@kamp.de>

Reviewed-by: Juan Quintela <quintela@redhat.com>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH V3] migration: disable auto-converge during bulk block migration
  2017-09-26 10:33 [Qemu-devel] [PATCH V3] migration: disable auto-converge during bulk block migration Peter Lieven
  2017-09-26 10:59 ` Dr. David Alan Gilbert
  2017-09-27  9:03 ` Juan Quintela
@ 2017-09-27 10:28 ` Dr. David Alan Gilbert
  2 siblings, 0 replies; 4+ messages in thread
From: Dr. David Alan Gilbert @ 2017-09-27 10:28 UTC (permalink / raw)
  To: Peter Lieven; +Cc: qemu-devel, quintela, famz, stefanha, pbonzini, qemu-stable

* Peter Lieven (pl@kamp.de) wrote:
> 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.

Queued for migration (which hopefully I'll send a pull later today)

Dave

> Cc: qemu-stable@nongnu.org
> Signed-off-by: Peter Lieven <pl@kamp.de>
> ---
> V1->V2: add comment why we disable auto-converge during bulk block migration [Stefan]
> V2->V3: add missing patch for migration/block.h
> 
>  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 9171f60..606ad4d 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 22ebe94..3178609 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 88ca69e..b83f897 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
> -- 
> 1.9.1
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-09-27 10:28 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-26 10:33 [Qemu-devel] [PATCH V3] migration: disable auto-converge during bulk block migration Peter Lieven
2017-09-26 10:59 ` Dr. David Alan Gilbert
2017-09-27  9:03 ` Juan Quintela
2017-09-27 10:28 ` Dr. David Alan Gilbert

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).