Hi Daniel
Sorry for bothering . I think I understand now how the cpuTime member of
(domainInfo) represents the load:
If VM1 has 4 processors assigned out of total 8 of the Host machine and
it is fully utilized , then after elapsed time of 'n' (real clock) seconds
the delta cpuTime will be 4 *n seconds , so the utilization of the
Host cpu by VM1 is (4 *n) / (n * 8) = 0.5 i.e 50%
Is that correct ?
It just happened that in my trivial case of the VMs running no script of
mine the delta cpuTime of VM1 (and of the similar VM2) was the elapsed
real time 'n'
so the utilization was n/ n*8 = 0.125 as I saw with virt-manager or
virt-top. That was misleading
Zvi Dubitzky
Virtualization and System Architecture Email:dubi@il.ibm.com
IBM Haifa Research Laboratory Phone: +972-4-8296182
Haifa, 31905, ISRAEL
"Daniel P. Berrange" <berrange(a)redhat.com>
23/03/2009 16:12
Please respond to
"Daniel P. Berrange" <berrange(a)redhat.com>
To
Zvi Dubitzky/Haifa/IBM@IBMIL
cc
libvir-list(a)redhat.com
Subject
Re: [libvirt] VM cpuTime from libvirt
On Sun, Mar 22, 2009 at 02:28:00PM +0200, Zvi Dubitzky wrote:
Currently the cat /proc/pid/stat where pid is the pid of the VM
Qemu
process gives the utime + stime of the VM according to libvirt.
Unfortunately I notice that this is actually the elapsed time of the
host
. I find this by using libvirt , sampling the cputime of each VM
process and compare it to the total elapsed time (of the Host Linux
machine) . Roughly assuming full VM vcpu utlization, the cpu
utilization
of every VM is actually : ( # of VM vcpus / total # of Host cpus)
.This
implies that there is no idle time per VM (while actually there is)
.
We
only know the idle time of the Host via the top command at the
Host .
Is the cputime of a VM (from cat /proc/pid/stat of the Qemu process as
used by libvirt) realy the cputime of the VM ?
I tested with a host having 2 sockets X 4cpus =8 totally and
assigned
4 cpus to VM1 and VM2 . libvirt gave equal cputime for each VM
which
is
equal to the total machine elapsed time. But even if VM1 has 4 vcpus
and
VM2 have 8 vcpus the cputime of each VM
(from cat /proc/pid/stat) is the elapsed time.
The truth is that I am running the libvirt application on the host
machine
and do the application wait there . Should that matter much?
Each guest idle time is needed from the KVM for real cpu utilization
calc to be independent from the guest OS .
At least for Linux we can manually run 'top' at each guest terminal
window , but I do not know if it will show the real idle time or the
total
machine (host) idle time .At least linux has no idle process .
Besides
this is not a good programmatic way to get the VM idle time.
Is there a cure or I am missing something ?
I have a host machine with 8 cpus
I run 2 guests, one with 4 vcpus, and one with 1 vcpu.
Inside the first guest I run 4 copies of
while /bin/true ; do /bin/true ; done
This generates 100% cpu usage within the guest
If I run 'virt-top' on the host machine, I see that guest reported
as using 50% cpu. This is accurate because 4 cpus in guest, 100%
utilized is 1/2 of the total resources available to the host which
has 8 cpus.
Similarly if i run that load generator on the 2nd guest, which only
has 1 vcpu, then virt-top again correctly shows that guest as using
12.5% of total host CPU resources (100% / 8 == 12.5%)
So AFAICT, everything is working exactly as designed.
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/
:|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org
:|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/
:|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505
:|