[libvirt] VM cpuTime from libvirt

Daniel P. Berrange berrange at redhat.com
Mon Mar 23 14:12:51 UTC 2009


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 :|




More information about the libvir-list mailing list