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

Reply via email to