use mbps instead of bps

The new parser automatically converts old bps to mbps.
This commit is contained in:
Dietmar Maurer 2012-08-29 13:42:41 +02:00
parent f36ed4f4a0
commit 9bf371a66b
2 changed files with 33 additions and 18 deletions

View File

@ -658,7 +658,7 @@ my $vmconfig_delete_option = sub {
PVE::QemuServer::update_config_nolock($vmid, $conf, 1); PVE::QemuServer::update_config_nolock($vmid, $conf, 1);
}; };
my $safe_int_ne = sub { my $safe_num_ne = sub {
my ($a, $b) = @_; my ($a, $b) = @_;
return 0 if !defined($a) && !defined($b); return 0 if !defined($a) && !defined($b);
@ -694,13 +694,16 @@ my $vmconfig_update_disk = sub {
$conf = PVE::QemuServer::load_config($vmid); # update/reload $conf = PVE::QemuServer::load_config($vmid); # update/reload
} }
if(&$safe_int_ne($drive->{bps}, $old_drive->{bps}) || if(&$safe_num_ne($drive->{mbps}, $old_drive->{mbps}) ||
&$safe_int_ne($drive->{bps_rd}, $old_drive->{bps_rd}) || &$safe_num_ne($drive->{mbps_rd}, $old_drive->{mbps_rd}) ||
&$safe_int_ne($drive->{bps_wr}, $old_drive->{bps_wr}) || &$safe_num_ne($drive->{mbps_wr}, $old_drive->{mbps_wr}) ||
&$safe_int_ne($drive->{iops}, $old_drive->{iops}) || &$safe_num_ne($drive->{iops}, $old_drive->{iops}) ||
&$safe_int_ne($drive->{iops_rd}, $old_drive->{iops_rd}) || &$safe_num_ne($drive->{iops_rd}, $old_drive->{iops_rd}) ||
&$safe_int_ne($drive->{iops_wr}, $old_drive->{iops_wr})) { &$safe_num_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);
} }
} }
} }

View File

@ -777,7 +777,7 @@ sub create_conf_nolock {
my $parse_size = sub { my $parse_size = sub {
my ($value) = @_; 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); my ($size, $unit) = ($1, $3);
if ($unit) { if ($unit) {
if ($unit eq 'K') { if ($unit eq 'K') {
@ -832,13 +832,18 @@ sub parse_drive {
foreach my $p (split (/,/, $data)) { foreach my $p (split (/,/, $data)) {
next if $p =~ m/^\s*$/; 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); my ($k, $v) = ($1, $2);
$k = 'file' if $k eq 'volume'; $k = 'file' if $k eq 'volume';
return undef if defined $res->{$k}; 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; $res->{$k} = $v;
} else { } else {
if (!$res->{file} && $p !~ m/=/) { 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->{backup} && $res->{backup} !~ m/^(yes|no)$/;
return undef if $res->{aio} && $res->{aio} !~ m/^(native|threads)$/; 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_rd} && $res->{iops};
return undef if $res->{iops_wr} && $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} && $res->{iops} !~ m/^\d+$/;
return undef if $res->{iops_rd} && $res->{iops_rd} !~ m/^\d+$/; return undef if $res->{iops_rd} && $res->{iops_rd} !~ m/^\d+$/;
return undef if $res->{iops_wr} && $res->{iops_wr} !~ m/^\d+$/; return undef if $res->{iops_wr} && $res->{iops_wr} !~ m/^\d+$/;
@ -896,13 +903,13 @@ sub parse_drive {
return $res; 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 iops iops_rd iops_wr);
sub print_drive { sub print_drive {
my ($vmid, $drive) = @_; my ($vmid, $drive) = @_;
my $opts = ''; my $opts = '';
foreach my $o (@qemu_drive_options, 'backup') { foreach my $o (@qemu_drive_options, 'mbps', 'mbps_rd', 'mbps_wr', 'backup') {
$opts .= ",$o=$drive->{$o}" if $drive->{$o}; $opts .= ",$o=$drive->{$o}" if $drive->{$o};
} }
@ -1041,6 +1048,11 @@ sub print_drive_full {
$opts .= ",$o=$drive->{$o}" if $drive->{$o}; $opts .= ",$o=$drive->{$o}" if $drive->{$o};
} }
foreach my $o (qw(bps bps_rd bps_wr)) {
my $v = $drive->{"m$o"};
$opts .= ",$o=" . int($v*1024*1024) if $v;
}
# use linux-aio by default (qemu default is threads) # use linux-aio by default (qemu default is threads)
$opts .= ",aio=native" if !$drive->{aio}; $opts .= ",aio=native" if !$drive->{aio};