bwlimit: honor bwlimit for migrate qmp call

The 'migrate_speed' can be set in the VM config. Additionally the 'migrate'
bwlimit from datacenter.cfg (storage-specific limits play no role for
memory+state migration) or the parameter provided to the API call can restrict
the speed. Take the lower of the two.

This patch also refactors the setting of migrate_speed and comments for clarity.

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
This commit is contained in:
Stoiko Ivanov 2019-04-01 11:30:58 +02:00 committed by Thomas Lamprecht
parent f17fb184c6
commit ddd664d739

View File

@ -675,11 +675,21 @@ sub phase2 {
# 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;
# migrate speed can be set via bwlimit (datacenter.cfg and API) and via the
# migrate_speed parameter in qm.conf - take the lower of the two.
my $bwlimit = PVE::Storage::get_bandwidth_limit('migrate', undef, $opt_bwlimit) // 0;
my $migrate_speed = $conf->{migrate_speed} // $bwlimit;
# migrate_speed is in MB/s, bwlimit in KB/s
$migrate_speed *= 1024;
$migrate_speed = ($bwlimit < $migrate_speed) ? $bwlimit : $migrate_speed;
# always set migrate speed (overwrite kvm default of 32m) we set a very high
# default of 8192m which is basically unlimited
$migrate_speed ||= ($defaults->{migrate_speed} || 8192) * 1024;
# qmp takes migrate_speed in B/s.
$migrate_speed *= 1024;
$self->log('info', "migrate_set_speed: $migrate_speed");
eval {
PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate_set_speed", value => int($migrate_speed));