This reduce guest cpu speed if dirtied bytes is 50% more than the approx.amount of bytes that just got transferred since the last time we were in this routine.
qemu commit : http://git.qemu.org/?p=qemu.git;a=commit;h=bde1e2ec2176c363c1783bf8887b6b1beb08dfee tested with "stress -m 2 -c 2" under debian without autoconvergence : downtime 12s - duration 12min with autoconvergence : downtime 2s - duration 4min Signed-off-by: Alexandre Derumier <[email protected]> --- PVE/QemuMigrate.pm | 7 ++----- PVE/QemuServer.pm | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index d980f0b..f5c86c8 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -385,13 +385,10 @@ sub phase2 { $self->log('info', "migrate_set_downtime error: $@") if $@; } - my $capabilities = {}; - $capabilities->{capability} = "xbzrle"; - $capabilities->{state} = JSON::false; - eval { - PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate-set-capabilities", capabilities => [$capabilities]); + PVE::QemuServer::set_migration_caps($vmid); }; + warn $@ if $@; #set cachesize 10% of the total memory my $cachesize = int($conf->{memory}*1048576/10); diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index a5576a6..591a863 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -3094,6 +3094,32 @@ sub qga_unfreezefs { #need to impplement call to qemu-ga } +sub PVE::QemuServer::set_migration_caps { + my ($vmid) = @_; + + my @capabilities = (); + my $cap_ref = \@capabilities; + + my $enabled_cap = { + "auto-converge" => 1, + "xbzrle" => 0, + "x-rdma-pin-all" => 0, + "zero-blocks" => 0, + }; + + my $supported_capabilities = PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "query-migrate-capabilities"); + + for my $supported_capability (@$supported_capabilities){ + if($enabled_cap->{$supported_capability->{capability}} eq 1){ + my $capability->{capability} = $supported_capability->{capability}; + $capability->{state} = JSON::true; + push(@$cap_ref,$capability); + } + } + + PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate-set-capabilities", capabilities => $cap_ref); +} + sub vm_start { my ($storecfg, $vmid, $statefile, $skiplock, $migratedfrom, $paused, $forcemachine, $spice_ticket) = @_; @@ -3160,12 +3186,12 @@ sub vm_start { } if ($migratedfrom) { - my $capabilities = {}; - $capabilities->{capability} = "xbzrle"; - $capabilities->{state} = JSON::true; - eval { vm_mon_cmd_nocheck($vmid, "migrate-set-capabilities", capabilities => [$capabilities]); }; + + eval { + PVE::QemuServer::set_migration_caps($vmid); + }; warn $@ if $@; - + if ($spice_port) { print "spice listens on port $spice_port\n"; if ($spice_ticket) { -- 1.7.10.4 _______________________________________________ pve-devel mailing list [email protected] http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
