I just tried to add that to QemuServer.js, but it is really a mess. What if we change 'bps' to 'mbps'. The following seems to work:
The new parser automatically converts old bps to mbps. --- PVE/API2/Qemu.pm | 11 +++++++---- PVE/QemuServer.pm | 25 ++++++++++++++++--------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 71585a5..9ba1f4d 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -694,13 +694,16 @@ my $vmconfig_update_disk = sub { $conf = PVE::QemuServer::load_config($vmid); # update/reload } - if(&$safe_int_ne($drive->{bps}, $old_drive->{bps}) || - &$safe_int_ne($drive->{bps_rd}, $old_drive->{bps_rd}) || - &$safe_int_ne($drive->{bps_wr}, $old_drive->{bps_wr}) || + if(&$safe_int_ne($drive->{mbps}, $old_drive->{mbps}) || + &$safe_int_ne($drive->{mbps_rd}, $old_drive->{mbps_rd}) || + &$safe_int_ne($drive->{mbps_wr}, $old_drive->{mbps_wr}) || &$safe_int_ne($drive->{iops}, $old_drive->{iops}) || &$safe_int_ne($drive->{iops_rd}, $old_drive->{iops_rd}) || &$safe_int_ne($drive->{iops_wr}, $old_drive->{iops_wr})) { - PVE::QemuServer::qemu_block_set_io_throttle($vmid,"drive-$opt",$drive->{bps}, $drive->{bps_rd}, $drive->{bps_wr}, $drive->{iops}, $drive->{iops_rd}, $drive->{iops_wr}) if !PVE::QemuServer::drive_is_cdrom($drive); + PVE::QemuServer::qemu_block_set_io_throttle($vmid,"drive-$opt", $drive->{mbps}*1024*1024, + $drive->{mbps_rd}*1024*1024, $drive->{mbps_wr}*1024*1024, + $drive->{iops}, $drive->{iops_rd}, $drive->{iops_wr}) + if !PVE::QemuServer::drive_is_cdrom($drive); } } } diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index a52c249..0f8fa87 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -777,7 +777,7 @@ sub create_conf_nolock { my $parse_size = sub { my ($value) = @_; - return undef if $value !~ m/^([1-9]\d*(\.\d+)?)([KMG])?$/; + return undef if $value !~ m/^(\d+(\.\d+)?)([KMG])?$/; my ($size, $unit) = ($1, $3); if ($unit) { if ($unit eq 'K') { @@ -832,13 +832,18 @@ sub parse_drive { foreach my $p (split (/,/, $data)) { next if $p =~ m/^\s*$/; - if ($p =~ m/^(file|volume|cyls|heads|secs|trans|media|snapshot|cache|format|rerror|werror|backup|aio|bps|bps_rd|bps_wr|iops|iops_rd|iops_wr|size)=(.+)$/) { + if ($p =~ m/^(file|volume|cyls|heads|secs|trans|media|snapshot|cache|format|rerror|werror|backup|aio|bps|mbps|bps_rd|mbps_rd|bps_wr|mbps_wr|iops|iops_rd|iops_wr|size)=(.+)$/) { my ($k, $v) = ($1, $2); $k = 'file' if $k eq 'volume'; return undef if defined $res->{$k}; + if ($k eq 'bps' || $k eq 'bps_rd' || $k eq 'bps_wr') { + return undef if !$v || $v !~ m/^\d+/; + $k = "m$k"; + $v = sprintf("%.3f", $v / (1024*1024)); + } $res->{$k} = $v; } else { if (!$res->{file} && $p !~ m/=/) { @@ -865,14 +870,16 @@ sub parse_drive { return undef if $res->{backup} && $res->{backup} !~ m/^(yes|no)$/; return undef if $res->{aio} && $res->{aio} !~ m/^(native|threads)$/; - return undef if $res->{bps_rd} && $res->{bps}; - return undef if $res->{bps_wr} && $res->{bps}; + + return undef if $res->{mbps_rd} && $res->{mbps}; + return undef if $res->{mbps_wr} && $res->{mbps}; + + return undef if $res->{mbps} && $res->{mbps} !~ m/^\d+(\.\d+)?$/; + return undef if $res->{mbps_rd} && $res->{mbps_rd} !~ m/^\d+(\.\d+)?$/; + return undef if $res->{mbps_wr} && $res->{mbps_wr} !~ m/^\d+(\.\d+)?$/; + return undef if $res->{iops_rd} && $res->{iops}; return undef if $res->{iops_wr} && $res->{iops}; - - return undef if $res->{bps} && $res->{bps} !~ m/^\d+$/; - return undef if $res->{bps_rd} && $res->{bps_rd} !~ m/^\d+$/; - return undef if $res->{bps_wr} && $res->{bps_wr} !~ m/^\d+$/; return undef if $res->{iops} && $res->{iops} !~ m/^\d+$/; return undef if $res->{iops_rd} && $res->{iops_rd} !~ m/^\d+$/; return undef if $res->{iops_wr} && $res->{iops_wr} !~ m/^\d+$/; @@ -896,7 +903,7 @@ sub parse_drive { return $res; } -my @qemu_drive_options = qw(heads secs cyls trans media format cache snapshot rerror werror aio bps bps_rd bps_wr iops iops_rd iops_wr); +my @qemu_drive_options = qw(heads secs cyls trans media format cache snapshot rerror werror aio mbps mbps_rd mbps_wr iops iops_rd iops_wr); sub print_drive { my ($vmid, $drive) = @_; -- 1.7.2.5 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel