[libvirt PATCH 7/7] qemu_migration: Implement VIR_MIGRATE_ZEROCOPY flag

Jiri Denemark jdenemar at redhat.com
Thu Jun 23 14:20:08 UTC 2022


On Thu, Jun 23, 2022 at 15:08:30 +0100, Daniel P. Berrangé wrote:
> On Thu, Jun 23, 2022 at 03:58:12PM +0200, Jiri Denemark wrote:
> > Resolves: https://gitlab.com/libvirt/libvirt/-/issues/306
> > 
> > Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> > ---
> >  src/qemu/qemu_migration.c        | 21 +++++++++++++++++++++
> >  src/qemu/qemu_migration.h        |  1 +
> >  src/qemu/qemu_migration_params.c |  6 ++++++
> >  src/qemu/qemu_migration_params.h |  1 +
> >  4 files changed, 29 insertions(+)
> > 
> > diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> > index 272f1b1b59..02a465f6cb 100644
> > --- a/src/qemu/qemu_migration.c
> > +++ b/src/qemu/qemu_migration.c
> > @@ -2634,6 +2634,12 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
> >          }
> >      }
> >  
> > +    if (flags & VIR_MIGRATE_ZEROCOPY && !(flags & VIR_MIGRATE_PARALLEL)) {
> > +        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> > +                       _("zero-copy is only available for parallel migration"));
> > +        return NULL;
> > +    }
> 
> It is also not compatible with compression, or TLS.

Yeah, no zero-copy when you need to transform the data in any way. I
think QEMU provides a reasonable error message already. But since it
mentions "multifd" while our flag is called "parallel", I decided to
explicitly handle this case:

    internal error: unable to execute QEMU command
    'migrate-set-capabilities': Zero copy only available for
    non-compressed non-TLS multifd migration

Do you think I should explicitly check all flags instead?

> > diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
> > index 4e83d8d8bd..cc66ed8229 100644
> > --- a/src/qemu/qemu_migration_params.c
> > +++ b/src/qemu/qemu_migration_params.c
> > @@ -94,6 +94,7 @@ VIR_ENUM_IMPL(qemuMigrationCapability,
> >                "multifd",
> >                "dirty-bitmaps",
> >                "return-path",
> > +              "zero-copy-send",
> >  );
> 
> Note the QEMU name was picked in case we later get zero copy
> receive, as a separately enabled feature.

The question is whether we need to do the same or if we can have a
single zero copy which would enable the right one depending on the side
of migration...

Jirka


More information about the libvir-list mailing list