LGTM, thanks!

On Fri, Mar 21, 2014 at 11:16 AM, Dimitris Aragiorgis <[email protected]>wrote:

> Latest QEMU versions support various migration capabilities. Each
> can be enabled/disabled with 'migrate_set_capability' monitor
> command.
>
> Version 1.7.0 defines x-rdma-pin-all, auto-converge, zero-blocks,
> and xbzrle migration capabilities.
>
> Since migration capabilities are more than one, and because hvparams
> accept only strings/integers and not dicts we decide to provide
> the capabilities that should be on via a ":" separated string.
>
> In other words one can use the following to enable xbzrle and
> auto-converge:
>
> -H kvm:migration_caps=xbzrle:auto-converge
>
> IMPORTANT: xbzrle may result to BSOD for instances running
> Windows 2008r8 on drbd.
>
> Update man page of gnt-instance to include the new hvparam.
>
> Signed-off-by: Dimitris Aragiorgis <[email protected]>
> ---
>  lib/hypervisor/hv_kvm.py |    9 +++++++++
>  man/gnt-instance.rst     |   10 ++++++++++
>  src/Ganeti/Constants.hs  |    5 +++++
>  3 files changed, 24 insertions(+)
>
> diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py
> index 40a54e3..d9dae52 100644
> --- a/lib/hypervisor/hv_kvm.py
> +++ b/lib/hypervisor/hv_kvm.py
> @@ -115,6 +115,8 @@ _RUNTIME_ENTRY = {
>    constants.HOTPLUG_TARGET_DISK: lambda d, e: (d, e, None)
>    }
>
> +_MIGRATION_CAPS_DELIM = ":"
> +
>
>  def _GenerateDeviceKVMId(dev_type, dev):
>    """Helper function to generate a unique device name used by KVM
> @@ -743,6 +745,7 @@ class KVMHypervisor(hv_base.BaseHypervisor):
>      constants.HV_VGA: hv_base.NO_CHECK,
>      constants.HV_KVM_EXTRA: hv_base.NO_CHECK,
>      constants.HV_KVM_MACHINE_VERSION: hv_base.NO_CHECK,
> +    constants.HV_KVM_MIGRATION_CAPS: hv_base.NO_CHECK,
>      constants.HV_VNET_HDR: hv_base.NO_CHECK,
>      }
>
> @@ -2574,6 +2577,12 @@ class KVMHypervisor(hv_base.BaseHypervisor):
>                         instance.hvparams[constants.HV_MIGRATION_DOWNTIME])
>      self._CallMonitorCommand(instance_name, migrate_command)
>
> +    migration_caps = instance.hvparams[constants.HV_KVM_MIGRATION_CAPS]
> +    if migration_caps:
> +      for c in migration_caps.split(_MIGRATION_CAPS_DELIM):
> +        migrate_command = ("migrate_set_capability %s on" % c)
> +        self._CallMonitorCommand(instance_name, migrate_command)
> +
>      migrate_command = "migrate -d tcp:%s:%s" % (target, port)
>      self._CallMonitorCommand(instance_name, migrate_command)
>
> diff --git a/man/gnt-instance.rst b/man/gnt-instance.rst
> index 1b1d995..3d667e6 100644
> --- a/man/gnt-instance.rst
> +++ b/man/gnt-instance.rst
> @@ -804,6 +804,16 @@ machine\_version
>      machine version (due to e.g. outdated drivers). In case it's not set
>      the default version supported by your version of kvm is used.
>
> +migration\_caps
> +    Valid for the KVM hypervisor.
> +
> +    Enable specific migration capabilities by providing a ":" separated
> +    list of supported capabilites. QEMU version 1.7.0 defines
> +    x-rdma-pin-all, auto-converge, zero-blocks, and xbzrle. Please note
> +    that while a combination of xbzrle and auto-converge might speed up
> +    the migration process significantly, the first may cause BSOD on
> +    Windows8r2 instances running on drbd.
> +
>  kvm\_path
>      Valid for the KVM hypervisor.
>
> diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs
> index 0742124..c2e3e36 100644
> --- a/src/Ganeti/Constants.hs
> +++ b/src/Ganeti/Constants.hs
> @@ -1556,6 +1556,9 @@ hvKvmFloppyImagePath = "floppy_image_path"
>  hvKvmMachineVersion :: String
>  hvKvmMachineVersion = "machine_version"
>
> +hvKvmMigrationCaps :: String
> +hvKvmMigrationCaps = "migration_caps"
> +
>  hvKvmPath :: String
>  hvKvmPath = "kvm_path"
>
> @@ -1741,6 +1744,7 @@ hvsParameterTypes = Map.fromList
>    , (hvKvmFlag,                         VTypeString)
>    , (hvKvmFloppyImagePath,              VTypeString)
>    , (hvKvmMachineVersion,               VTypeString)
> +  , (hvKvmMigrationCaps,                VTypeString)
>    , (hvKvmPath,                         VTypeString)
>    , (hvKvmSpiceAudioCompr,              VTypeBool)
>    , (hvKvmSpiceBind,                    VTypeString)
> @@ -3776,6 +3780,7 @@ hvcDefaults =
>            , (hvVga,                             PyValueEx "")
>            , (hvKvmExtra,                        PyValueEx "")
>            , (hvKvmMachineVersion,               PyValueEx "")
> +          , (hvKvmMigrationCaps,                PyValueEx "")
>            , (hvVnetHdr,                         PyValueEx True)])
>    , (Fake, Map.fromList [(hvMigrationMode, PyValueEx htMigrationLive)])
>    , (Chroot, Map.fromList [(hvInitScript, PyValueEx "/ganeti-chroot")])
> --
> 1.7.10.4
>
>


-- 
Thomas Thrainer | Software Engineer | [email protected] |

Google Germany GmbH
Dienerstr. 12
80331 München

Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores

Reply via email to