+pve-container (1.0-17) unstable; urgency=medium
+
+ * fix bug #770: CPU usage stats for containers
+
+ * added symlink testcase
+
+ -- Proxmox Support Team <support@proxmox.com> Thu, 29 Oct 2015 13:09:29 +0100
+
pve-container (1.0-16) unstable; urgency=medium
* fix bug #770: implement Network stats for containers
use PVE::Network;
use PVE::AccessControl;
use PVE::ProcFSTools;
+use Time::HiRes qw (gettimeofday);
use Data::Dumper;
my $nodename = PVE::INotify::nodename();
+my $cpuinfo= PVE::ProcFSTools::read_cpuinfo();
+
cfs_register_file('/lxc/', \&parse_pct_config, \&write_pct_config);
my $rootfs_desc = {
return $res;
}
+my $last_proc_vmid_stat;
+
+my $parse_cpuacct_stat = sub {
+ my ($vmid) = @_;
+
+ my $raw = read_cgroup_value('cpuacct', $vmid, 'cpuacct.stat', 1);
+
+ my $stat = {};
+
+ if ($raw =~ m/^user (\d+)\nsystem (\d+)\n/) {
+
+ $stat->{utime} = $1;
+ $stat->{stime} = $2;
+
+ }
+
+ return $stat;
+};
+
sub vmstatus {
my ($opt_vmid) = @_;
my $active_hash = list_active_containers();
+ my $cpucount = $cpuinfo->{cpus} || 1;
+
+ my $cdtime = gettimeofday;
+
+ my $uptime = (PVE::ProcFSTools::read_proc_uptime(1))[0];
+
foreach my $vmid (keys %$list) {
my $d = $list->{$vmid};
$d->{diskwrite} = $2 if $key eq 'Write';
}
}
+
+ my $pstat = &$parse_cpuacct_stat($vmid);
+
+ my $used = $pstat->{utime} + $pstat->{stime};
+
+ my $old = $last_proc_vmid_stat->{$vmid};
+ if (!$old) {
+ $last_proc_vmid_stat->{$vmid} = {
+ time => $cdtime,
+ used => $used,
+ cpu => 0,
+ };
+ next;
+ }
+
+ my $dtime = ($cdtime - $old->{time}) * $cpucount * $cpuinfo->{user_hz};
+
+ if ($dtime > 1000) {
+ my $dutime = $used - $old->{used};
+
+ $d->{cpu} = (($dutime/$dtime)* $cpucount) / $d->{cpus};
+ $last_proc_vmid_stat->{$vmid} = {
+ time => $cdtime,
+ used => $used,
+ cpu => $d->{cpu},
+ };
+ } else {
+ $d->{cpu} = $old->{cpu};
+ }
}
my $netdev = PVE::ProcFSTools::read_proc_net_dev();