Hi,
We are working on fixing CPU utilization calculation of guests (VMs) in
Ceilometer metering service of OpenStack.
Per that fix, we retrieve, at the host level, se.statistics.wait_sum (or
se.wait_sum in old versions) Linux kernel schedstat counter of the
KVM/QEMU threads ? that represent the VM. That counter denotes the time in
milliseconds the thread 'wants' to run (but not actually running because
of a contention).
However, as Daniel Berrange mentioned in the fix review, it would be
better to retrieve that information from libvirt instead and he asked me
to raise this in this mailing list.
I could not notice that libvirt exposes such a counter.
It would be very good if virDomainInfo (
https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainInfo) can be
added with cpuWait in addition to cpuTime it currently has so that cpuWait
will denote the total *time* the VM *wants* to run.
Adding cpuWait to any other location of domain is fine as well.
We can't modify the virDomainInfo struct becase that would be an ABI
incompatible change. Fortunately we have a better API that is extensible
that we can use - virDomainListGetStats() with the flag
VIR_DOMAIN_STATS_VCPU currently returns per-VCPU information - the
state (running or not) and the CPU time:
# virsh domstats --vcpu demo
Domain: 'demo'
vcpu.current=3
vcpu.maximum=3
vcpu.0.state=1
vcpu.0.time=107130000000
vcpu.1.state=1
vcpu.1.time=0
vcpu.2.state=1
vcpu.2.time=0
We could easily extend this to add vcpu.NNN.wait=XXXXX data of the kind
you request
Regards,
Daniel
--
|: