[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-stable] [Qemu-devel] [PATCH V3] migration: disable auto-conver
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-stable] [Qemu-devel] [PATCH V3] migration: disable auto-converge during bulk block migration |
Date: |
Wed, 27 Sep 2017 11:28:01 +0100 |
User-agent: |
Mutt/1.9.0 (2017-09-02) |
* Peter Lieven (address@hidden) 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: address@hidden
> Signed-off-by: Peter Lieven <address@hidden>
> ---
> 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 / address@hidden / Manchester, UK