[libvirt] [PATCH V2 7/8] Set qemu migration speed unlimited when migrating to file

Daniel Veillard veillard at redhat.com
Fri Sep 16 10:20:54 UTC 2011


On Thu, Sep 01, 2011 at 02:42:56PM -0600, Jim Fehlig wrote:
> From: Jim Fehlig <jfehlig at novell.com>
> 
> The qemu migration speed default is 32MiB/s as defined in migration.c
> 
> /* Migration speed throttling */
> static int64_t max_throttle = (32 << 20);
> 
> There's no need to throttle migration when targeting a file, so set migration
> speed to unlimited prior to migration, and restore to libvirt default value
> after migration.
> 
> Default units is MB for migrate_set_speed monitor command, so
> (INT64_MAX / (1024 * 1024)) is used for unlimited migration speed.
> 
> Tested with both json and text monitors.
> ---
>  src/qemu/qemu_migration.c |   17 +++++++++++++++++
>  1 files changed, 17 insertions(+), 0 deletions(-)
> 
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 38b05a9..ab38579 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -2700,6 +2700,16 @@ qemuMigrationToFile(struct qemud_driver *driver, virDomainObjPtr vm,
>      bool restoreLabel = false;
>      virCommandPtr cmd = NULL;
>      int pipeFD[2] = { -1, -1 };
> +    unsigned long saveMigBandwidth = priv->migMaxBandwidth;
> +
> +    /* Increase migration bandwidth to unlimited since target is a file.
> +     * Failure to change migration speed is not fatal. */
> +    if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) {
> +        qemuMonitorSetMigrationSpeed(priv->mon,
> +                                     QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX);
> +        priv->migMaxBandwidth = QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX;
> +        qemuDomainObjExitMonitorWithDriver(driver, vm);
> +    }
>  
>      if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATE_QEMU_FD) &&
>          (!compressor || pipe(pipeFD) == 0)) {
> @@ -2808,6 +2818,13 @@ qemuMigrationToFile(struct qemud_driver *driver, virDomainObjPtr vm,
>      ret = 0;
>  
>  cleanup:
> +    /* Restore max migration bandwidth */
> +    if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) {
> +        qemuMonitorSetMigrationSpeed(priv->mon, saveMigBandwidth);
> +        priv->migMaxBandwidth = saveMigBandwidth;
> +        qemuDomainObjExitMonitorWithDriver(driver, vm);
> +    }
> +
>      VIR_FORCE_CLOSE(pipeFD[0]);
>      VIR_FORCE_CLOSE(pipeFD[1]);
>      virCommandFree(cmd);

  ACK, makes sense, my only worry would be handling of errors, for
  example  if for some reason qemuMonitorSetMigrationSpeed() generate
a failure, we ignore it, which may make sense for some kind of errors
(like failure to understand the command) but I'm worried of more
complex scenarios. Since I don't have one handy, I'm giving the ACK :-)

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list