[libvirt] [PATCH] qemu: fix hang in p2p + xbzrle compression + parallel migration

Lin Ma posted 1 patch 3 years, 11 months ago
Test syntax-check failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20200416044451.21134-1-lma@suse.com
src/qemu/qemu_migration_params.c | 1 -
1 file changed, 1 deletion(-)
[libvirt] [PATCH] qemu: fix hang in p2p + xbzrle compression + parallel migration
Posted by Lin Ma 3 years, 11 months ago
When we do parallel migration, The multifd-channels migration parameter
needs to be set on the destination side as well before incoming migration
URI, unless we accept the default number of connections(2).

Usually, This can be correctly handled by libvirtd. But in this case if
we use p2p + xbzrle compression without parameter '--comp-xbzrle-cache',
qemuMigrationParamsDump returns too early, The corresponding migration 
parameter will not be set on the destination side, It results QEMU hangs.

Reproducer:
virsh migrate --live --p2p --comp-methods xbzrle \
--parallel --parallel-connections 3 GUEST qemu+ssh://dsthost/system

or

virsh migrate --live --p2p --compressed \
--parallel --parallel-connections 3 GUEST qemu+ssh://dsthost/system

Signed-off-by: Lin Ma <lma@suse.com>
---
 src/qemu/qemu_migration_params.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
index dd5e2ce1b6..810199370f 100644
--- a/src/qemu/qemu_migration_params.c
+++ b/src/qemu/qemu_migration_params.c
@@ -630,7 +630,6 @@ qemuMigrationParamsDump(qemuMigrationParamsPtr migParams,
     if (migParams->compMethods == 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE &&
         !migParams->params[QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE].set) {
         *flags |= VIR_MIGRATE_COMPRESSED;
-        return 0;
     }
 
     for (i = 0; i < QEMU_MIGRATION_COMPRESS_LAST; ++i) {
-- 
2.23.0


Re: [libvirt] [PATCH] qemu: fix hang in p2p + xbzrle compression + parallel migration
Posted by Jiri Denemark 3 years, 11 months ago
On Thu, Apr 16, 2020 at 12:44:51 +0800, Lin Ma wrote:
> When we do parallel migration, The multifd-channels migration parameter
> needs to be set on the destination side as well before incoming migration
> URI, unless we accept the default number of connections(2).
> 
> Usually, This can be correctly handled by libvirtd. But in this case if
> we use p2p + xbzrle compression without parameter '--comp-xbzrle-cache',
> qemuMigrationParamsDump returns too early, The corresponding migration 
> parameter will not be set on the destination side, It results QEMU hangs.
> 
> Reproducer:
> virsh migrate --live --p2p --comp-methods xbzrle \
> --parallel --parallel-connections 3 GUEST qemu+ssh://dsthost/system
> 
> or
> 
> virsh migrate --live --p2p --compressed \
> --parallel --parallel-connections 3 GUEST qemu+ssh://dsthost/system
> 
> Signed-off-by: Lin Ma <lma@suse.com>
> ---
>  src/qemu/qemu_migration_params.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
> index dd5e2ce1b6..810199370f 100644
> --- a/src/qemu/qemu_migration_params.c
> +++ b/src/qemu/qemu_migration_params.c
> @@ -630,7 +630,6 @@ qemuMigrationParamsDump(qemuMigrationParamsPtr migParams,
>      if (migParams->compMethods == 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE &&
>          !migParams->params[QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE].set) {
>          *flags |= VIR_MIGRATE_COMPRESSED;
> -        return 0;
>      }
>  
>      for (i = 0; i < QEMU_MIGRATION_COMPRESS_LAST; ++i) {

Oops, looks like a leftover from the past when xbzrle-cache-size was
the only parameter.

Reviewed-by: Jiri Denemark <jdenemar@redhat.com>