[pve-devel] [PATCH] - fix setting migration parameters
Dietmar Maurer
dietmar at proxmox.com
Thu Dec 27 07:21:38 CET 2012
> - move migration speed/downtime from QemuServer vm_start to
> QemuMigrate phase2
This is not needed - or why do we need that?
> - lower default migration downtime value to 0
>
> changelog by aderumier
>
> - remove default value of 1s for migrate_downtime
why? - we added that because the default cause seroius problems!
> - add logs downtime and expected downtime migration stats
Please can you send an extra patch for that?
> - only send qmp migrate_downtime if migrate_downtime is defined
I want to have that as default (set on startup).
> - add errors logs on qm start of target vm.
great, but can we have an extra commit for that? Those changes seems to be unrelated.
> - cast int() for json values
>
> tested with youtube video playing, no qmp migrate_downtime (default of
> 30ms), the downtime is around 500-600ms.
> ---
> PVE/QemuMigrate.pm | 43 +++++++++++++++++++++++++++++++++++-------
> -
> PVE/QemuServer.pm | 16 ----------------
> 2 files changed, 35 insertions(+), 24 deletions(-)
>
> diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index
> 0711681..dbbeb69 100644
> --- a/PVE/QemuMigrate.pm
> +++ b/PVE/QemuMigrate.pm
> @@ -312,7 +312,10 @@ sub phase2 {
> if ($line =~ m/^migration listens on port (\d+)$/) {
> $rport = $1;
> }
> - }, errfunc => sub {});
> + }, errfunc => sub {
> + my $line = shift;
> + print $line."\n";
> + });
>
> die "unable to detect remote migration port\n" if !$rport;
>
> @@ -323,24 +326,46 @@ sub phase2 {
> $self->{tunnel} = $self->fork_tunnel($self->{nodeip}, $lport, $rport);
>
> $self->log('info', "starting online/live migration on port $lport");
> - # start migration
>
> - my $start = time();
> + # load_defaults
> + my $defaults = PVE::QemuServer::load_defaults();
> +
> + # always set migrate speed (overwrite kvm default of 32m)
> + # we set a very hight default of 8192m which is basically unlimited
> + my $migrate_speed = $defaults->{migrate_speed} || 8192;
> + $migrate_speed = $conf->{migrate_speed} || $migrate_speed;
> + $migrate_speed = $migrate_speed * 1048576;
> + $self->log('info', "migrate_set_speed: $migrate_speed");
> + eval {
> + PVE::QemuServer::vm_mon_cmd_nocheck($vmid,
> "migrate_set_speed", value => int($migrate_speed));
> + };
> + $self->log('info', "migrate_set_speed error: $@") if $@;
> +
> + my $migrate_downtime = $defaults->{migrate_downtime};
> + $migrate_downtime = $conf->{migrate_downtime} if defined($conf-
> >{migrate_downtime});
> + if (defined($migrate_downtime)) {
> + $self->log('info', "migrate_set_downtime: $migrate_downtime");
> + eval {
> + PVE::QemuServer::vm_mon_cmd_nocheck($vmid,
> "migrate_set_downtime", value => int($migrate_downtime));
> + };
> + $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]);
> };
>
> - #set cachesize 10% of the total memory
> + # set cachesize 10% of the total memory
> my $cachesize = int($conf->{memory}*1048576/10);
> eval {
> PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate-set-
> cache-size", value => $cachesize);
> };
>
> + # start migration
> + my $start = time();
> eval {
> PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate", uri =>
> "tcp:localhost:$lport");
> };
> @@ -353,7 +378,6 @@ sub phase2 {
> while (1) {
> $i++;
> my $avglstat = $lstat/$i if $lstat;
> -
> usleep($usleep);
> my $stat;
> eval {
> @@ -375,7 +399,8 @@ sub phase2 {
> my $delay = time() - $start;
> if ($delay > 0) {
> my $mbps = sprintf "%.2f", $conf->{memory}/$delay;
> - $self->log('info', "migration speed: $mbps MB/s");
> + $self->log('info', "migration speed: $mbps MB/s -
> downtime
> +$stat->{downtime} ms");
> +
> }
> }
>
> @@ -397,11 +422,13 @@ sub phase2 {
> my $xbzrlepages = $stat->{"xbzrle-cache"}->{"pages"} || 0;
> my $xbzrlecachemiss = $stat->{"xbzrle-cache"}->{"cache-
> miss"} || 0;
> my $xbzrleoverflow = $stat->{"xbzrle-cache"}->{"overflow"}
> || 0;
> + my $expected_downtime = $stat->{"expected-downtime"} ||
> 0;
> +
> #reduce sleep if remainig memory if lower than the everage
> transfert
> $usleep = 300000 if $avglstat && $rem < $avglstat;
>
> $self->log('info', "migration status: $stat->{status}
> (transferred ${trans}, " .
> - "remaining ${rem}), total ${total})");
> + "remaining ${rem}), total ${total}, expected
> downtime
> +${expected_downtime})");
>
> #$self->log('info', "migration xbzrle cachesize:
> ${xbzrlecachesize} transferred ${xbzrlebytes} pages ${xbzrlepages} cachemiss
> ${xbzrlecachemiss} overflow ${xbzrleoverflow}");
> }
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index
> 165eaf6..b168c74 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -385,7 +385,6 @@ EODESCR
> type => 'integer',
> description => "Set maximum tolerated downtime (in seconds) for
> migrations.",
> minimum => 0,
> - default => 1,
> },
> cdrom => {
> optional => 1,
> @@ -2976,21 +2975,6 @@ sub vm_start {
> warn $@ if $@;
> }
>
> - # always set migrate speed (overwrite kvm default of 32m)
> - # we set a very hight default of 8192m which is basically unlimited
> - my $migrate_speed = $defaults->{migrate_speed} || 8192;
> - $migrate_speed = $conf->{migrate_speed} || $migrate_speed;
> - $migrate_speed = $migrate_speed * 1048576;
> - eval {
> - vm_mon_cmd_nocheck($vmid, "migrate_set_speed", value =>
> $migrate_speed);
> - };
> -
> - my $migrate_downtime = $defaults->{migrate_downtime};
> - $migrate_downtime = $conf->{migrate_downtime} if defined($conf-
> >{migrate_downtime});
> - if (defined($migrate_downtime)) {
> - eval { vm_mon_cmd_nocheck($vmid, "migrate_set_downtime",
> value => $migrate_downtime); };
> - }
> -
> if($migratedfrom) {
> my $capabilities = {};
> $capabilities->{capability} = "xbzrle";
> --
> 1.7.10.4
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
More information about the pve-devel
mailing list