Proxmox 1.8 Patch : vm disks iostats

spirit

Distinguished Member
Apr 2, 2010
7,144
1,209
273
www.groupe-cyllene.com
Hi,
here a little contribution, disk io statistics in vm list display patch.
you need kernel > 2.6.20


/usr/share/perl5/PVE/Qemu.pm

Code:
--- /usr/share/perl5/PVE/Qemu.pm	2011-05-31 15:49:53.000000000 +0200
+++ Qemu.pm	2011-06-08 04:02:17.000000000 +0200
@@ -63,6 +63,18 @@
 	}
 	next if !$statstr;
 
+
+	my $iostat = {};
+
+	if (my $fh = IO::File->new ("/proc/$pid/io", "r")) {
+	  while (defined (my $line = <$fh>)) {
+	    if ($line =~ m/^\s*(.*):\s*(\d+)/) {
+		$iostat->{$1} = $2;
+	    }
+	  }
+	  close($fh);
+	}
+
 	my ($utime, $stime, $vsize, $rss, $starttime);
 	if ($statstr =~ m/^$pid \(.*\) \S (-?\d+) -?\d+ -?\d+ -?\d+ -?\d+ \d+ \d+ \d+ \d+ \d+ (\d+) (\d+) (-?\d+) (-?\d+) -?\d+ -?\d+ -?\d+ 0 (\d+) (\d+) (-?\d+) \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ -?\d+ -?\d+ \d+ \d+ \d+/) {
 	    ($utime, $stime, $vsize, $rss, $starttime) = ($2, $3, $7, $8 * 4096, $6);
@@ -80,6 +92,8 @@
 	    $d->{mem} = int (($rss/$vsize)*$d->{maxmem});
 	}
 
+
+
 	my $old = $last_proc_pid_stat->{$pid};
 	if (!$old) {
 	    $last_proc_pid_stat->{$pid} = { 
@@ -87,26 +101,41 @@
 		used => $used,
 		pctcpu => 0,
 		relcpu => 0,
+		ioread => 0,
+		iowrite => 0,
+		read_bytes => 0,
+		write_bytes => 0,
 	    };
 	    next;
 	}
 
 	my $dtime = ($ctime -  $old->{time}) * $cpucount * $clock_ticks;
 
+
 	if ($dtime > 1000) {
 	    my $dutime = $used -  $old->{used};
 
 	    $d->{pctcpu} = int((($dutime)*100)/$dtime);
 	    $d->{relcpu} = int (($d->{pctcpu} * $cpucount) / $vcpus);
+	    $d->{ioread} = int(($iostat->{read_bytes} - $old->{read_bytes})/($ctime -  $old->{time})/1024);
+	    $d->{iowrite} = int(($iostat->{write_bytes} - $old->{write_bytes})/($ctime -  $old->{time})/1024);
+
 	    $last_proc_pid_stat->{$pid} = {
 		time => $ctime, 
 		used => $used,
 		pctcpu => $d->{pctcpu},
 		relcpu => $d->{relcpu},
+		ioread => $d->{ioread},
+		iowrite => $d->{iowrite},
+		read_bytes => $iostat->{read_bytes},
+		write_bytes => $iostat->{write_bytes},
 	    };
 	} else {
 	    $d->{pctcpu} = $old->{pctcpu};
 	    $d->{relcpu} = $old->{relcpu};
+	    $d->{ioread} = $old->{ioread};
+	    $d->{iowrite} = $old->{iowrite};
+
 	}
     }


Code:
--- /usr/share/perl5/PVE/HTMLUtils.pm	2011-05-09 12:16:00.000000000 +0200
+++ HTMLUtils.pm	2011-06-04 09:03:05.000000000 +0200
@@ -364,6 +364,8 @@
 		  '1', '235px', __('Name'),
 		  '1', '50px', __('Uptime'),
 		  '1', '100px', __('Disk'),
+		  '1', '100px', __('Read KB/s'),
+		  '1', '100px', __('Write KB/s'),
 		  '1', '100px', __('Memory'),
 		  '1', '100px', __('CPU'),
 		  );
@@ -441,12 +443,12 @@
 		$cpubar = '';
 	    }
 	    $table->add_row ('', $menu, $veid, $d->{status}, $d->{name},
-			     uptime_to_str ($d->{uptime}), $diskbar, $membar, $cpubar);
+			     uptime_to_str ($d->{uptime}), $diskbar, $d->{ioread},$d->{iowrite},$membar, $cpubar);
 	} elsif ($d->{status} eq 'create') {
 	    $table->set_row_link ("/logs/index.htm?cid=$cid&amp;veid=$veid");
-	    $table->add_row ('', '', $veid, $d->{status}, '', '', '', '', '');
+	    $table->add_row ('', '', $veid, $d->{status}, '', '', '', '','','', '');
 	} else {
-	    $table->add_row ('', '', $veid, $d->{status}, '', '', '', '', '');
+	    $table->add_row ('', '', $veid, $d->{status}, '', '', '', '','','', '');
 	}
     }
 

Attachments