1. I understand that if cpuTime of a VM equals the elapsed time then the
VM fully utilizes all the cputime of ALL its vcpus .
If it is 0.5 of the elapsed time then it utilizes half of its full
capacity etc.
2. In my case I just started 2 VMs with 2 identical disk images that I
have generated without running any exhaustive loop.
I would expect the cpuTime of each VM to be much less . I don't
believe the init process runs an exhaustive loop ...
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
:|