]>
git.proxmox.com Git - pve-manager.git/blob - lib/PVE/OpenVZ.pm
8 my $confdir = "/etc/vz/conf";
10 my $last_proc_vestat = {};
12 $ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
14 my $kernel_version = `uname -r`;
20 my $fd = IO
::Dir-
>new ($confdir) ||
21 die "unable to open dir '$confdir' - $!";
23 while (defined(my $de = $fd->read)) {
24 if ($de =~ m/^(\d+)\.conf$/) {
26 next if !$veid; # skip VE0
32 if (my $conf = PVE
::Config
::read_file
("$confdir/$de")) {
33 $d->{name
} = $conf->{hostname
}->{value
} || "VM$veid";
34 $d->{name
} =~ s/[\s]//g;
36 $d->{cpus
} = $conf->{cpus
}->{value
} || 1;
39 $d->{maxdisk
} = int ($conf->{diskspace
}->{bar
} / 1024);
42 $d->{maxmem
} = int (($conf->{vmguarpages
}->{bar
} * 4) / 1024);
49 if (my $ip = $conf->{ip_address
}->{value
}) {
51 $d->{ip
} = (split(/\s+/, $ip))[0];
55 $res->{"VEID_$veid"} = $d;
62 if ($fh = IO
::File-
>new ("/proc/mounts", "r")) {
63 while (defined (my $line = <$fh>)) {
64 if ($line =~ m
|^/var/lib
/vz/private
/(\d+)\s+/var
/lib/vz
/root/|) {
65 $res->{"VEID_$1"}->{status
} = 'mounted';
70 if ($fh = IO
::File-
>new ("/proc/user_beancounters", "r")) {
72 while (defined (my $line = <$fh>)) {
73 if ($line =~ m
|\s
*((\d
+):\s
*)?
([a-z
]+)\s
+(\d
+)\s
+(\d
+)\s
+(\d
+)\s
+(\d
+)\s
+(\d
+)$|) {
74 $veid = $2 if defined($2);
76 my ($name, $held, $maxheld, $bar, $lim, $failcnt) = ($3, $4, $5, $6, $7, $8);
77 if (my $d = $res->{"VEID_$veid"}) {
78 if ($name eq 'privvmpages') {
79 $d->{mem
} = int (($held *4) / 1024);
80 $d->{maxmem
} = int (($bar *4) / 1024);
81 } elsif ($name eq 'numproc') {
89 if ($fh = IO
::File-
>new ("/proc/vz/vzquota", "r")) {
90 while (defined (my $line = <$fh>)) {
91 if ($line =~ m
|^(\d
+):\s
+/var/lib
/vz/private
/\d
+$|) {
92 if (my $d = $res->{"VEID_$1"}) {
94 if ($line =~ m
|^\s
*1k-blocks\s
+(\d
+)\s
+(\d
+)\s
|) {
95 $d->{disk
} = int ($1/1024);
96 $d->{maxdisk
} = int ($2/1024);
103 my $cpuinfo = PVE
::Utils
::get_cpu_info
();
104 my $cpus = $cpuinfo->{cpus
} || 1;
106 # see http://wiki.openvz.org/Vestat
107 if ($fh = new IO
::File
("/proc/vz/vestat", "r")) {
108 while (defined (my $line = <$fh>)) {
109 if ($line =~ m/^\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+/) {
115 my $sum = $8*$cpus; # uptime in jiffies * cpus = available jiffies
116 my $used = $9; # used time in jiffies
118 # HZ is 250 in our kernel 2.6.24 kernel
119 # but HZ is 1000 in our kernel 2.6.18 kernel
121 $hz = 1000 if $kernel_version && $kernel_version =~ m/^2.6.18/;
122 my $uptime = int ($ut / $hz); # HZ is 250 in our kernel
124 my $d = $res->{"VEID_$veid"};
127 $d->{status
} = 'running';
128 $d->{uptime
} = $uptime;
130 if (!defined ($last_proc_vestat->{$veid}) ||
131 ($last_proc_vestat->{$veid}->{sum
} > $sum)) {
132 $last_proc_vestat->{$veid} = { used
=> 0, sum
=> 0, pctcpu
=> 0, relcpu
=> 0};
135 my $diff = $sum - $last_proc_vestat->{$veid}->{sum
};
137 if ($diff > 1000) { # don't update too often
138 my $useddiff = $used - $last_proc_vestat->{$veid}->{used
};
139 my $pctcpu = int ($useddiff*100/$diff);
140 $last_proc_vestat->{$veid}->{sum
} = $sum;
141 $last_proc_vestat->{$veid}->{used
} = $used;
142 $last_proc_vestat->{$veid}->{pctcpu
} = $d->{pctcpu
} = $pctcpu;
144 # fixme: openvz --cpus does not work currently
145 my $relcpu = $pctcpu;
146 $last_proc_vestat->{$veid}->{relcpu
} = $d->{relcpu
} = $relcpu;
149 $d->{pctcpu
} = $last_proc_vestat->{$veid}->{pctcpu
};
150 $d->{relcpu
} = $last_proc_vestat->{$veid}->{relcpu
};